为什么php://输入截断?

时间:2013-08-26 14:04:01

标签: php upload

我的代码中有$input = fopen( 'php://input', 'r' );行用于上传。

文件上传完毕后,我会检查$_SERVER['CONTENT_LENGTH']以查看所有内容是否按预期发送。最近CONTENT_LENGTH和我上传文件的大小开始随机匹配(大约每20分钟一次,人们经常上传)。

我记录并保存了不匹配项,发现有些文件无法打开,有些文件已下载并被切断。我在Photoshop中打开的一个甚至警告文档已损坏。

我应该寻找可能已更改的服务器配置吗?

我尝试通过关闭浏览器标签和那种性质的东西进行复制,但仍然不会复制错误。

我们正在通过AJAX POST上传。 POST正文是上传源。

2 个答案:

答案 0 :(得分:1)

听起来像是负载/网络问题。用户尝试上传且服务器没有响应的延迟问题/超时问题。

通常不是责备AJAX,而是服务器(甚至可能不是PHP)。我认为有些地方的数据包会丢失到服务器上。它可能是数据中心的限制(例如带宽上限)或服务器本身的限制。

我们使用以下配置优化服务器。这适用于任何Linux发行版:

修改/etc/sysctl.conf个文件。最后添加以下行:

net.ipv4.tcp_wmem= 10240 87380 12582912
net.ipv4.tcp_rmem= 10240 87380 12582912
net.core.rmem_max=12582912
net.core.wmem_max=12582912
net.ipv4.tcp_max_syn_backlog=100000

您可以使用IBM的以下手册来更好地了解如何调整您的Linux: http://www.redbooks.ibm.com/redpapers/pdfs/redp4285.pdf

此外,

我会记录客户端的浏览器版本。可能是发送到您的服务器的格式取决于AJAX从一个浏览器到另一个浏览器的不同。由于您没有指定AJAX代码,因此很难假设AJAX正在上传文件。

答案 1 :(得分:-3)

php.ini中有一个post_max_size和一个upload_max_filesize指令,将这些值与截断文件的大小进行比较,看看是否是原因。