3

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

我查看了 Picasa 使用 Fiddler 发布的请求,并且能够识别出Content-Disposition每个文件 multipart 开头的标头太长- 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 数组之外,我可以通过其他方式访问缺少的多部分部分吗?
4

2 回答 2

3

你完蛋了。

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

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

于 2010-12-10T21:26:09.763 回答
1

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

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

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

于 2010-12-10T21:26:13.817 回答