中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在php中使用cron定時任務執行器

發布時間:2021-03-05 15:19:06 來源:億速云 閱讀:422 作者:Leah 欄目:開發技術

這篇文章給大家介紹如何在php中使用cron定時任務執行器,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

php有什么用

php是一個嵌套的縮寫名稱,是英文超級文本預處理語言,它的語法混合了C、Java、Perl以及php自創新的語法,主要用來做網站開發,許多小型網站都用php開發,因為php是開源的,從而使得php經久不衰。

一、配置文件:

配置文件是用來返回要執行的定時任務文件,注意一下*的使用就行了,有兩個模式,就是

Y-m-d H:i        :年 月 日 時 分
N H:i            :星期(1 - 7|周一 - 周日) 時 分

配置文件croning.php如下:

/**
 * 任務管理器配置文件
 * 
 * Y-m-d H:i    :年 月 日 時 分
 * N H:i      :星期(1 - 7|周一 - 周日) 時 分
 * 
 * 2013-12-25 19:49 : 固定時間,只執行一次
 * *-12-25 20:00  : 每年的某月某日 某小時某分
 * 2013-12-25 *:49 : 某天的每個小時的49分都執行一次
 * *-*-* 20:00   : 每天晚上8點0分執行
 * *-*-* *:*    :每分鐘都在執行
 * 2 20:01     :每周二的20:01時間都執行一次
 * 
 * * 號表示當前位置的任何時間。以此類推....
 * 
 * 格式:
 * array(
 *   key=>value,
 * );
 * 
 * 說明:
 * key是定義的執行時間,value是執行的文件,可以是數組或者字符串,當同一時間有多個任務執行時,為了避免key的覆蓋請用一維數組模式。
 * 
 */
return array(
  '2013-12-25 19:49'=>'123.php',
  '2013-12-* 18:00'=>'456.php',
  '1 08:00'=>'6546.php',
  '*-12-25 19:49'=>array('444.php','456.php')
);

二、服務器cronjob主要執行的php文件:

該php文件主要處理與分析哪些文件是當時可以執行的。以及寫入執行記錄文件。

<?php
/**
 * cron任務統一執行的文件,沒有超時
 */
header('Content-Type:text/html; charset=utf-8');
set_time_limit(0);
define('APP_ROOT', dirname(__FILE__));
define('AHA_ROOT', dirname(APP_ROOT));
define('CORE_ROOT', AHA_ROOT . '/__core');
define('DATA_ROOT', AHA_ROOT . '/data');
define('MODEL_ROOT', APP_ROOT . '/model');
define('ONING_ROOT', APP_ROOT . '/oning'); //定時執行文件目錄
require CORE_ROOT . '/Common.php';
require CORE_ROOT . '/AHA.php'; //載入框架核心文件
spl_autoload_register(array('Common', 'loadClassFile'));
AHA::initConfig(include APP_ROOT . '/_config/inc.php'); //載入配置文件
//不存在執行的配置文件時
if (!file_exists(APP_ROOT . '/_config/croning.php')) {
  exit('cron failed,please check the cron config!');
}

$__all = include APP_ROOT . '/_config/croning.php';
//數據不合法時
if (!$__all || !is_array($__all)) {
  exit('cron failed,please check the cron config!');
}

$__echo = true; //是否輸出到屏幕

$__time_star = microtime(true);
$__now = time();

Common::fileLog(DATA_ROOT . '/log/cron_index.log', '執行cron開始******************************' . date('Y-m-d H:i:s', $__now) . '******************************', $__echo);

$__onFile = array();
if ($__all) {
  foreach ($__all as $__key => $__value) {
    if (strpos($__key, '-') === false) {//每周的處理
      preg_match('@^([\d\*]+) ([\d\*]+):([\d\*]+)$@U', $__key, $match);
    } else {//正常的處理
      preg_match('@^([\d\*]+)\-([\d\*]+)\-([\d\*]+) ([\d\*]+):([\d\*]+)$@U', $__key, $match);
    }
    if ($match) {
      array_shift($match);
      if (__getPreg($match, $__now)) {//是否是要執行的文件
        $__onFile = array_merge($__onFile, is_array($__value) ? $__value : array($__value));
      }
    }
  }
}
if ($__onFile) {
  $__onFile = array_unique($__onFile);
  foreach ($__onFile as $__value) {
    if (file_exists(ONING_ROOT . '/' . $__value)) {
      $__time_star2 = microtime(true);
      Common::fileLog(DATA_ROOT . '/log/cron_index.log', $__value . ' 執行開始----------' . date('Y-m-d H:i:s') . '-----------', $__echo);
      include ONING_ROOT . '/' . $__value;
      Common::fileLog(DATA_ROOT . '/log/cron_index.log', $__value . ' 執行結束(花費時間:' . ((microtime(true) - $__time_star2) * 1000) . 'ms)-------------', $__echo);
    }
  }
}
Common::fileLog(DATA_ROOT . '/log/cron_index.log', '執行cron結束(一共執行時間:' . ((microtime(true) - $__time_star) * 1000) . 'ms)*************' . date('Y-m-d H:i:s') . '*****************' . "\n\n", $__echo);

/**
 * 處理正則結果并返回該文件是否是當時要執行
 * @param array $match   正則結果,數組
 * @param integer $__now  當時時間戳
 * @return bool
 */
function __getPreg($match, $__now) {
  $back = false;
  list($__Y, $__m, $__d, $__N, $__H, $__i) = explode('-', date('Y-m-d-N-H-i', $__now));
  $argc = count($match);
  if ($argc === 3) {
    $argc = $match[0] === '*' ? $__N : $match[0];
    $argc.=' ';
    $argc.=$match[1] === '*' ? $__H : $match[1];
    $argc.=':';
    $argc.=$match[2] === '*' ? $__i : $match[2];
    $back = date('N H:i', $__now) === date($argc, $__now) ? true : false;
  } elseif ($argc === 5) {
    $argc = $match[0] === '*' ? $__Y : $match[0];
    $argc.='-';
    $argc.=$match[1] === '*' ? $__m : $match[1];
    $argc.='-';
    $argc.=$match[2] === '*' ? $__d : $match[2];
    $argc.=' ';
    $argc.=$match[3] === '*' ? $__H : $match[3];
    $argc.=':';
    $argc.=$match[4] === '*' ? $__i : $match[4];
    $back = date('Y-m-d H:i', $__now) === date($argc, $__now) ? true : false;
  }
  return $back;
}

關于如何在php中使用cron定時任務執行器就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦县| 瑞金市| 克山县| 玉林市| 高州市| 罗田县| 汤阴县| 新晃| 高尔夫| 丁青县| 临桂县| 四平市| 赫章县| 庆安县| 新密市| 威信县| 无极县| 仙居县| 长岛县| 青岛市| 罗江县| 定安县| 神池县| 张北县| 旅游| 班戈县| 南宁市| 醴陵市| 平湖市| 弋阳县| 图们市| 永年县| 自治县| 蒙山县| 铁岭县| 秦安县| 缙云县| 富宁县| 泊头市| 博兴县| 思茅市|