我正在使用ajax上传一组约50个文件,全部<= 5MB。如果连接速度较慢,则上传将“超时”,甚至没有完成第一次上传(大约需要45秒)。
在Firefox中,ajax将失败,并显示“错误”响应,但没有更多信息。 在Chrome中,出现了net :: ERR_CONNECTION_RESET错误。
我已经检查了我的Apache和php.ini设置,我相信它们都足够。
post_max_size = 1000M
upload_max_filesize = 15M
max_input_time = -1
max_execution_time = 0
max_file_uploads = 50
memory_limit = 128M
我也尝试将ajax的timeout参数设置为0。我的ajax请求看起来像这样:
return $.ajax({
url: ajaxpath,
type: 'post',
data: formData,
dataType: 'json',
timeout: 0,
xhr: function(){
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload) myXhr.upload.addEventListener('progress',function(e){
uploadProgress(e,item);
},false);
return myXhr;
},
processData: false,
contentType: false
}).fail(function(jqXHR,textStatus,errorThrown){
console.log(textStatus,errorThrown);
});
}
有了更快的连接,我似乎没有遇到这个问题。如果我使用浏览器的开发人员工具来限制速度,那将会发生,这就是我要复制用户情况的方式。
我在某处缺少设置吗?我如何保持上传状态?
答案 0 :(得分:3)
使用mod_reqtimeout Apache模块最终解决了我的问题:
RequestReadTimeout header = 20-40, MinRate = 500 body = 20, MinRate = 500
我在a similar question的底部找到了这个建议。
作为参考,我尝试增加各种ini设置,Apache TimeOut指令以及set_time_limit php函数,但均未成功。
答案 1 :(得分:0)
首先,您的Web服务器可以具有其他超时配置,这些配置也可能会中断PHP执行。
Apache具有超时指令,而IIS具有CGI超时功能。
默认均为300秒。
有关详细信息,请参见Web服务器文档。
此消息
ERR_CONNECTION_RESET
不是来自php脚本,这是服务器问题,因为服务器正在断开向客户端发送的任何内容!
您可以尝试以下方法:
1-更改设置max_execution_time = 1000,看看是否有更多时间,当使用max_execution_time = 0时,我对旧的xammp和appserv版本有一些疑问!
2-在php.ini中设置:
upload_max_filesize = 300M
post_max_size = 300M
3-将其放入您的脚本中:
set_time_limit(3600); // 1 hour
由于在快速连接上上传正常,我猜问题出在某个地方超时
答案 2 :(得分:0)
您的配置似乎正确。只有一件事是set_time_limit
set_time_limit(0); //If set to zero, no time limit is imposed.