PHP或任何其他语言中的时间限制函数执行

PHP或任何其他语言中的时间限制函数执行,php,exception,time,limit,Php,Exception,Time,Limit,我可以说我的问题与PHP有关,但我更关心的是在函数执行可以无限期进行的情况下,编程的正确逻辑 监视执行某个函数所需时间的正确方法是什么?如何停止此执行并继续执行程序的其余部分 好的,我知道,例如,有一个set_time_limit()函数返回致命错误,但我不希望这样,我希望我的代码在x秒后继续,或者可能在超过时间后抛出异常,捕获它并执行其他操作 正在编写某种“看门狗”功能解决方案,这是如何做到的 感谢您提供的任何帮助,任何链接,任何以“应该”的方式解决此问题的文章 比尔, NewmanPHP不提

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

监视执行某个函数所需时间的正确方法是什么?如何停止此执行并继续执行程序的其余部分

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

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

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

比尔,
Newman

PHP不提供函数超时的一般方法。但是,在许多常见的组件中,可以定义超时

示例:

  • 允许您指定
    超时
    选项:

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

  • 使用以下命令时,可以设置连接超时:


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

特别是在PHP中,我认为您没有有效的方法从外部控制函数的执行时间。 就像你说的,像
set\u time\u limit
这样的东西会抛出一个Fatar错误并杀死你的脚本


我建议从函数内部测量执行时间,使用
microtime()
之类的方法,如果超出时间限制,则抛出异常;您可以在外部捕捉到异常并继续相应地采取行动。

更具体地说,上下文是什么?我猜这个函数包含某种循环。如果这是正确的,我的第一反应是在进入循环之前使用
microtime()
获取一个时间戳,然后将该时间戳与每次迭代时在循环内部生成的时间戳进行比较。当达到某个值时,您可以抛出异常,或者执行其他任何操作。不过,也许我误解了你想做的事情的背景。您是否正在寻找可以更容易地应用于众多函数的功能?是的,类似的功能。我的问题是,我的一个函数试图远程登录到其他设备,有时远程登录超时太长。好的,我会像那样尝试。但是这个问题通常是如何解决的(不是PHP)?我认为这取决于您使用的语言。像Earlang这样的一些允许程序员将进程连接在一起,从而允许他们互相监视。我不知道是否有标准的技术来处理这种情况,但如果有,请发表评论,让我知道名称:)
$pdo->setAttribute(PDO::ATTR_TIMEOUT, 10 /* seconds */);
$ftp = ftp_connect('example.com', 21, 10 /* seconds */)