如何在没有cron的情况下在PHP中执行长时间运行的任务


How to execute long running tasks in PHP without cron

让我们想象一下我的情况(当然是假的)。。。

我的网站有1000个活跃用户。我需要做一些缓慢的事情(数据库清理、备份)等等。例如,可能需要5分钟。

我想当用户打开我的网站并执行一些参数时(例如,他是一周内的第一个访问者)。。。用户以某种方式向服务器发送信号——这个缓慢的进程现在必须运行,但他不会等待它的执行(那几分钟)。。。他只是看到服务器正在进行一些更新或其他什么的通知。在该时间内打开我的网站的任何其他用户也会看到该通知。

当进程被执行时,网站会恢复正常行为。这一切都是自动发生的。

如果没有cron,这可能吗

检查执行运算符。它们可能正是你想要的。像这样的

$execute = `/path/to/php/script.php`;
// If you needed the output
echo $execute; 

运行此脚本后,设置一个标志(可以在数据库中,也可以在文件中进行简单写入)。脚本结束时,删除此标志。

在所有其他页面中,选中此标志。如果是ON(接通),则显示消息。

在您的页面上,您可以有一个数据库值,即script_runninng,然后检查值是否为0,发送命令,如果为1,则不执行任何操作。然后确保在命令开始时将该值设置为1,在命令结束时将其设置为0。

您可以使用CURL执行此任务。在数据库或文本文件中保存上次运行脚本的时间,并在一周中的某一天运行此脚本(当然,在执行脚本之前更新日期):

$ch=curl_init();

curl_setopt($ch,CURLOPT_URL,"http://www.exaple.com/service_script.php");

curl_setopt($ch,CURLOPT_RETURNTTRANSFER,1);

curl_setopt($ch,CURLOPT_TIMEOUT,1);

$result_curl=curl_exec($ch);

curl_close($ch);