PHP实现定时任务的几种方式

        定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等,现在的网站大多数都是采用PHP动态语言开发的,而对于PHP的实现决定了它没有Java和.Net这种AppServer的概念,而http协议是一个无状态的协议,PHP只能被用户触发,被调用,调用后会自动退出内存,没有常驻内存。


        如果非要PHP去实现定时任务, 可以有以下几种解决方案:

        一. 简单直接不顾后果型

<?php
ignore_user_abort();        //关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);          // 通过set_time_limit(0)可以让程序无限制的执行下去
ini_set('memory_limit','512M'); // 设置内存限制
$interval=60*30;            // 每隔半小时运行
do{
//ToDo
sleep($interval);           // 等待5分钟
}
while(true);

        缺点:启动之后,便无法控制, 除非终止 PHP 宿主. 不要采用这样方法, 除非你是黑客.

        二. 简单可控型

config.php
<?php
return 1;
?>

cron.php
ignore_user_abort();    //关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);      // 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;        // 每隔半小时运行
do{
$run = include 'config.php';
if(!$run) die('process abort');
//ToDo
sleep($interval);      // 等待5分钟
}
while(true);

        通过 改变config.php 的 return 0, 来实现停止程序. 一个可行的办法是config.php文件和某个特殊表单交互, 通过HTML页面设置一些变量来进行配置。     类似的,比如获取pid、获取文件的修改时间

        缺点:占系统资源, 长时间运行,会有一些意想不到的隐患。比如内存管理方面的问题 .

        三、服务器定时任务

        1、在Crontab中使用PHP执行脚本

        就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本,每一小时执行 myscript.php 如下:

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php

        linux 使用crontab 创建PHP定时任务  (传送门):https://cksite.cn/article/106.html 


        2、在Crontab中使用URL执行脚本

        如果你的PHP脚本可以通过URL触发,你可以使用 lynx 或 curl 或 wget 来配置你的Crontab。

        下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。

00 * * * * lynx -dump http://www.sf.net/myscript.php

        下面的例子是使用 CURL 访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用 "curl -o" 选项,你也可以把脚本的输出转储到临时文件temp.txt。

*/5 * * * * /usr/bin/curl -o temp.txt http://www.sf.net/myscript.php

        下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q 选项表示安静模式。"-O temp.txt" 表示输出会发送到临时文件。

*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.sf.net/myscript.php

        四、ini_set函数的使用

        php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中的 max_execution_time 变量指定,如果脚本需要跑很长时间,例如要大量发送电子邮件,或者分析统计大量数据,服务器会在 30 秒后强行中止正在执行的程序,这种情况就要更改php脚本最大执行时间。

        PHP设置脚本最大执行时间的三种方法:

        1、在php.ini里面设置(不建议使用)

max_execution_time = 120;

        2、通过PHP的ini_set函数设置

ini_set("max_execution_time", "120");

        3、通过set_time_limit 函数设置

set_time_limit(120);

        以上几个数字设置为0则无限制,脚本会一直执行下去,直到执行结束。所以,需要长时间执行的脚本,一般在php代码开头处添加如下代码就可以了

set_time_limit(0);


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论