这篇文章主要介绍了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
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'])

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

드림위버 CS6
시각적 웹 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
