如果你想使用此方法必须满足以下条件:
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 fidone
此脚本的意思为:遍历path下的文件,如果此文件的文件名小于当前时间戳,即为已经过时,即执行test.php这个PHP文件
test.php中的代码:
//打开文件夹$handle = opendir('./file');//循环读取文件夹中的文件while($file = readdir($handle)){ //过滤文件名 if(strchr($file,'.')) { continue; } //如果文件名小于当前的时间戳,即读取文件中的数据,进行操作 if($file
然后新建一个crontab任务,每分钟或其他间隔执行一次:
/bin/bash /home/cfucome/notification/test.sh用定时运行shell脚本这种方法的原因是,这样占内存比较小。