Apache + PHP截断发布/上传

时间:2015-02-24 14:12:33

标签: php apache http file-upload

我一直在追踪一个影响图片上传的错误,这个错误已经上传到我们开发平台上的网站上了(还没有能够让它在现场发生)。

概要是:

  

大于~20KB的POST内容会被不一致地截断。

我还未能确切地知道发生了什么。我确信这些数据都传输到Apache,但我不确定它是否收到了所有内容,是否有一些没有传递给PHP,或者是否还有其他事情发生。

到目前为止我采取的步骤:

  • 检查php.ini file_uploadspost_max_sizeupload_max_filesizemax_file_uploads和co设置为合理值。
  • LimitRequestBody在Apache配置中设置为0。

我看到的确切行为有点令人困惑。作为调试的一部分,我检查了

echo strlen( file_get_contents( 'php://input' ) );

无论使用何种文件,每次尝试都会更改值。我看到的最大值约为500KB,最低约为20KB。

通过使用仅在HTTP / 1.0(而不是HTTP / 1.1)中运行的客户端,我已经能够在一种情况下解决此问题(10次尝试成功率为100%)。

使用它作为主角,我试图使用force-downgrade-1.0和相关指令,但这些指令会影响响应而不是请求。

1 个答案:

答案 0 :(得分:1)

原因:

apache.conf有指令

Timeout 0

这导致Apache HTTPD等待0秒后发布数据,而不是像我预期的那样无限期。在开发环境中将Timeout设置为大量秒可解决此问题。

http://httpd.apache.org/docs/2.2/mod/core.html#timeout没有为Timeout 0指定语义,所以我认为它是按字面解释的。