在 PHP 中接收多部分 POST 数据请求
Posted
技术标签:
【中文标题】在 PHP 中接收多部分 POST 数据请求【英文标题】:Receiving multipart POST data requests in PHP 【发布时间】:2010-09-11 04:15:29 【问题描述】:我想在php:
接收以下HTTP
请求
Content-type: multipart/form-data;boundary=main_boundary
--main_boundary
Content-type: text/xml
<?xml version='1.0'?>
<content>
Some content goes here
</content>
--main_boundary
Content-type: multipart/mixed;boundary=sub_boundary
--sub_boundary
Content-type: application/octet-stream
File A contents
--sub_boundary
Content-type: application/octet-stream
File B contents
--sub_boundary
--main_boundary--
(注意:我缩进了子部分只是为了让这篇文章更具可读性。)
我对 PHP 不是很流利,希望获得一些帮助/指针来弄清楚如何在 PHP 代码中接收这种多部分表单请求。我曾经写过一些代码,我收到一个标准的 html 表单,然后我可以通过使用它们的名称作为 $HTTP_GET_VARS
数组中的索引键来访问表单元素,但在这种情况下,没有表单元素名称,并且表单数据部分不是线性的(即子部分 = 多级数组)。
感谢您的帮助!
/罗伯特
【问题讨论】:
【参考方案1】:$HTTP_GET_VARS
、$HTTP_POST_VARS
等是过时的符号,您应该使用 $_GET
、$_POST
等。
现在,文件内容应该在$_FILES
全局数组中,而如果没有元素名称,我不确定其余内容是否会显示在$_POST
中。无论如何,如果 php.ini 中的always_populate_raw_post_data
设置为真,则数据应该在$HTTP_RAW_POST_DATA
中。此外,在读取 php://input 时应该会显示整个请求。
【讨论】:
感谢您的回复!我想最体面的解决方案是命名字段。您知道该任务使用哪些 HTTP 标头吗? 感谢您的回答,这很有帮助。注意:在某些情况下,即使 always_populate_raw_post_data 为 false,也会填充 $HTTP_RAW_POST_DATA。这对我有用。【参考方案2】:你应该注意:
“php://input 允许您读取原始 POST 数据。它是 $HTTP_RAW_POST_DATA 的内存密集型替代方案,不需要任何特殊的 php.ini 指令。 php://input 不适用于 enctype=”multipart/form-data”
来自 php 手册...所以似乎 php://input 不可用
尚不能发表评论,但这是为了补充 pilsetnieks 的回答
【讨论】:
【参考方案3】:上传的文件可以通过 $_FILE 全局变量访问,其他参数可以通过 $_GET 全局变量访问。
【讨论】:
在 PHP 中,multipart/form-data
可以通过全局 $_FILE
访问,其余数据可以通过全局 $_POST
访问。以上是关于在 PHP 中接收多部分 POST 数据请求的主要内容,如果未能解决你的问题,请参考以下文章