`
dcj3sjt126com
  • 浏览: 1871804 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

$GLOBALS['HTTP_RAW_POST_DATA'] 和$_POST的区别

    博客分类:
  • PHP
阅读更多



php接收二进制文件转换成图片,php://input $GLOBALS['HTTP_RAW_POST_DATA']

 

最近在做Flash在线裁剪图片 生成图片的东西。
通过Flash POST 图片的二进制数据给php,由php生成图片保存。
开始想到用$_POST来接受。后来发现行不通。
查阅了很多资料 明白了所以然,这里做一个笔记:
于PHP默认只识别application/x-www.form-urlencoded标准的数据类型。
因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,如果用$_POST数组来接收就会失败!
故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。
另外还有一项 php://input 也可以实现此这个功能
php://input 允许读取 POST 的原始数据。和 $HTTP_RAW_POST_DATA 比起来,它给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。php://input和 $HTTP_RAW_POST_DATA 不能用于 enctype="multipart/form-data"。
我在Flash中使用JPGEncoder把BitMapData转成二进制,然后post给php
php页面代码如下:
<?php
$filename="teststream.jpg";//要生成的图片名字
$xmlstr =  $GLOBALS[HTTP_RAW_POST_DATA];
if(empty($xmlstr)) $xmlstr = file_get_contents('php://input');
$jpg = $xmlstr;//得到post过来的二进制原始数据
$file = fopen("cache/pic/".$filename,"w");//打开文件准备写入
fwrite($file,$jpg);//写入
fclose($file);//关闭
?>

 

下面介绍他们的区别:

$_POST:通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。

$GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。

也就是说基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。

但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

 

补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。



***********************************************************************************

这是手册里写的

总是产生变量包含有原始的 POST 数据。否则,此变量仅在碰到未识别 MIME 类型的数据时产生。不过,访问原始 POST 数据的更好方法是 php://input。$HTTP_RAW_POST_DATA 对于 enctype="multipart/form-data" 表单数据不可用。

问题: $HTTP_RAW_POST_DATA == $_POST 吗?

照手册所写 ,答案应该就为否。
假如不一样的话,他们的区别是什么呢?


我知道答案了,如下:

The RAW / uninterpreted HTTP POst information can be accessed with:
$GLOBALS['HTTP_RAW_POST_DATA']
This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

也就是说,基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型

用Content-Type=text/xml 类型,提交一个xml文档内容给了php server,要怎么获得这个POST数据。

The RAW / uninterpreted HTTP POST information can be accessed with: $GLOBALS['HTTP_RAW_POST_DATA'] This is useful in cases where the post Content-Type is not something PHP understands (such as text/xml).

由于PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如text/xml的内容无法解析为$_POST数组,故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA'] 来接收。

另外还有一项 php://input 也可以实现此这个功能

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


应用


a.htm
------------------
<form action="post.php" method="post">
<input type="text" name="user">
<input type="password" name="password">
<input type="submit">
</form>

post.php
----------------------------
<? echo file_get_contents("php://input"); ?>
分享到:
评论

相关推荐

    PHP中$GLOBALS[HTTP_RAW_POST_DATA]和$_POST的区别分析

    总的来说,`$_POST`和`$GLOBALS['HTTP_RAW_POST_DATA']`之间的主要区别在于是否经过PHP的自动解析以及对非标准MIME类型数据的支持。开发者应根据具体需求选择合适的方式来处理POST请求中的数据。理解这些概念对于...

    PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析

    主要介绍了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别,结合具体实例形式分析了$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的功能与使用过程中的区别,需要的朋友可以参考下

    php视频拍照上传头像功能实现代码分享

    如果要在php中实现视频拍照我们需要借助于flash插件了,由flash拍出的确照片我们再通过php的$GLOBALS [‘HTTP_RAW_POST_DATA’]接受数据,然后保存成图片就可以了,下面我来介绍一下。 使用的是$GLOBALS [...

    php获取post中的json数据的实现方法

    突然想到了以前接触过flash将图片二进制流传给php,灵机一动用$GLOBALS[‘HTTP_RAW_POST_DATA’]获取到了。于是就深入的查了一下,原来PHP默认只识别application/x-www.form-urlencoded标准的数据类型,因此,对型如...

    PHP微信开发之微信消息自动回复下所遇到的坑

    然后将用户信息和消息打包成XML格式的数据包,再将这个XML数据包通过POST方法提交到开发者设置的URL上。...而$GLOBALS[“HTTP_RAW_POST_DATA”]和$_POST是一样的,如果POST过来的数据PHP能够识别,则可以用$GLOB

    浅谈PHP接收POST数据方式

    然后,通过print_r函数输出通过$_POST数组、$HTTP_RAW_POST_DATA和php://input接收到的数据。值得注意的是,我们用urldecode函数对从php://input获取的数据进行了URL解码,确保数据显示正确。 总结来说,PHP提供了...

    wx_sampie.php

    接收微信公众平台发送过来的用户消息,该消息数据结构为XML,不是php默认的识别数据类型,因此这里用了$GLOBALS['HTTP_RAW_POST_DATA']来接收,同时赋值给了$postStr if (!empty($postStr)) 判断$postStr是否为空,...

    php获取POST数据的三种方法实例详解

    `$_REQUEST`数组则包含`$_GET`、`$_POST`和`$_COOKIE`的数据,因此在某些情况下,如果你同时需要处理GET和POST数据,`$_REQUEST`是一个不错的选择。 **方法二:使用`file_get_contents('php://input')`** 这种方法...

    微信公众号生成新浪短网址的实现(快速生成)

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj-&gt;FromUse

    php微信公众号开发之简答题

    简答题 array(“第5页 第1个字” =&gt; “王”,”第8页 第1个字” =&gt; “李”,”第30页 第1个字” =&gt; “周”,) array_rand($array,1) 数据库建立二级菜单 ... $postStr = $GLOBALS[HTTP_RAW_POST_DATA];

    php微信公众号开发之答题连闯三关

    连闯三关 implode( “,” ,array) 数组变字符串 数组无法保存到数据库中去 explode(“,”,str) 字符串变数组 array_rand($arr,n ) 随机取出数组中 n 个单项 ... $postStr = $GLOBALS["HTTP_RAW_POST_DATA

    php版微信开发之接收消息,自动判断及回复相应消息的方法

    分享给大家供大家参考,具体如下: 微信的api现在己经强大到可以随意调用我们网站或指定数据库的内容进行自能回复现推送消息了,这里就来...$data = $GLOBALS[HTTP_RAW_POST_DATA]; if (!emptyempty($data)) {//接收消息

    PHP实现接收二进制流转换成图片的方法

    分享给大家供大家参考,具体如下: ... &lt;?.../** * 图片类 * @version 1.0 ...* 因此,对型如text/xml 或者 soap 或者 application/octet-stream 之类的内容无法解析,...* 故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA']

    微信开发源码

    HTTP RAW POST DATA&quot;]; extract post data if empty $postStr { $postObj simplexml load string $postStr &quot;SimpleXMLElement&quot; LIBXML NOCDATA ; $RX TYPE trim $postObj &gt;MsgType ; ...

    WEB代码审计和渗透测试讲义.ppt

    * 预定义变量:常规外部提交的变量,例如GPC、$_ENV、$_SERVER、$_SESSION、$HTTP_RAW_POST_DATA等。 * register_globals的影响:未初始化的变量,PHP » 4.20默认为off。 * 变量覆盖:未初始化及覆盖前定义的变量,...

    php保存二进制原始数据为图片的程序代码

    在示例代码中,我们通过`$GLOBALS['HTTP_RAW_POST_DATA']`来获取这个原始的二进制数据。 如果`HTTP_RAW_POST_DATA`为空,可能是因为PHP配置问题或服务器设置。在这种情况下,代码尝试使用`file_get_contents('...

    php.ini 中文英文对照详细配置手册.txt

    - **功能**:定义请求变量的顺序,影响`$HTTP_RAW_POST_DATA`的处理,`S`代表`$_SERVER`数组。 - **建议**:保持默认值,除非有特定需求调整变量处理顺序。 ##### 9. error_reporting = E_ALL - **功能**:设置...

    PHP 预定义变量、魔术常量和魔术方法功能与用法小结

    8. `$_REQUEST`:合并了`$_GET`、`$_POST`和`$_COOKIE`的数据。 9. `$_ENV`:存储环境变量。 10. `$php_errormsg`:存储最后一个错误的描述。 11. `$HTTP_RAW_POST_DATA`:原始POST数据,通常使用`php://input`替代...

Global site tag (gtag.js) - Google Analytics