浅谈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 获取mysql数据库信息代码
Mar 12 PHP
Cakephp 执行主要流程
Mar 24 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
php中__toString()方法用法示例
Dec 07 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
Laravel框架创建路由的方法详解
Sep 04 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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
php 代码优化的42条建议 推荐
2009/09/25 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
JS仿淘宝实现的简单滑动门效果代码
2015/10/14 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
分享Python文本生成二维码实例
2016/01/06 Python
python3.5安装python3-tk详解
2019/04/26 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
Marriott国际:万豪国际酒店查询预订
2017/09/25 全球购物
商务英语专业求职信范文
2014/01/28 职场文书
网络管理专业求职信
2014/03/15 职场文书
解除劳动合同证明书
2014/09/26 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
mysql 子查询的使用
2022/04/28 MySQL