欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

php語言

PHP中如何實現(xiàn)crontab代碼

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

PHP中如何實現(xiàn)crontab代碼

  PHP是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域。下面,小編為大家搜索整理了PHP中如何實現(xiàn)crontab代碼,希望能給大家?guī)韼椭?更多精彩內(nèi)容請及時關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

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

  代碼如下:

  # m h dom mon dow command

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

  2. crontab -e 將此cron.php腳本加入系統(tǒng)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中如何實現(xiàn)crontab代碼】相關(guān)文章:

PHP中多態(tài)如何實現(xiàn)05-06

php代碼如何實現(xiàn)命令行執(zhí)行05-19

PHP滾動日志的代碼實現(xiàn)05-17

如何實現(xiàn)PHP靜態(tài)新聞列表自動生成代碼04-25

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

php實現(xiàn)無限級分類實現(xiàn)代碼07-03

PHP代碼如何規(guī)范02-13

php的curl實現(xiàn)get和post的代碼07-07

php進度條實現(xiàn)代碼04-05