标签 定时器 下的文章

首先PHP没有自带定时器(例如每隔几秒自动执行一下某函数)。要实现这个功能,只有三个方法:1)利用外部脚本实现定时执行;2)利用客户端的JavaScript定时执行;3)根据访问请求来实现,但前提是网站的访问量足够大。利用外部脚本实现定时执行,只能是使用虚拟主机或者自己架设服务器才能使用(在虚拟空间上运行,就只能考虑使用JavaScript)。

网上搜到的资料,用PHP页面也可以实现定时器的。主要思路是使用死循环,再加延时执行(即sleep或者usleep函数)。相关示例代码如下:

//------------begin file: timer.php------------
<?php
//每半秒执行记录一下当前时间

//写文件函数
function write_txt() {
    $filePath = 'timer_test.txt';
    if(!file_exists($filePath)){
        $fp = fopen($filePath, 'ab');
        fclose($fp);
    }
    $str = "\r\n" . date('Y-m-d H:i:s');
    $fp = fopen($filePath, 'ab'); //a为打开文件后指向文件末尾,b为以二进制打开文件
    fwrite($fp, $str);
    fclose($fp);
}

ignore_user_abort(); //即使关掉浏览器,PHP也可继续执行
set_time_limit(0); //不设置脚本超时时间,可以无限执行下去
$interval = 30; //时间间隔为30秒
do{
    //定时执行的代码
    write_txt();
    sleep($interval); //等待,sleep的参数单位是秒,usleep的参数单位是毫秒
}while(true); //死循环
//------------end file: timer.php------------

执行时还有个问题,用浏览器打开运行后,网站的其它连接都卡住且不能打开。网上搜到的解析是,PHP不支持多线程。最后只有在服务器上,用以下命令运行:

php timer.php &