10

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

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

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

是否有任何我应该寻找的可能已更改的服务器配置?

我尝试通过关闭浏览器选项卡和类似的东西来复制,但仍然不会复制错误。

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

4

2 回答 2

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 在上传文件时做了什么。

于 2013-09-02T10:18:27.133 回答
-3

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

于 2013-08-29T07:41:09.733 回答