2011-09-27 57 views
8

我可以说我的问题与PHP有关,但我更关心的是在功能执行可以无限期地继续的情况下编程的正确逻辑。在PHP或其他任何地方执行时间限制功能

什么是监视执行某些功能所需的时间以及如何停止执行并继续执行其余程序的正确方法?我知道,例如有一个set_time_limit()函数返回致命错误,但我不想这样,我希望我的代码在x秒后继续,或者可能在超过时间后抛出异常,抓住它并做其他事情?

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

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

BR, 纽曼

+1

什么是上下文,更具体的?我猜这个函数包含某种循环。如果这是正确的,我的第一个直觉就是在进入循环之前用'microtime()'取一个时间戳,然后比较每次迭代时循环内生成的时间戳。达到某个值后,您可以抛出异常,或执行其他任何操作。 不过,也许我错误地解释了你正在尝试做的事情。你是否在寻找可以更容易地应用于众多功能的东西? – Pete171

+0

是的,类似的东西。我的问题是,我的一个功能是尝试telnet到其他设备,有时telnet超时时间太长。 – newman555p

回答

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 */) 
    

类似地访问可能是远程的资源将提供这样的超时参数或选项的所有其它的扩展。

0

在PHP中,我不认为你有一个有效的方法来控制你的函数的执行时间。 就像你说的,像set_time_limit这样的东西会抛出Fatar错误并杀死你的脚本。

我建议你在你的函数中使用你的执行时间,使用类似microtime()的东西,如果时间限制被拒绝,则抛出异常;这是一种例外,您可以在外面捕捉并继续采取相应行动。

+0

好吧,我会尝试像泰国。但这个问题通常如何解决(不是PHP)? – newman555p

+0

我认为这取决于您使用的语言。有些人喜欢Earlang,允许程序员将过程连接在一起,允许他们相互监视。我不知道是否有标准技术来处理这种情况,但如果有,请发表评论让我知道名称:) – Deleteman

相关问题