保持PHP函数在后台运行

保持PHP函数在后台运行,php,Php,我正在创建一个从不同网站获取用户数据的小插件。数据不必是最新的,我不想为此使用cronjob 相反,每次访问网站时,我都想检查数据库是否需要更新。现在需要一段时间才能更新整个数据库,我不希望用户等待 是否有一种方法可以在后台启动函数。用户将正常工作,但在后台数据库正在更新。您可能希望使用exec()命令将输出重定向到文件或/dev/null,否则PHP将等待命令完成后再继续使用脚本 exec('/path/to/php /path/to/myscript.php 2>&1 >

我正在创建一个从不同网站获取用户数据的小插件。数据不必是最新的,我不想为此使用cronjob

相反,每次访问网站时,我都想检查数据库是否需要更新。现在需要一段时间才能更新整个数据库,我不希望用户等待


是否有一种方法可以在后台启动函数。用户将正常工作,但在后台数据库正在更新。

您可能希望使用
exec()
命令将输出重定向到文件或/dev/null,否则PHP将等待命令完成后再继续使用脚本

exec('/path/to/php /path/to/myscript.php 2>&1 > /dev/null');

有许多异步执行PHP代码的解决方案。最简单的方法是异步调用shell exec。要在PHP中实现更复杂的真正并行处理,请尝试

Gearman背后的想法是,你将有一个执事,通过将任务分配给工人来为你管理工作。您将编写两个PHP文件:

  • Worker:包含要异步运行的代码
  • 客户端:调用异步函数的代码

  • 您还可以使用


    正如您在php.net示例中所看到的,在函数调用之后有两个执行线程。父线程可以像往常一样完成,而子线程可以继续做自己的事情

    用户需要脚本中的任何信息吗?也就是说,它最终会向用户返回任何东西吗?如果没有,只需使用
    exec()
    函数在服务器上执行脚本即可。不,用户不需要获取任何内容。他将只获取当前可用的数据。谢谢,这似乎是一个比exec()更好的解决方案。我需要处理数据库,我想如果我使用exec,我必须重新进行所有数据库连接。创建一个单独的线程听起来更好。