php - Apache+PHP 截断后/上传

标签 php apache http file-upload

我一直在追查一个影响图像上传到我们开发平台上的网站的错误(尚未能够在现场实现)。

大纲是:

POST content larger than ~20KB gets inconsistently truncated.

我还没有弄清楚到底是什么时候发生的。我确信数据已全部传输到 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 和相关指令,但这些指令会影响响应而不是请求。

最佳答案

原因:

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/

相关文章:

eclipse - import org.apache.jasper 无法解析

http - 由于 Netty 服务器中的内容字符集设置,Firefox 中的像素无效

php - MemCache 对象未在 php 文件内实例化

apache - 没有mod_rewrite的Apache重写?

php - 比较两个 MySQL 表以填充下拉列表

php - 如何使用 apache dns 服务器而不是 LAN 网络中的 IP 地址访问 xampp 下域名的本地网站?

apache - 不使用 .htaccess 自动从 http 重定向到 https

java - 通过套接字连接的多个 HTTP 请求

PHPLint - 一些问题

php - 将 PHP 脚本转换为 PDO