PHP中使用sleep函数实现定时任务实例分享

 更新时间:2014年08月21日 09:22:36   投稿:junjie  
这篇文章主要介绍了PHP中使用sleep函数实现定时任务实例分享,本文给出了多个使用sleep的例子,本文还可以作为学习sleep函数的教程,需要的朋友可以参考下

在某些程序中,有一些特殊的功能需要用到定时执行,如果熟悉Linux的朋友肯定会说这不是容易吗,直接来个计划任务crontab不久实现了吗?这的确是可以实现,但必须是提前知道具体的执行时间,然后才能写到计划任务里去。比如凌晨两点,上午七点,或者每天上午六点三十分等等。

然而有时候,这个时间我们无法预知,而执行时间是程序动态生成的。然后在动态生成的时间后执行某些程序片段,这里就不能用Linux的crontab计划任务了,因为每次执行的时间都是动态生成,而计划任务需要知道一个定死了的时间。既然无法使用计划任务,那么就只能从程序本身寻找实现方法。

在PHP中,有一个sleep函数,大概意思是程序执行遇到sleep函数时暂停N秒后继续往下执行。如sleep(10)意思就是程序自上往下执行,遇到sleep(10)语句后暂停十秒,然后继续往下执行。函数括号内的参数是一个数值,代表暂停时间值,单位秒。请看下面一段代码

<?php
/**
 * sleep函数的用法
 * 琼台博客
 */
// 输出当前程序时间戳
echo time(); // out:1338088780
echo '<br />';
 
// 暂停十秒
sleep(10);
 
// 输出时间戳
echo time(); // out:1338088790

以上程序执行结果是

复制代码 代码如下:

1338088780
1338088790

我们来解析下执行过程,第一步是打印当前时间戳1338088780,然后暂停十秒,再打印时间戳。由于程序是等待了十秒然后再次打印时间戳,那么就是最后一次的时间戳肯定要比第一次打印的时间戳多十秒钟,结果最后一次的时间戳是1338088790。

以上例子,我们只用了一次sleep函数,页面中可以无限制使用sleep()函数。请看以下代码:

<?php
/**
 * sleep函数的用法
 * 琼台博客
 */
// 输出第一次时间戳
echo time();   // out: 1338088780
echo '<br />';
 
// 暂停十秒
sleep(10);
 
// 输出第二次时间戳
echo time();   // out: 1338088790
echo '<br />';
 
// 暂停二十秒钟
sleep(20);
 
// 输出第三次时间戳
echo time();   // out: 1338088810

以上程序执行结果是

复制代码 代码如下:
1338088780
1338088790
1338088810

以上代码执行过程:
第一,打印第一次时间戳1338088780
第二,暂停十秒
第三,打印第二次时间戳 1338088790,是第一次时间戳加上十秒后的总和
第四,暂停二十秒
第五,打印第三次时间戳 1338088810,是第二次时间戳1338088790加上二十秒后的总和。

页面中出现两次sleep,第一次是十秒,第二次二十秒。由此得出以上实例总共执行三十秒。页面中多次出现sleep()函数时为累加而不是覆盖前面的代码。

那如何结合sleep定时执行动态生成时间的代码呢?请看以下代码:

<?php
/**
 * sleep函数定时执行动态生成时间段的代码
 * 琼台博客
 */
// 目前时间
echo date('Y-m-d H:i:s'); // out:2012-05-27 14:58:00
echo '<br />';
 
// 动态生成时间 范围在今天下午六点到晚上零点前的任意时间
$datetime = date('Y-m-d').' '.rand('18,23').':'.rand('0,59').':'.rand('0,59'); // 2012-05-27 19:20:00
 
// 算得时间戳
$a = strtotime($datetime);
 
// 算得时间差
$reduce = $a-time();
 
// sleep等待
sleep($reduce);
 
// 执行到时间后执行的代码块
echo date('Y-m-d H:i:s'); // out:2012-05-27 19:20:00


以上代码输出:

复制代码 代码如下:
2012-05-27 14:58:00
2012-05-27 19:20:00

