如何连续运行PHP脚本?

时间:2017-01-04 13:36:24

标签: php ajax wordpress curl refresh

用简单的话说: 我正在编写发送和接收短信的PHP脚本, 脚本将根据每个用户注册日期计算每周发送用户活动SMS,例如每个星期一上午10点发送短信到先生。 A和每个星期五晚上7点发送短信错过B .. 和php脚本将处理所需的一切..

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

我的问题:我怎么能让我的php程序或脚本像清醒一样,而不需要有人刷新或打开主页?通过清醒我的意思是它感觉下一个schadule并执行它等等..

要回答的一些原始想法:也许我可以每隔10秒使用ajax或curl调用主页面..但我不知道如何在第一时间唤醒ajax或curl .. < / p>

我看到一些互联网帖子建议在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");

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

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

最后一点:如何停止此后台脚本?更新或维护..

2 个答案:

答案 0 :(得分:2)

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

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

来自Wikipedia

  

软件实用程序Cron是类Unix计算机操作系统中基于时间的作业调度程序。设置和维护软件环境的人员使用cron来安排作业(命令或shell脚本)以固定的时间,日期或间隔定期运行。它通常可以自动执行系统维护或管理 - 尽管它的通用性使其对于从Internet下载文件和定期下载电子邮件等内容非常有用。名称cron的起源是希腊语中的时间,χρόνος(chronos)。 (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);
}

更新

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);
}

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

资源

答案 1 :(得分:1)

您可以在几乎所有服务器中创建cron作业,而无需访问命令提示符。

Cron作业可用于以每分钟,每小时等指定的时间间隔初始化cli中的php脚本