我的代码中有$input = fopen( 'php://input', 'r' );
行用于上传。
文件上传完毕后,我会检查$_SERVER['CONTENT_LENGTH']
以查看所有内容是否按预期发送。最近CONTENT_LENGTH
和我上传文件的大小开始随机匹配(大约每20分钟一次,人们经常上传)。
我记录并保存了不匹配项,发现有些文件无法打开,有些文件已下载并被切断。我在Photoshop中打开的一个甚至警告文档已损坏。
我应该寻找可能已更改的服务器配置吗?
我尝试通过关闭浏览器标签和那种性质的东西进行复制,但仍然不会复制错误。
我们正在通过AJAX POST上传。 POST
正文是上传源。
答案 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
指令,将这些值与截断文件的大小进行比较,看看是否是原因。