PHP 简单 延时任务

如果你想使用此方法必须满足以下条件:
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脚本这种方法的原因是,这样占内存比较小。

转载于:https://www.cnblogs.com/codercwm/p/10135056.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值