我正在使用这个php脚本。基本上,它使用命令shell_exec来运行javascript爬虫。当它工作时,它会返回一个字符串。但是,有时js爬虫会变得没有响应,shell_exec就会挂起。
我希望能够将shell_exec包装在try catch中,并在60秒后执行catch,然后优雅地处理它,这样shell_exec就不会无限期地挂起。
try {
$output = shell_exec($input);
} catch (Exception $e) {
echo '60 seconds passed and response is: ', $e->getMessage(), "\n";
}我不确定在PHP中有什么命令可以说“让我们尝试运行这个命令60秒,如果它超过了这个时间,那么让我们抛出一个异常并处理该异常。”
发布于 2015-06-12 07:22:39
shell_exec()是一个阻塞函数,这意味着它会阻塞脚本的执行。
如果您可以控制它正在运行的可执行文件,您可以执行shell_exec("nohup $input &");并让它编写一些已定义的输出文件和状态文件,然后使用PHP while循环和一个sleep(n)来等待这两个文件之一的出现,或者等待时间耗尽。
还有其他函数可以提供更细粒度的控制,比如proc_open(),但我对它不是很熟悉,所以我不确定如何利用它们来创建超时异常。
https://stackoverflow.com/questions/30792961
复制相似问题