一段时间后引发超时异常


throw a timeout exception after a period of time

我正在使用这个php脚本。基本上,它使用命令shell_exec来运行javascript爬虫。当它工作时,它会返回一个字符串。但是,有时 js 爬虫会变得无响应,shell_exec只是挂起。

我希望能够将shell_exec包裹在 try catch 中,并在 60 秒后执行捕获并优雅地处理它,这样shell_exec就不会无限期挂起。

try {
    $output = shell_exec($input);
} catch (Exception $e) {
    echo '60 seconds passed and response is: ',  $e->getMessage(), "'n";
}

我不确定我在 PHP 中可以使用什么命令来基本上说"让我们尝试运行此命令 60 秒,如果超过该时间,那么让我们抛出一个异常并处理该异常。

shell_exec()是一个

阻塞函数,这意味着它会阻止脚本继续。

如果你可以控制它正在运行的可执行对象,你可以做shell_exec("nohup $input &");,让它写一些定义的输出文件和状态文件,然后有一个 PHP while 循环,其中包含一个等待其中任何一个出现或时间耗尽的sleep(n)

还有其他可用的函数可以提供更细粒度的控制,例如 proc_open() ,但我不是很熟悉,所以我不确定如何利用它们来创建超时异常。