如何在没有 cron 的情况下在 PHP 中执行长时间运行的任务
让我们想象一下我的情况(当然,这是假的)...
我的网站有 1000 个活跃用户。我需要做一些比较慢的事情(数据库清理、备份)等。例如,可能需要 5 分钟。
我想实现这一点,当用户打开我的网站并执行一些参数时(例如,他是一周内的第一个访问者)...用户以某种方式向服务器发送信号 - 这个缓慢的过程现在必须运行,但他没有不用等待它的执行(那几分钟)...他只是看到服务器正在进行一些更新或其他什么的通知。当时打开我的网站的任何其他用户也会看到该通知。
当进程执行时 - 网站返回到正常行为。这一切都是自动发生的。
如果没有 cron ,这可能吗?
Lets imagine my situation (it's fake, of course)...
I have web-site that have 1000 active users. I need to do some stuff that will be slow (database clean-up, backups) etc.. For example, it may take 5 minutes.
I want to accomplish that when user opens my web-site and some params are executed (for example, he is first visitor in one week)... user somehow sends signal to server - that slow process must be run now, but he doesn't wait for it's execution (those several minutes)... he just sees notification that server is making some updates or whatever. Any other user that opens my web-site in that time also sees that notification.
When process is executed - web-site returns to it normal behavior. And it all happens automatically.
Is this possible without cron ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
检查执行运算符。他们可能就是您正在寻找的。
像这样的东西
一旦这个脚本运行,设置一个标志(可以在数据库中或简单地写入文件或其他东西)。当脚本结束时,删除该标志。
在您的所有其他页面中 - 检查此标志。如果它为 ON,则显示该消息。
Check Execution Operators. They may be what you are looking for.
Something like this
Once this script runs, set a flag (could be in the database or a simple write in a file or something). When the script ends, delete this flag.
In all your other pages - check this flag. If it is ON then display the message.
在您的页面上,您可以有一个数据库值,即
script_runninng
,然后检查该值是否 = 0,发送命令,如果 = 1,则不执行任何操作。然后确保在命令开始时将值设置为 1,在命令结束时将值设置为 0。On your page you could have a database value i.e.
script_runninng
then check if the value = 0, send the command, if = 1 do nothing. Then make sure you set the value to 1 at the beginning and 0 at the end of your command.您可以使用 CURL 来完成此任务。在数据库或文本文件中保存上次运行脚本的时间以及一周中的某一天运行此脚本(当然,在执行脚本之前更新日期):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.exaple.com/service_script.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$result_curl = curl_exec($ch);
卷曲_关闭($ch);
You are can use CURL for this task. In database or textfile save time last run script and one day in week run this script (of course, update date before execute script):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.exaple.com/service_script.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);
$result_curl = curl_exec($ch);
curl_close($ch);