如何使用 PHP 手动解析 PUT 请求的原始多部分/表单数据数据?

Barbara Streisand
发布: 2024-10-29 03:03:02
原创
437 人浏览过

How to Manually Parse Raw Multipart/Form-Data Data with PHP for PUT Requests?

使用 PHP 手动解析原始 Multipart/Form-Data 数据

解析以 multipart/form-data 格式的原始 HTTP 请求数据可能具有挑战性在 PHP 中处理 PUT 请求时。下面提供了详细的解释和自定义解析方案:

背景

默认情况下,如果格式正确,PHP 会自动解析 POST 请求数据。然而,PUT 请求需要手动解析原始数据。 Multipart/form-data 格式将数据构造为由边界分隔的块。

手动解析函数

以下函数手动解析原始 HTTP 请求数据:

<code class="php">function parse_raw_http_request(array &$a_data)
{
  // Read incoming data
  $input = file_get_contents('php://input');

  // Extract boundary from content type header
  preg_match('/boundary=(.*)$/', $_SERVER['CONTENT_TYPE'], $matches);
  $boundary = $matches[1];

  // Split data by boundary
  $a_blocks = preg_split("/-$boundary/", $input);
  array_pop($a_blocks);

  // Loop through data blocks
  foreach ($a_blocks as $id => $block)
  {
    // Skip empty blocks
    if (empty($block))
      continue;

    // Parse uploaded files
    if (strpos($block, 'application/octet-stream') !== FALSE)
    {
      // Extract name and file contents
      preg_match('/name=\&quot;([^\&quot;]*)\&quot;.*stream[\n|\r]+([^\n\r].*)?$/s', $block, $matches);
    }
    // Parse other fields
    else
    {
      // Extract name and value
      preg_match('/name=\&quot;([^\&quot;]*)\&quot;[\n|\r]+([^\n\r].*)?\r$/s', $block, $matches);
    }

    // Add data to array
    $a_data[$matches[1]] = $matches[2];
  }  
}</code>
登录后复制

用法:

调用函数并通过引用传递数据数组:

<code class="php">$a_data = array();
parse_raw_http_request($a_data);
var_dump($a_data);</code>
登录后复制

以上是如何使用 PHP 手动解析 PUT 请求的原始多部分/表单数据数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!