<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            PHP中如何實現crontab代碼

            時間:2025-04-14 14:44:07 php語言 我要投稿
            • 相關推薦

            PHP中如何實現crontab代碼

              PHP是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學習,使用廣泛,主要適用于Web開發領域。下面,小編為大家搜索整理了PHP中如何實現crontab代碼,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

              1. 準備一個標準crontab文件 ./crontab

              代碼如下:

              # m h dom mon dow command

              * * * * * date > /tmp/cron.date.run

              2. crontab -e 將此cron.php腳本加入系統cron

              代碼如下:

              * * * * * /usr/bin/php cron.php

              3. cron.php 源碼

              代碼如下:

              // 從./crontab讀取cron項,也可以從其他持久存儲(mysql、redis)讀取

              $crontab = file('./crontab');

              $now = $_SERVER['REQUEST_TIME'];

              foreach ( $crontab as $cron ) {

              $slices = preg_split("/[s]+/", $cron, 6);

              if( count($slices) !== 6 ) continue;

              $cmd = array_pop($slices);

              $cron_time = implode(' ', $slices);

              $next_time = Crontab::parse($cron_time, $now);

              if ( $next_time !== $now ) continue;

              $pid = pcntl_fork();

              if ($pid == -1) {

              die('could not fork');

              } else if ($pid) {

              // we are the parent

              pcntl_wait($status, WNOHANG); //Protect against Zombie children

              } else {

              // we are the child

              `$cmd`;

              exit;

              }

              }

              /* https://github.com/jkonieczny/PHP-Crontab */

              class Crontab {

              /**

              * Finds next execution time(stamp) parsin crontab syntax,

              * after given starting timestamp (or current time if ommited)

              *

              * @param string $_cron_string:

              *

              * 0 1 2 3 4

              * * * * * *

              * - - - - -

              * | | | | |

              * | | | | +----- day of week (0 - 6) (Sunday=0)

              * | | | +------- month (1 - 12)

              * | | +--------- day of month (1 - 31)

              * | +----------- hour (0 - 23)

              * +------------- min (0 - 59)

              * @param int $_after_timestamp timestamp [default=current timestamp]

              * @return int unix timestamp - next execution time will be greater

              * than given timestamp (defaults to the current timestamp)

              * @throws InvalidArgumentException

              */

              public static function parse($_cron_string,$_after_timestamp=null)

              {

              if(!preg_match('/^((*(/[0-9]+)?)|[0-9-,/]+)s+((*(/[0-9]+)?)|[0-9-,/]+)s+((*(/[0-9]+)?)|[0-9-,/]+)s+((*(/[0-9]+)?)|[0-9-,/]+)s+((*(/[0-9]+)?)|[0-9-,/]+)$/i',trim($_cron_string))){

              throw new InvalidArgumentException("Invalid cron string: ".$_cron_string);

              }

              if($_after_timestamp && !is_numeric($_after_timestamp)){

              throw new InvalidArgumentException("$_after_timestamp must be a valid unix timestamp ($_after_timestamp given)");

              }

              $cron = preg_split("/[s]+/i",trim($_cron_string));

              $start = empty($_after_timestamp)?time():$_after_timestamp;

              $date = array( 'minutes' =>self::_parseCronNumbers($cron[0],0,59),

              'hours' =>self::_parseCronNumbers($cron[1],0,23),

              'dom' =>self::_parseCronNumbers($cron[2],1,31),

              'month' =>self::_parseCronNumbers($cron[3],1,12),

              'dow' =>self::_parseCronNumbers($cron[4],0,6),

              );

              // limited to time()+366 - no need to check more than 1year ahead

              for($i=0;$i<=60*60*24*366;$i+=60){

              if( in_array(intval(date('j',$start+$i)),$date['dom']) &&

              in_array(intval(date('n',$start+$i)),$date['month']) &&

              in_array(intval(date('w',$start+$i)),$date['dow']) &&

              in_array(intval(date('G',$start+$i)),$date['hours']) &&

              in_array(intval(date('i',$start+$i)),$date['minutes'])

              ){

              return $start+$i;

              }

              }

              return null;

              }

              /**

              * get a single cron style notation and parse it into numeric value

              *

              * @param string $s cron string element

              * @param int $min minimum possible value

              * @param int $max maximum possible value

              * @return int parsed number

              */

              protected static function _parseCronNumbers($s,$min,$max)

              {

              $result = array();

              $v = explode(',',$s);

              foreach($v as $vv){

              $vvv = explode('/',$vv);

              $step = empty($vvv[1])?1:$vvv[1];

              $vvvv = explode('-',$vvv[0]);

              $_min = count($vvvv)==2?$vvvv[0]:($vvv[0]=='*'?$min:$vvv[0]);

              $_max = count($vvvv)==2?$vvvv[1]:($vvv[0]=='*'?$max:$vvv[0]);

              for($i=$_min;$i<=$_max;$i+=$step){

              $result[$i]=intval($i);

              }

              }

              ksort($result);

              return $result;

              }

              }

            【PHP中如何實現crontab代碼】相關文章:

            PHP中多態如何實現05-06

            php代碼如何實現命令行執行05-19

            PHP滾動日志的代碼實現05-17

            如何實現PHP靜態新聞列表自動生成代碼04-25

            如何在HTML中嵌入PHP代碼03-18

            php實現無限級分類實現代碼07-03

            PHP代碼如何規范02-13

            php的curl實現get和post的代碼07-07

            php進度條實現代碼04-05

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院