【问题标题】:ERR_CONNECTION_RESET with PHP script带有 PHP 脚本的 ERR_CONNECTION_RESET
【发布时间】:2014-08-19 08:21:24
【问题描述】:

我有一个 PHP 脚本,可以下载和处理一些文件。有时文件的数量很大,所以需要一些时间。

但是当有很多文件要处理时,连接会中断并出现“ERR_CONNECTION_RESET”错误(Chrome)。

这是我的配置:

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 0
max_input_time = -1
memory_limit = 512M

我有一个共享主机。有谁知道如何解决这个问题?

【问题讨论】:

    标签: php ajax google-chrome http reset


    【解决方案1】:

    ERR_CONNECTION_RESET 通常意味着与服务器的连接已经终止,客户端没有任何响应——甚至没有某种 HTTP 5xx 错误。这意味着整个PHP进程已经死掉了,无法正常关闭。

    这通常不是由超过 memory_limit 之类的东西引起的,因为这是 PHP 可以优雅处理的东西。这一定是某种分段错误或类似的。如果您有权访问错误日志,请检查它们。否则,您可能会得到托管公司的支持。

    【讨论】:

    • 您的答案更准确 - 这可能是段错误,而不是内存不足。那么人们会看什么样的日志呢?在我的情况下,PHP 日志和 Apache 日志在故障发生时都不包含任何条目。
    • 取决于您如何运行 PHP。如果是 Apache + mod_php,则 Apache 日志。如果是 PHP-FPM,则 FPM 拥有错误日志记录。如果找不到条目,​​则可能需要提高日志级别。在 FPM 上,您还必须设置 catch_workers_output = yes(但只能在您的 DEV 环境中!)。
    【解决方案2】:

    如果要处理的文件太多,无论您的配置如何,您最终都会偶然发现这个问题。即使您在服务器端禁用所有超时,客户端本身也有自己的安全功能,并且最终会在一定时间后超时——这是您无法控制的。

    你做错了”在这里。由于这种协议限制(TCP、HTTP),您无法在 HTTP 请求中进行任何繁重的计算。

    您的请求必须生成某种后台任务,该任务会不时通知其进度。仅使用 PHP 共享主机,这可能不容易实现,因此您可能希望找到另一种方法来进行繁重的计算。

    【讨论】:

    • 谢谢,我会尝试不同的方法。
    • 我想我也遇到过同样的问题。我的表单似乎超时,但仅在 Chrome、Windows 10 中。我正在使用单个 AJAX 请求,但我正在做一些繁重的工作。解决方案是将请求分成两部分吗?添加另一个请求听起来不对,但我不确定还能做什么。
    • @MichaelLynch 只是生成/注册一些后台任务并立即将用户重定向到一些“请稍候”页面。这个页面要么每隔几秒重新加载一次,要么使用 JS 来检索任务完成状态。任务完成后,将其重定向到您首先显示的实际结果页面。没有对抗超时的好方法,只是拥抱它们。
    • @zopieux by "some kind of background task" 你是指使用 PHP 运行系统命令(例如使用 system())吗?
    【解决方案3】:

    实际上我在做一件非常相似的事情时偶然发现了这个问题,我的问题(以防它对任何人都有帮助)是我每次调用我的函数时都在创建一个对象,即:

    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);
    

    我知道菜鸟,但希望这对其他人有帮助。

    【讨论】:

      【解决方案4】:

      当我在Google chrome 遇到此问题时,清理 cookie 解决了它

      【讨论】:

      • 您的答案因其长度和内容而被标记。我建议修改。也许添加更多细节。
      【解决方案5】:

      在我的带有 ASP.NET MVC 的 IIS 服务器上,由于我的 HTTP 状态代码描述包含换行符 (\r\n),我意外地在 Google Chrome 中生成了 ERR_CONNECTION_RESET 错误。

      我。 e.这会产生错误:

      public ActionResult Index()
      {
          Response.StatusCode = 200;
          Response.StatusDescription = "This is a status code\r\nwith newline.";
      
          return View();
      }
      

      为了解决这个问题,我只是删除了换行符。

      另一个问题可能是状态码描述是too long

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-16
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        相关资源
        最近更新 更多