我一直在追查一个影响图像上传到我们开发平台上的网站的错误(尚未能够在现场实现)。
大纲是:
POST content larger than ~20KB gets inconsistently truncated.
我还没有弄清楚到底是什么时候发生的。我确信数据已全部传输到 Apache,但我不确定它是否接收了所有数据,是否有些数据未传递给 PHP,或者是否发生了其他情况。
到目前为止我采取的步骤:
- 检查 php.ini
file_uploads
、post_max_size
、upload_max_filesize
、max_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
和相关指令,但这些指令会影响响应而不是请求。
最佳答案
原因:
apache.conf 有指令
Timeout 0
这导致 Apache HTTPD 为 post 数据等待 0 秒,而不是像我预期的那样无限期等待。在开发环境中将 Timeout
设置为大量秒数可以解决此问题。
http://httpd.apache.org/docs/2.2/mod/core.html#timeout没有为 Timeout 0
指定语义,所以我假设它是按字面解释的。
关于php - Apache+PHP 截断后/上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28698043/