解析:开始打印当前时间,然后随机算出程序往后执行时间 2012-05-27 19:20:00,由于sleep接受参数是一个以秒为单位的一个数值,所以先把生成的时间转换为时间戳然后再用时间戳减去当前时间戳得出一个时间差,再sleep即可达到程序在随机生成时间执行某些语句达到定时执行效果。这里注意必须算的一个以秒为单位的时间差,如果不能算出秒差就没法使用sleep函数功能。

最后,可能某些童鞋做实例的时候会说怎么我的程序执行出错,提示超时。出现这个问题不要慌,这是PHP默认页面执行时间导致的,在PHP中默认执行页面时间是三十秒钟,这对于一般程序够用了。但如果你要做类似定时执行功能就必须再头部声明设置下执行时间set_time_limit(0)。0是代表不限时,单位是秒。最后整体贴出代码:

<?php
/**
 * sleep函数定时执行动态生成时间段的代码
 * 琼台博客
 */
// 设置页面执行时间,否则会有超时错误提示
set_time_limit(0);
 
// 目前时间
echo date('Y-m-d H:i:s'); // out:2012-05-27 14:58:00
 
// 动态生成时间 范围在今天下午六点到晚上零点前的任意时间
$datetime = date('Y-m-d').' '.rand('18,23').':'.rand('0,59').':'.rand('0,59'); // 2012-05-27 19:20:00
 
// 算得时间戳
$a = strtotime($datetime);
 
// 算得时间差
$reduce = $a-time();
 
// sleep等待
sleep($reduce);
 
// 执行到时间后执行的代码块
echo date('Y-m-d H:i:s'); // out:2012-05-27 19:20:00

相关文章

  • PHP 实例化类的一点摘记

    PHP 实例化类的一点摘记

    最近在编写 Grace PHP5 Framework 中,我得到很多类的实例化的心得。Grace PHP5 Framework 是一个完全基于 MVC 架构的框架,具有良好的扩展性。它对于类的调用可以说非常的灵活。
    2008-03-03
  • PHP中创建和编辑Excel表格的方法

    PHP中创建和编辑Excel表格的方法

    本文通过实例代码给大家介绍了如何在php中使用PHPExcel库实现创建和编辑Excel表格的方法,希望大家能够喜欢
    2018-09-09
  • php header函数的常用http头设置

    php header函数的常用http头设置

    这篇文章主要介绍了php header函数的常用http头设置,本文直接给出代码实例,代码中包含详细注释,需要的朋友可以参考下
    2015-06-06
  • 实例讲解PHP页面静态化

    实例讲解PHP页面静态化

    本篇文章主要给大家通过实例讲解了PHP页面静态化的原理以及相关方法,对此有需要的朋友参考下吧。
    2018-02-02
  • 页面利用渐进式JPEG来提升用户体验度

    页面利用渐进式JPEG来提升用户体验度

    这篇文章主要介绍了页面利用渐进式JPEG来提升用户体验度的相关资料,需要的朋友可以参考下
    2014-12-12
  • 使用配置类定义Codeigniter全局变量

    使用配置类定义Codeigniter全局变量

    Codeigniter的全局变量也可以借助 helper 函数来实现。不过,更为合适的方式可能要属用配置类定义了。这篇文章主要介绍了使用配置类定义Codeigniter全局变量,需要的朋友可以参考下
    2014-06-06
  • PHP自动载入类文件函数__autoload的使用方法

    PHP自动载入类文件函数__autoload的使用方法

    今天小编就为大家分享一篇关于PHP自动载入类文件函数__autoload的使用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 解密ThinkPHP3.1.2版本之独立分组功能应用

    解密ThinkPHP3.1.2版本之独立分组功能应用

    分组功能可以解决中大型项目情况中MVC分层文件过多导致不易管理的问题。这篇文章主要介绍了ThinkPHP3.1.2独立分组功能,需要的朋友可以参考下
    2014-06-06
  • 让codeigniter与swfupload整合的最佳解决方案

    让codeigniter与swfupload整合的最佳解决方案

    网上有很多关于ci与swfupload的帖子,不过,并不是很完整,所以,这里综合各家优点,经过自己实际经验,做了下整理,需要的朋友可以参考下
    2014-06-06
  • PHP Cookie的使用教程详解

    PHP Cookie的使用教程详解

    本篇文章是对PHP Cookie的使用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论