浅谈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 文件夹删除、php清除缓存程序
Aug 25 PHP
PHP 引用是个坏习惯
Mar 12 PHP
PHP中读写文件实现代码
Oct 20 PHP
php权重计算方法代码分享
Jan 09 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
Mar 22 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP goto语句用法实例
Aug 06 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
Python操作串口的方法
2015/06/17 Python
学习python类方法与对象方法
2016/03/15 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
军校本科大学生自我评价
2014/01/14 职场文书
大学生党员自我批评
2014/02/14 职场文书
关于环保的建议书400字
2014/03/12 职场文书
教师工作态度自我评价
2015/03/05 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
生产车间管理制度
2015/08/04 职场文书
公司会议开幕词
2016/03/03 职场文书
JavaScript实现栈结构详细过程
2021/12/06 Javascript