PHP中的多线程

vin*_*035 3 php cron

在apcahe服务器中,我想运行一个PHP脚本作为cron,它在后台启动一个php文件,并在文件启动后退出,并且不等待脚本完成,因为该脚本需要大约60分钟才能完成.这可以做到吗?

Ala*_*blo 9

您应该知道PHP中没有线程.但是如果你在Unix/linux系统上运行,你可以轻松地执行程序并将它们分离.

$command = "/usr/bin/php '/path/to/your/php/to/execute.php'";
exec("{$command} > /dev/null 2>&1 & echo -n \$!");
Run Code Online (Sandbox Code Playgroud)

可以做这个工作.我们来解释一下:

exec($command); 
Run Code Online (Sandbox Code Playgroud)

执行/ usr/bin/php'/path/to/your/php/to/execute.php':您的脚本已启动,但Apache将在执行下一代码之前等待执行结束.

> /dev/null
Run Code Online (Sandbox Code Playgroud)

将标准输出(即您的回声,打印等)重定向到虚拟文件(其中写入的所有输出都将丢失).

2>&1
Run Code Online (Sandbox Code Playgroud)

将错误输出重定向到标准输出,写入相同的虚拟和非现有文件.这样可以避免将日志记录到apache2/error.log中.

&
Run Code Online (Sandbox Code Playgroud)

在你的情况下是最重要的事情:它将分离你的$ command的执行:所以exec()将立即释放你的PHP代码执行.

echo -n \$!
Run Code Online (Sandbox Code Playgroud)

将给你的分离执行的PID作为响应:它将由exec()返回并使你能够使用它(例如,将此pid放入数据库并在一段时间后将其终止以避免僵尸).