在PHP中创建新线程(?)

Joh*_*ach 4 php multithreading

可能重复:
php执行后台进程
如何实现应该在php中的线程中完成的任务

我有这个PHP脚本,需要一点时间来处理.但是我不希望查看器等待脚本完成.我希望他能够继续浏览和/或关闭浏览器.但我希望脚本继续工作......我怎么能这样做?有没有办法创建某种允许这样的东西的线程?

ps我真的不想用另一种语言重写脚本并通过os执行它.

nne*_*ala 7

如果您可以从CLI运行脚本,则可以通过调用以下内容从您的Web服务器所服务的脚本将其"分叉"为后台进程:

exec('php your_script.php > /dev/null &');
Run Code Online (Sandbox Code Playgroud)

这将允许页面完成加载,但保持your_script.php运行.


azk*_*oki 7

避免在 PHP 中运行并行任务(线程或进程)的想法。它有一些用于此目的的模块,但它们并非在每个平台上都可用,并且不是 PHP 核心的一部分,因此您能够使用它们的机会非常低。

您在这里有两个选择:

  1. 将长时间运行的任务拆分为几个(更便宜的)子任务。将它们放在队列中,并使每个请求执行其中一些子任务(但不要过多延迟向客户端的输出)。

  2. 如果你无法分割这个大任务,只需为其设置一个 cron 作业。这样,当系统执行长时间运行的任务时,用户就不会受到延迟的影响。

    另一件需要注意的事情是 PHP 脚本有(可重写的)时间限制,在给定的秒数后停止执行。通过 cron 运行的任务不受此限制。