我正在使用这个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()
,但我不是很熟悉,所以我不确定如何利用它们来创建超时异常。