【问题标题】:How can I handle long header declarations in PHP requests?如何处理 PHP 请求中的长标头声明?
【发布时间】:2011-05-23 17:42:34
【问题描述】:

我正在尝试使用Picasa Web Uploader API 将照片库上传到我的网站。我已经能够实现该按钮,在 Picasa 中对其进行设置并进行身份验证,但是在处理我的网站从 Picasa 收到的 POST 时,$_FILES 数组始终为空。

我查看了 Picasa 使用 Fiddler 发布的请求,并且能够确定每个文件多部分开头的 Content-Disposition 标头是 too long - Picasa 发送的标头包括我服务器上文件的完整路径,因此它最终远远超过 128 个字符:

Content-Disposition: form-data; name="http://localhost:50216/1f6b3b29edc6f9d8898ede07c1b10e27/image/415603f72f75af1a.jpg?size=640"; filename="DSC_0055.JPG"

似乎 PHP 只能处理最多 128 个字符的标题,如果标题太长,整个多部分部分将被丢弃。 (当我在 Fiddler 中减少此标头的长度并重新发布请求时,我的网站会收到 $_FILE 并成功处理。

我该如何解决这个问题?

  • 我可以在某处设置配置设置以允许 PHP 处理长标头并接收 $_FILE 数组中的数据吗?
  • 或者,除了 $_FILE 数组之外,我还能以其他方式访问缺少的多部分部分吗?

【问题讨论】:

  • 不确定这是一个好还是坏的解决方案,但为什么不使用 tinyurl 之类的东西来缩短这些 url?
  • 我同意最好减少该标头@yoda 中的 url 长度,但不幸的是我无法控制 Picasa 生成的 POST 请求..

标签: php http-headers multipartform-data picasa


【解决方案1】:

如果你真的需要访问原始传入的 HTTP 正文,那么如果你安装了 PECL 模块,你可以使用http_get_request_body(),如果没有,那么我相信有一个流包装器:​​

$httpBody = @file_get_contents('php://input');

虽然远非理想,但我不知道 $_FILES 有这个问题,需要注意。

【讨论】:

    【解决方案2】:

    你完蛋了。

    但无论如何,您都可以使用几种变通方法来实现它。您需要自己解析收到的表单数据。另一个问题是 PHP 不会让你看到原始的 mutlipart/form-data,所以你需要:

    另一种方法是修补 PHP 解释器。 :/

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 1970-01-01
      • 2017-02-05
      • 2020-05-15
      • 2020-10-17
      • 2019-11-29
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多