入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PHP 简单 延时任务

创建时间:2016-06-30 投稿人: 浏览次数:2732

如果你想使用此方法必须满足以下条件:
1、您有crontab操作权限(目前某些虚拟主机也能做到,详情请检查你的控制面板);
2、您可以接受1~59秒的误差(crontab执行的最小间隔为1分钟)。

逻辑为在程序中把要延时执行的数据保存到一个www文件夹外的一些文件中,并以生成时的时间戳命名,用crontab定时任务定时运行一个shell脚本扫描文件夹,如果文件夹中存在比现在的时间戳小的文件名,即有已经过时的文件,即立即运行一个PHP文件来对这些文件进行处理。

首先,写一个shell脚步 test.sh

!/bin/bash

#要读取的文件夹
path="/home/cfucome/notification/file"

#遍历文件夹,文件夹下的文件名为生成时的时间戳
for file_a in ${path}/*; do 

    temp_file=`basename $file_a`  

    #当前时间戳
    now_time=$(date +%s)    

    #如果文件名小于当前时间戳,即执行PHP文件
    if [ "$temp_file" -le "$now_time" ] ;then
        $(php /home/cfucome/notification/test.php)
        exit 0 
    fi

done

此脚本的意思为:遍历path下的文件,如果此文件的文件名小于当前时间戳,即为已经过时,即执行test.php这个PHP文件

test.php中的代码:

//打开文件夹
$handle = opendir("./file");

//循环读取文件夹中的文件
while($file = readdir($handle))
{
    //过滤文件名
    if(strchr($file,"."))
    {
        continue;
    }

    //如果文件名小于当前的时间戳,即读取文件中的数据,进行操作
    if($file<time())
    {
        $dataarr = array();

        $path = "./file/".$file;

        //读取数据
        $data = file_get_contents($path);

        //进行操作

        //操作完成之后把文件删除
        unlink($path);
    }
}

然后新建一个crontab任务,每分钟或其他间隔执行一次:
/bin/bash /home/cfucome/notification/test.sh

用定时运行shell脚本这种方法的原因是,这样占内存比较小。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。