PHP或其他任何时间限制函数执行

时间:2011-09-27 16:41:18

标签: php exception time limit

我可以说我的问题与PHP有关,但我更关心的是在函数执行可以无限期执行的情况下编程的正确逻辑。

监控执行某些功能所需的时间以及如何停止执行并继续执行其余程序的正确方法是什么?

好的,我知道例如有一个set_time_limit()函数返回致命错误但我不希望这样,我希望我的代码在x秒之后继续,或者可能在超过时间之后抛出异常,catch它并做其他事情?

正在编写某种“看门狗”功能解决方案,这是如何完成的?

感谢您提供的任何帮助,任何链接,任何以“应该”方式解决此问题的文章。

BR, 纽曼

2 个答案:

答案 0 :(得分:3)

PHP没有提供超时功能的一般方法。但是,这个问题很常见的许多组件都允许您定义超时。

示例:

  • HTTP Stream Wrapper允许您指定timeout选项:

    file_get_contents('http://example.com', false, stream_context_create(
        array('http' => array('timeout' => 10 /* seconds */))
    ));
    
  • PDO(数据库抽象层)允许您使用PDO::ATTR_TIMEOUT attribute设置超时(请注意,此属性可能表示具有不同数据库驱动程序的不同内容):

    $pdo->setAttribute(PDO::ATTR_TIMEOUT, 10 /* seconds */);
    
  • 使用FTP时可以设置连接超时:

    $ftp = ftp_connect('example.com', 21, 10 /* seconds */)
    

同样,访问潜在远程资源的所有其他扩展都将提供此类超时参数或选项。

答案 1 :(得分:0)

特别是在PHP中,我认为您没有一种有效的方法来控制函数外部的执行时间。 就像你说的那样,像set_time_limit之类的东西会抛出一个Fatar Error并杀死你的剧本。

我建议使用像microtime()之类的东西在你的函数中删除你的执行时间,如果时间限制被删除则抛出异常;一个例外,你将能够在外面捕获并继续采取相应的行动。