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

3
我正在尝试使用 Picasa Web Uploader API 将照片库上传到我的网站。 我已经成功实现了按钮,将其设置在 Picasa 中并进行身份验证,但是当涉及到从 Picasa 接收到的 POST 处理时,$_FILES 数组总是为空。
我查看了 Fiddler 发布的请求,并能够确定每个文件多部分的开头处的 Content-Disposition 标头 太长 - 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长度是最好的,@yoda。但不幸的是,我无法控制Picasa生成的POST请求。 - Dexter
2个回答

3

1

如果你真的需要访问原始的HTTP请求体,那么你可以使用http_get_request_body(),如果你已经安装了PECL模块,否则我相信有一个流包装器可用:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接