【问题标题】:Receiving multipart POST data requests in PHP在 PHP 中接收多部分 POST 数据请求
【发布时间】: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 数组中的索引键来访问表单元素,但在这种情况下,没有表单元素名称,并且表单数据部分不是线性的(即子部分 = 多级数组)。

感谢您的帮助!

/罗伯特

【问题讨论】:

    标签: php http mime multipart form-data


    【解决方案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 访问。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2016-06-12
      • 2017-10-05
      • 1970-01-01
      • 2016-01-26
      • 2022-01-04
      相关资源
      最近更新 更多