我有一个PHP脚本,可以下载和处理一些文件。有时文件的数量非常大,因此需要一些时间。
但是当有大量文件要处理时,连接会因“ERR_CONNECTION_RESET”错误(Chrome)而中断。
这是我的配置:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 0
max_input_time = -1
memory_limit = 512M
我有一个共享的hostind。任何人都知道如何解决这个问题?
答案 0 :(得分:8)
ERR_CONNECTION_RESET
通常意味着与服务器的连接已经死亡而没有对客户端的任何响应 - 甚至没有某种HTTP 5xx错误。这意味着整个PHP进程已经死亡而无法正常关闭。
这通常是而不是由超出memory_limit之类的东西引起的,因为PHP可以优雅地处理这些事情。这必须是某种Segmentation Fault或类似的。如果您有权访问错误日志,请检查它们。否则,您可能会得到托管公司的支持。
答案 1 :(得分:2)
如果要处理的文件太多,无论您的配置如何,您最终都会遇到此问题。即使您在服务器端禁用所有超时,客户端本身也有自己的安全功能,并且最终会在一段时间后超时 - 这是您无法控制的。
“你做错了”在这里。由于这种协议限制(TCP,HTTP),您无法在HTTP请求中进行任何繁重的计算。
您的请求必须产生某种后台任务,以便不时通知其进度。使用仅使用PHP的共享主机,这可能不容易实现,因此您可能想要找到另一种执行繁重计算的方法。
答案 2 :(得分:1)
我实际上偶然发现了这个问题做了一个非常类似的事情,我的问题(如果它有助于任何人)是我每次调用我的函数时都在创建一个Object,即:
function myFunction($param) {
...
// Create an object
$obj = new MyObject();
...
}
我也改变了它:
function myFunction($param, $obj) {
...
//Do stuff with $obj
...
}
// Create an object
$obj = new MyObject();
// Call Function
$myresult = myFunction($params, $obj);
Noob我知道,但希望这有助于其他人。
答案 3 :(得分:0)
当我在Google chrome
答案 4 :(得分:0)
在使用ASP.NET MVC的IIS服务器上,由于我的HTTP状态代码描述包含换行符(ERR_CONNECTION_RESET
),我在Google Chrome中意外生成了\r\n
错误。
予。即这会产生错误:
public ActionResult Index()
{
Response.StatusCode = 200;
Response.StatusDescription = "This is a status code\r\nwith newline.";
return View();
}
要解决此问题,我只需删除换行符。
另一个问题可能是状态代码说明为too long。