Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

PHP定时器实现每隔几秒运行一次

 Share


KaiWn

Recommended Posts

  • PHP定时器实现每隔几秒运行一次  https://www.cnblogs.com/kenshinobiy/p/5895299.html

    php是服务器端脚本了并不像js那样有专业的settimeout函数来定时执行了,但只要浏览器不关闭各阶层是可以做到了,下面一起来看看。

    下面写个简单例子来讲解这个方法。

    <?php 
    ignore_user_abort();//关闭浏览器仍然执行
    set_time_limit(0);//让程序一直执行下去
    $interval=3;//每隔一定时间运行
    do{
        $msg=date("Y-m-d H:i:s");
        file_put_contents("log.log",$msg,FILE_APPEND);//记录日志
        sleep($interval);//等待时间,进行下一次操作。
    }while(true);
    ?>

    需要说明的是:程序没有写结束判断语句,他会无限循环下去。当然如果想停止的话,可以重启apache,重启后就无效了。想再次进行定时执行,那么把这段代码再一次运行。

    上面简单例子可以说明这个原理。
    那么针对上面的例子,我可以进行一下改良方案。

    你需要一个执行脚本的开关,你可以用外部文件引入的方法来实现,在while循环的时候,include开关变量即可。那么就可以这样实现:

    建立外部引入变量文件 switch.php 内容如下:

    <?php
    return 1;//1执行脚本 0退出执行脚本
    ?>

    改良脚本如下:

    <?php
        ignore_user_abort();//关闭浏览器后,继续执行php代码
        set_time_limit(0);//程序执行时间无限制
        $sleep_time = 5;//多长时间执行一次
        $switch = include 'switch.php';
        while($switch){
            $switch = include 'switch.php';
            $msg=date("Y-m-d H:i:s").$switch;
                file_put_contents("log.log",$msg,FILE_APPEND);//记录日志
            sleep($sleep_time);//等待时间,进行下一次操作。
        }
        exit();
        
    ?>


    当然我们也可以使用系统的定时执行php脚本了,下面看个linux的例子。

    在Crontab中使用PHP执行脚本

    就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。 
    每一小时执行myscript.php如下:

    # crontab -e 
    00 * * * * /usr/local/bin/php /home/john/myscript.php

    /usr/local/bin/php为PHP程序的路径。

     

    ---------------------------------------------------------------------------------------------------

     

    用PHP实现定时器功能

     

    1、直接使用PHP来完成定时

     

    <?php
    ignore_user_abort(false);//当用户关闭页面时服务停止
    set_time_limit(0);  //设置执行时间,单位是秒。0表示不限制。
    date_default_timezone_set('Asia/Shanghai');//设置时区
    
    while(TRUE)
    {
        //这里是需要定时执行的任务
        sleep($interval);//暂停时间(单位为秒)
    }
    ?>

     

     2.Linux/Unix的定时任务 定时直接可以用cron来执行一个php脚本 或者其他语言的脚本[你要有足够的系统权限]

    比如每隔5分钟执行下 /root/bin目录下的test.php脚本

    */5 * * * * php /root/bin/test.php

     

     

    <?php    
       ignore_user_abort(true);//设置与客户机断开是否会终止脚本的执行。
      set_time_limit(0); //设置脚本超时时间,为0时不受时间限制
      ob_end_clean();//清空缓存
      ob_start();//开始缓冲数据
      while(1){
       echo str_repeat(" ",1024);//写满IE有默认的1k buffer
       ob_flush();//将缓存中的数据压入队列
       flush();//输出缓存队列中的数据
       echo "now time is ".date('h:i:s') . "<br/>";//打印数据,其实是先将数据存入了缓存中
       usleep(1000000);//延迟一秒(暂停一秒)
      }
    ?>

     

    如果要求实现连续、均匀的输出效果(如输出时间),则应设置缓存,即使用图a对应的方法;如果对输出显示的连续性要求不高,或者时间间隔比较大(如定期自动备份,定时加密控制等),则使用图b对应的方法即可。

       为方便理解,提供相关函数作用说明如下:
      ①ignore_user_abort(bool):设置与客户机断开是否会终止脚本的执行。
      ②set_time_limit(int seconds)设置允许脚本运行的时间,单位为秒。参数值为0时不受限制。
      ③ob_end_clean():清除服务端缓存的数据
      ④ob_start():开启一个缓存(可嵌套)
       ⑤ob_flush():将缓存中的数据压入队列
      ⑥flush():输出缓存队列中的数据
      ⑦usleep(int m-seconds):以指定的微秒数延缓程序的执行。
      注:
      flush()和ob_flush()的正确顺序应是,先ob_flush()再flush(),不可弄混。
      usleep()函数可替换成sleep()函数,不同之处在于sleep()的参数是秒。

    FROM:http://blog.tianya.cn/blogger/post_read.asp?BlogID=4315093&PostID=42870088

              http://blog.uacool.com/?p=642

              http://dev.cobub.com/zh/docs/cobub-razor/auto-archiving/

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...