浅谈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下使用SMTP发邮件的代码
Jan 10 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
php给每个段落添加空格的方法
Mar 20 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 PHP
实例讲解PHP页面静态化
Feb 05 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php+laravel依赖注入知识点总结
Nov 04 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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
2014/11/19 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python实现简单多线程任务队列
2016/02/27 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python如何获取系统iops示例代码
2016/09/06 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
python提取log文件内容并画出图表
2019/07/08 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
使用Python实现画一个中国地图
2019/11/23 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
端口镜像是怎么实现的
2014/03/25 面试题
初中体育教学反思
2014/01/14 职场文书
高中体育教学反思
2014/01/24 职场文书
小学生暑假感言
2014/02/06 职场文书
优秀部门获奖感言
2014/02/14 职场文书
贷款担保申请书
2014/05/20 职场文书
长城英文导游词
2015/01/30 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS
python+opencv实现目标跟踪过程
2022/06/21 Python
基于Python实现nc批量转tif格式
2022/08/14 Python