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