纯PHP代码实现类似计划任务的无浏览器定时

最近开发PHP项目中遇到一个需要定时器的功能,但是又不能一直开着浏览器。网上找了下资料,还真有能满足这种变态需求的功能。下面罗列下实现方法(仅限windows,没有需求,所以没研究linux和macos):

实现结果:通过浏览器或命令行访问php文件,定时执行某些操作。关闭浏览器后,php脚本继续执行,不受浏览器关闭影响。(如何实现关闭命令行后继续执行脚本,没有做深一步研究。实际需求中要通过命令行来监控执行结果)

涉及知识点一、命令行下运行PHP。将PHP安装文件路径添加到系统环境变量Path中。就可以在命令行中运行php文件。图中是我的WIN8系统,我的php安装文件在C:\php中。目的是在使用命令行时,可以调用到php.exe这个文件

QQ图片20131115165021

测试运行一个php文件test.php,位置在桌面。php文件代码:

<?php
echo "test";
?>

运行结果如下,PHP文件会向命令行输出字符串 test
QQ图片20131115165451

 

涉及知识点二、

php函数:ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。

            set_time_limit() 函数限制最大的执行时间,当值等于0时,无限执行。

            sleep() 函数延迟代码执行若干秒。

浏览器运行php代码,然后关闭浏览器,程序会继续执行,每隔一秒将字符串test写入test.txt:

<?php
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=1; // do every 1 second
do{
    //write into file
    $fp = fopen('test.txt','a');
    fwrite($fp,'test');
    fclose($fp);
     // wait 1 second
    sleep($interval);
}while(true);
?>

结合上面两个知识点,改造一下代码,在写入文件之前输出到命令行中,便于监控

<?php
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=1; // do every 1 second
do{
    //write into file
    $fp = fopen('test.txt','a');
    $tempStr = 'test';
    echo $tempStr;
    fwrite($fp,$tempStr);
    fclose($fp);
     // wait 1 second
    sleep($interval);
}while(true);
?>

未解决知识点:程序运行起来之后如何停止。

有兴趣的同仁可以讨论QQ:32261927

posted @ 2013-11-15 17:18  六十七度老白干  阅读(351)  评论(0编辑  收藏  举报