Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的多线程_Php_Cron - Fatal编程技术网

PHP中的多线程

PHP中的多线程,php,cron,Php,Cron,在apcahe服务器中,我想以cron的形式运行一个PHP脚本,它在后台启动一个PHP文件,并在文件启动后立即退出,而不是等待脚本完成,因为该脚本大约需要60分钟才能完成。如何完成?您需要使用“&”符号作为后台进程运行程序 $ php -f file.php & 这将在后台运行此命令 你可以写一篇短文 #!/bin/bash php -f file.php & 然后从crontab运行这个脚本。您应该知道PHP中没有线程。 但是,如果在Unix/linux系统上运行,则可以轻

在apcahe服务器中,我想以cron的形式运行一个PHP脚本,它在后台启动一个PHP文件,并在文件启动后立即退出,而不是等待脚本完成,因为该脚本大约需要60分钟才能完成。如何完成?您需要使用“&”符号作为后台进程运行程序

$ php -f file.php &
这将在后台运行此命令

你可以写一篇短文

#!/bin/bash
php -f file.php &

然后从crontab运行这个脚本。

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

$command = "/usr/bin/php '/path/to/your/php/to/execute.php'";
exec("{$command} > /dev/null 2>&1 & echo -n \$!");
我可以做这项工作。让我们解释一下:

exec($command); 
Executes/usr/bin/php'/path/to/your/php/to/execute.php”:脚本已启动,但Apache将在执行下一个代码之前等待执行结束

> /dev/null
将标准输出(即回音、打印等)重定向到虚拟文件(其中写入的所有输出都将丢失)

将错误输出重定向到标准输出,在同一虚拟和不存在的文件中写入。例如,这样可以避免将日志记录到apache2/error.log中

&
在您的情况下,最重要的是:它将分离您对$command的执行:因此exec()将立即释放您的php代码执行

echo -n \$!

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

这可能不是解决特定问题的最佳方案。但要说明的是,PHP中有线程

我假设您知道如何使用线程,这是我自己编写的非常年轻的代码,但是如果您有线程和互斥等方面的经验,您应该能够使用此扩展解决您的问题


这显然是我自己项目的无耻插件,如果用户没有安装扩展所需的访问权限,那么这对他没有帮助,但许多人发现stackoverflow,它无疑会解决其他问题…

只要每分钟在cron上运行脚本就行了。您可以在文件上创建一些类似的“互斥体”,并检查上一个实例是否完成。Apache与您的任务无关。为什么您不能“运行”cron?这是一个cron任务-所以你不需要等待它完成?很好地解释了这些论点。
echo -n \$!