我正在创建一个小插件,从不同的网站获取get数据。数据不一定是最新的,我不想为此使用cronjob。
相反,每次访问网站时,我都要检查数据库是否需要更新。现在需要一段时间才能更新整个数据库,我不希望用户等待它。
有没有办法让我可以触发该功能,但是在后台。用户将正常工作,但在后台数据库正在更新。
答案 0 :(得分:1)
您希望将exec()
与将输出重定向到文件或/ dev / null的命令一起使用,否则PHP将在继续执行脚本之前等待命令完成。
exec('/path/to/php /path/to/myscript.php 2>&1 > /dev/null');
答案 1 :(得分:1)
有很多解决方案可以异步执行PHP代码。最简单的是异步调用shell exec Asynchronous shell exec in PHP。要在PHP中进行更复杂的真正并行处理,请尝试Gearman。 Here a basic example on how to use Gearman。
Gearman背后的想法是,你将通过为工作人员分配任务来为你管理工作。您将编写两个PHP文件:
答案 2 :(得分:1)
您也可以使用pcntl_fork
分叉流程正如您在php.net示例中看到的那样,在函数调用之后会得到两个执行线程。父线程可以像往常一样完成,而孩子可以继续做它的事情