我正在尝试使用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
并成功处理它。
我该如何解决这个问题?
答案 0 :(得分:3)
你被搞砸了。
但是无论如何你都可以使用几种解决方法来实现它。您需要自己解析收到的表单数据。另一个问题是PHP不会让你看到原始的mutlipart / form-data,所以你需要:
file_get_contents("php://stdin")
另一种方法是修补PHP解释器。 :/
答案 1 :(得分:1)
如果您确实需要访问原始传入HTTP正文,那么如果您安装了PECL模块,则可以使用http_get_request_body(),如果没有,那么我相信有一个流包装器:
$httpBody = @file_get_contents('php://input');
虽然远非理想,但我没有意识到$_FILES
有这个问题需要注意。