如何连续运行 PHP 脚本?

Posted

技术标签:

【中文标题】如何连续运行 PHP 脚本?【英文标题】:How to run a PHP script continuously? 【发布时间】:2017-05-18 19:45:03 【问题描述】:

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

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

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

需要回答的一些原始想法:也许我可以使用 ajax 或每 10 秒 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");

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

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

最后一点:如何停止这个后台脚本?用于更新或维护..

【问题讨论】:

你可以一直使用 CRON。 使用 crontab。创建多个 cron 作业并通过传递参数来指定脚本的时间,例如 ajax.php?sms=seven 。而另一个 ajax.php?sms=ten 什么是 CRON ?它像在php页面中一样写吗?还有更多假设 php 计算 sms=7 的时间和要发送的 sms=10 的时间,并可能将这些时间传递给 CRON ,对吗?那么 CRON 是如何开始的呢?它总是在普通的 php 服务器上运行吗? 【参考方案1】:

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

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

来自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 的文件

资源

About Cron jobs

【讨论】:

据我所知,如果我只访问一次页面,它就会像打开一样运行......非常重要的是它在后台模式下是否支持 jquery > 不行,后台不支持jquery,因为jquery是客户端语言,不能在服务端执行。 长时间运行的 PHP 脚本容易出现故障,并且需要自动从被杀死或挂起中恢复的方法。实现 OP 目标的最佳方法是使用一个 cron 作业每 1、5 或任何分钟轮询一次脚本。该脚本应检查文件(或数据库值)的日期+时间。如果日期+时间≤当前时间,它应该查看完整的任务队列并执行任何准备好的任务。每当添加/删除/完成任务时,该日期 + 时间值应该从队列中更新为下一个最快的值。这比每次都搜索完整的队列更有效。 彼得我通过您的回答提出了我的问题,请您在顶部的主要问题下方检查它.. 您可以通过单击我答案左侧的按钮接受我的答案来感谢我。【参考方案2】:

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

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

【讨论】:

请进行搜索。它可以在互联网上使用。 cyberciti.biz/faq/… 您的托管合作伙伴是什么? 对不起,我不善于言辞.. 主持人的搭档?如果它是网络托管,那么它是 bertina.us 如果你的意思是短信网关,它是 www.sms.ir

以上是关于如何连续运行 PHP 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的php脚本以守护进程的方式一直运行

如何执行PHP脚本

如何获得运行 PHP 脚本的链接?

如何使用 Windows 计划任务运行 PHP 脚本?

如何通过命令行运行 php 脚本(并在注销后保持运行)

如何从 PHP 脚本运行 linux 命令 [重复]