【问题标题】:Purposfully timeout a PHP script故意使 PHP 脚本超时
【发布时间】:2012-05-14 14:33:06
【问题描述】:

这可能看起来很奇怪,但我实际上需要一个会超时的 PHP 脚本,即:执行时间过长,Apache 会超时脚本并引发 408 错误。

这样做的目的是演示使用自定义 408 错误页面捕获 408 以向数据库报告超时。

也许您可以提出更好的方法来做到这一点?

如果我没记错的话,我认为无限循环不会像 Apache 那样工作 500。

编辑-------

已经指出 408 是客户端错误,那么另外,如果脚本超时,Apache 会触发什么错误?

我想要一个实际的例子,而不是合成的 header(),因为这是向客户推销的,而他们最好是一个真实的例子。

谢谢!

【问题讨论】:

  • 用过长的脚本测试 apache 会抛出哪个错误:<?php set_time_limit(1); sleep(2); ?>。我是否正确理解您,您希望客户端超时?
  • 我想捕获超时(在服务器或客户端上)并提供自定义错误信息。我会试试你上面的例子:)谢谢

标签: php apache .htaccess timeout


【解决方案1】:

从 php 脚本发送 408 状态码怎么样?

<?php
  header("HTTP/1.0 408 Request Timeout");
?>

或许

<?php 
  sleep(99999);
?>

【讨论】:

  • 虽然老了,但这实际上是一个很好的答案。对我来说,因为我想检查 ajax 行为,所以调用了这个脚本。
  • 只有 while(true) 是一个很好的答案。服务器返回超时是实际响应。客户端通常必须处理的超时意味着服务器不会在客户端期望的时间范围内响应。它不需要错误代码。
【解决方案2】:
<?php
    while(true){
        //to infinity and beyond...
    }
?>

这样就可以了..

【讨论】:

    【解决方案3】:

    408 是client error:

    408 请求超时

    在服务器准备等待的时间内,客户端没有产生请求。

    所以你必须telnet &lt;yourhost&gt; 80 然后坐等。当然,如果您想以编程方式执行此操作,可以通过 fsockopen() 进行模拟。

    从代码中抛出标题也可能有效。

    【讨论】:

    • 如果请求超时,Apache 会给出什么错误?感谢您的帮助!
    【解决方案4】:

    您不需要页面实际超时。如果你只是测试,你可以告诉 PHP 在 header 中输出一个 408 代码:

    <?php
    header("HTTP/1.0 408 Request Timeout");
    exit;
    

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多