浅谈PHP接收POST数据方式


Posted in PHP onJune 05, 2015

通常情况下用户使用浏览器网页表单向服务器post提交数据,我们使用PHP接收用户POST到服务器的数据,并进行适当的处理。但有些情况下,如用户使用客户端软件向服务端php程序发送post数据,而不能用$_POST来识别,那又该如何处理呢?

$_POST方式接收数据

$_POST方式是通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量。如使用$_POST['name']就可以接收到网页表单以及网页异步方式post过来的数据,即$_POST只能接收文档类型为Content-Type: application/x-www-form-urlencoded提交的数据。

$GLOBALS['HTTP_RAW_POST_DATA']方式接收数据

如果用过post过来的数据不是PHP能够识别的文档类型,比如 text/xml 或者 soap 等等,我们可以用$GLOBALS['HTTP_RAW_POST_DATA']来接收。$HTTP_RAW_POST_DATA 变量包含有原始的POST数据。此变量仅在碰到未识别MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于enctype="multipart/form-data" 表单数据不可用。也就是说使用$HTTP_RAW_POST_DATA无法接收网页表单post过来的数据。

php://input方式接收数据

如果访问原始 POST 数据的更好方法是 php://input。php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的php.ini设置,而php://input不能用于 enctype="multipart/form-data"。

例如,用户使用某个客户端应用程序post给服务器一个文件,文件的内容我们不管它,但是我们要把这个文件完整的保存在服务器上,我们可以使用如下代码:

$input = file_get_contents('php://input'); 
file_put_contents($original, $input); //$original为服务器上的文件

以上代码使用file_get_contents('php://input')接收post数据,然后将数据写入$original文件中,其实可以理解为从客户端上传了一个文件到服务器上,此类应用非常多,尤其是我们PHP开发要与C,C++等应用程序开发进行产品联合开发时会用到。

以下是一个小示例,演示了$_POST,$GLOBALS['HTTP_RAW_POST_DATA']和php://input三种不同方式的接收POST数据处理:

a.html

<form name="demo_form" action="post.php" method="post"> 
  <p><label>Name: </label><input type="text" class="input" name="name"></p> 
  <p><label>Address: </label><input type="text" class="input" name="address"></p> 
  <p><input type="submit" name="submit" class="btn" value="Submit"></p> 
</form>

post.php

header("Content-type:text/html;charset=utf-8"); 
 
echo '$_POST接收:<br/>'; 
print_r($_POST); 
echo '<hr/>'; 
 
echo '$GLOBALS[\'HTTP_RAW_POST_DATA\']接收:<br/>'; 
print_r($GLOBALS['HTTP_RAW_POST_DATA']); 
echo '<hr/>'; 
 
echo 'php://input接收:<br/>'; 
$data = file_get_contents('php://input'); 
print_r(urldecode($data));

以上所述就是本文的全部内容了,希望大家能够对php接收post数据的3种方式能够有所了解。

PHP 相关文章推荐
PHP新手上路(五)
Oct 09 PHP
php expects parameter 1 to be resource, array given 错误
Mar 23 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
Chrome Web App开发小结
Sep 04 PHP
PHP+swoole实现简单多人在线聊天群发
Jan 19 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
浅谈PHP安全防护之Web攻击
Jan 03 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 PHP
PHP字符串与数组处理函数用法小结
Jan 07 PHP
PHP 裁剪图片
Mar 09 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 PHP
php显示时间常用方法小结
Jun 05 #PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 #PHP
一个完整的PHP类包含的七种语法说明
Jun 04 #PHP
php循环table实现一行两列显示的方法
Jun 04 #PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 #PHP
了解PHP的返回引用和局部静态变量
Jun 04 #PHP
PHP中4种常用的抓取网络数据方法
Jun 04 #PHP
You might like
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
PHP如何编写易读的代码
2007/07/10 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
2013/11/14 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
js命名空间写法示例
2015/12/18 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
小学毕业典礼主持词
2014/03/27 职场文书
党支部综合考察材料
2014/05/19 职场文书
消防工作实施方案
2014/06/09 职场文书
干部个人对照检查材料
2014/08/25 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang
使用JS实现简易计算器
2021/06/14 Javascript