如何连续运行PHP脚本?

Sha*_*eni 4 php ajax wordpress curl refresh

简单地说:我正在编写发送和接收短信的 php 脚本,脚本将根据每个用户注册日期计算每周向用户发送活动短信,例如每周一上午 10 点向先生发送短信。A 和每个星期五晚上 7 点发送短信给小姐 B.. 和 php 脚本将照顾一切需要..

问题:显然,一个非常有趣的方法是让某人每隔几秒左右刷新一次我的应用程序的主页,以便能够继续计算和了解做什么以及何时执行作业,或者让主页始终在我的计算机上打开javascripts 和 jquery 将处理其余的!

我的问题:如何让我的 php 程序或脚本保持清醒状态,而无需有人刷新或打开主页?清醒我的意思是像它感知下一个计划并执行它等等..

要回答的一些原始想法:也许我可以每 10 秒使用 ajax 或 curl 调用一次主页..但我不知道如何首先唤醒 ajax 或 curl ..

我看到一些互联网帖子建议在 linux unix 或 windows 中使用命令行之类的东西..但我通常访问主机而不是命令行,对吗?或者命令行是主机中的东西,我不知道,如果是这样,请帮助我..

重要的例子:有像总缓存和超级缓存这样的 php wp 插件,它们似乎总是在日程安排中保持清醒,而无需有人刷新页面..

如果可能,请在 php 和 php 系列中给出所有答案,我根本不知道 unix 或那种编程。

-------根据答案在问题上取得了一些进展..现在我有这个波纹管脚本:

ignore_user_abort(true);
set_time_limit(0);
$data = file_get_contents('filename.txt');
$data = $data+1;
file_put_contents('filename.txt', $data);
$page = $_SERVER['PHP_SELF'];
$sec = "4";
header("Refresh: $sec; url=$page");
Run Code Online (Sandbox Code Playgroud)

有用!即使我重新启动本地主机。现在的主要问题是,当我关闭主页时,它停止在 filename.txt 中递增,当重新打开页面两个实例时,继续运行递增,所以:即使我关闭页面,它也不应该继续递增吗?我如何阻止它?在后台运行多个页面实例是否正常?

最后:根据此页面上的说明,我最好创建一个启动器或重新加载页面,然后使用命令启动此重新加载页面,例如每 1 分钟一次,然后像平常一样编写 PHP ..

最后同样重要的是:如何停止这个后台脚本?更新或维护..

Pet*_*ter 5

针对这个特殊问题,已经发明了 cron 作业。Cron 作业是定时作业,例如可以执行 PHP 脚本。

您可以设置一个 cron 作业来检查哪个用户应该每小时收到他/她的短信。根据您的操作系统,您可以设置这些 cron 作业。对于 linux distrubutions,有大量关于如何设置的指南。

来自维基百科

软件实用程序 Cron 是类 Unix 计算机操作系统中基于时间的作业调度程序。设置和维护软件环境的人员使用 cron 来安排作业(命令或 shell 脚本)在固定的时间、日期或间隔定期运行。它通常会自动执行系统维护或管理——尽管它的通用性质使其对于从 Internet 下载文件和定期下载电子邮件等操作非常有用。cron 这个名字的由来来自希腊语的时间,?????? (时间)。(cron 的作者 Ken Thompson 在与 Brian Kernighan 的私人交流中证实了这一点。)

我添加了一个解释如何使用 cron 作业的资源。

另一种方法是让 PHP 脚本在后台运行:

// Keep executing even if you close your browser
ignore_user_abort(true);

// Execute for an unlimited timespan
set_time_limit(0);

// Loop infinitely
// If you create a file called stop.txt,
// The script will stop executing
while (!file_exists('stop.txt')) {
    // Retrieve user data and sens sms messages

    // Wait for an hour
    sleep(3600);
}
Run Code Online (Sandbox Code Playgroud)

更新

ignore_user_abort(true);
set_time_limit(0);
$data = file_get_contents('filename.txt');
while (!file_exists('stop.txt')) {
    // Add 1 to $data
    $data = $data+1;
    // Update file
    file_put_contents('filename.txt', $data);

    // Wait 4 seconds
    sleep(4);
}
Run Code Online (Sandbox Code Playgroud)

要停止执行,请创建一个名为 stop.txt 的文件

资源