在 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 数据请求的主要内容,如果未能解决你的问题,请参考以下文章

在PHP中怎么接收post过来的JSON数据

PHP 后台怎么接收post请求的参数

Nodejs POST 请求多部分/表单数据

使用 PHP 手动解析原始多部分/表单数据数据

如何用php向服务器发送post请求

php ajax post数据接收不到