为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过Ajax上传文件而没有超时?

如何通过Ajax上传文件而没有超时?

PHP
炎炎设计 2021-05-11 13:25:55
我正在使用ajax上传一组约50个文件,全部<= 5MB。如果连接速度较慢,则上载将“超时”,甚至没有完成第一个上载(大约需要45秒钟才能完成上载)。在Firefox中,ajax将失败,并显示“错误”响应,但没有更多信息。在Chrome中,出现net :: ERR_CONNECTION_RESET错误。我检查了我的Apache和php.ini设置,我相信它们已经足够。post_max_size = 1000Mupload_max_filesize = 15Mmax_input_time = -1max_execution_time = 0max_file_uploads = 50memory_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);        });    }随着连接速度的加快,我似乎没有遇到这个问题。如果我使用浏览器的开发人员工具来限制速度,那将会发生,这就是我在复制用户情况的方式。我在某处缺少设置吗?如何保持上传状态?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

使用mod_reqtimeout Apache模块最终解决了我的问题:

RequestReadTimeout header = 20-40, MinRate = 500 body = 20, MinRate = 500

我在类似问题的底部找到了这个建议。

作为参考,我尝试增加各种ini设置,Apache TimeOut指令以及set_time_limit php函数,但均未成功。


查看完整回答
反对 回复 2021-05-28
?
精慕HU

TA贡献1845条经验 获得超8个赞

首先,您的Web服务器可以具有其他超时配置,这些配置也可能会中断PHP执行。

Apache具有Timeout指令,而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

由于在快速连接上上传效果很好,我想问题是某个地方超时了


查看完整回答
反对 回复 2021-05-28
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您的配置似乎正确。只有一件事是set_time_limit

set_time_limit(0); //If set to zero, no time limit is imposed.


查看完整回答
反对 回复 2021-05-28
  • 3 回答
  • 0 关注
  • 230 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信