浅谈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不用正则采集速度探究总结
Mar 24 PHP
php cookies中删除的一般赋值方法
May 07 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 PHP
PHP网页缓存技术优点及代码实例
Jul 29 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
Zend Framework分发器用法示例
2016/12/11 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python爬豆瓣电影实例
2018/02/23 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
keras输出预测值和真实值方式
2020/06/27 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
校园之星获奖感言
2014/01/29 职场文书
中学生期末评语
2014/02/03 职场文书
小小商店教学反思
2014/04/27 职场文书
节能环保标语
2014/06/12 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
英文自荐信范文
2015/03/25 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
2019年入党思想汇报
2019/03/25 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
Python音乐爬虫完美绕过反爬
2021/08/30 Python
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android