如何在PHP请求中处理长头声明?

时间:2010-12-10 21:11:53

标签: php http-headers multipartform-data picasa

我正在尝试使用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数组之外,我还能以其他方式访问缺少的多部分部分吗?

2 个答案:

答案 0 :(得分:3)

你被搞砸了。

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

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

答案 1 :(得分:1)

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

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

虽然远非理想,但我没有意识到$_FILES有这个问题需要注意。