【问题标题】:PHP Script didn't abort after max_execution_time (XAMPP, XDebug)PHP 脚本在 max_execution_time 之后没有中止(XAMPP,XDebug)
【发布时间】:2019-08-10 00:15:24
【问题描述】:

我有一个无限循环的 PHP 脚本。 当我使用 AJAX 或直接在浏览器中运行此脚本时,服务器正在尝试执行此脚本。问题是:30 秒后服务器仍在执行脚本。没有“超过最大执行时间” 错误。在 php.ini 文件中,max_execution_time 设置为 30。由于这个问题,服务器不再可用。我无法通过 AJAX 运行任何其他脚本。我必须在 XAMPP 中重新启动 Apache。 为什么服务器在 30 秒后没有中止? 我正在使用 XAMPP 和 XDebug。

// 更新 1: PHP 脚本:

<?php
while(true)
echo 'test';

我知道这段代码没有意义。我只是想知道,为什么服务器在 30 秒后没有中止执行......

**//UPDATE 2:**我关闭了XDebug,并将代码更改为:

<?php
$x = 0;
while(true)
   $x += 1;

现在可以了:服务器在 30 秒后中止脚本,出现“最大执行时间”错误。 但是,服务器仍然不能使用“echo”语句中止脚本(即使禁用了 XDebug)。同样的问题是当我尝试在没有“echo”但启用 XDebug 的情况下执行脚本时。 所以,当我使用“echo”或“XDebug”时,这似乎是个问题。 仅当没有“echo”且 XDebug 被禁用时,脚本才会正确中止。

【问题讨论】:

  • 向我们展示有问题的代码对我们很有帮助。
  • 完成。但我认为可能是 XAMPP 或 XDebug 问题。
  • 如果你运行这个小脚本,你会得到什么价值:
  • 阅读下面的答案...

标签: php ajax xampp xdebug


【解决方案1】:

我也遇到了这个问题。对我来说,一旦启用并自动启动了 xdebug,max_execution_time 无论如何都会设置为 0。我必须禁用它才能将其作为一个值。至少现在我知道,在我的开发环境中,启用 xdebug 时无法进行超时测试。

在我的例子中,脚本会在没有运行 register_shutdown_function 的情况下被 web 服务器杀死。由于 PHP 没有处理超时,除了内部 500 错误之外,我不会收到任何错误。 Bugsnag 不会得到通知。

【讨论】:

    【解决方案2】:

    我对我的情况进行了更改: xampp\phpMyAdmin\libraries\config.default.php

    搜索:`$cfg['ExecTimeLimit']

    您可以将右手数值更改为任何更高的数值,例如“6000”。 它对我有用。

    【讨论】:

      【解决方案3】:

      完成! 我在 PHP Storm 中关闭了“Litening for PHP Debug Connections”,问题就解决了。

      【讨论】:

        猜你喜欢
        • 2019-05-10
        • 1970-01-01
        • 2013-08-31
        • 2012-07-02
        • 2012-06-30
        • 2021-05-19
        • 2019-02-26
        • 2021-11-01
        • 2017-08-22
        相关资源
        最近更新 更多