纯PHP代码实现类似计划任务的无浏览器定时
最近开发PHP项目中遇到一个需要定时器的功能,但是又不能一直开着浏览器。网上找了下资料,还真有能满足这种变态需求的功能。下面罗列下实现方法(仅限windows,没有需求,所以没研究linux和macos):
实现结果:通过浏览器或命令行访问php文件,定时执行某些操作。关闭浏览器后,php脚本继续执行,不受浏览器关闭影响。(如何实现关闭命令行后继续执行脚本,没有做深一步研究。实际需求中要通过命令行来监控执行结果)
涉及知识点一、命令行下运行PHP。将PHP安装文件路径添加到系统环境变量Path中。就可以在命令行中运行php文件。图中是我的WIN8系统,我的php安装文件在C:\php中。目的是在使用命令行时,可以调用到php.exe这个文件
测试运行一个php文件test.php,位置在桌面。php文件代码:
<?php echo "test"; ?>
涉及知识点二、
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