getMessage(); } return $arr_cron; } /** * 解析crontab时间计划里一个部分(分、时、日、月、周)的取值列表 * @param string $part 时间计划里的一个部分,被空格分隔后的一个部分 * @param int $f_min 此部分的最小取值 * @param int $f_max 此部分的最大取值 * * @return array 若为空数组则表示可任意取值 * @throws Exception */ static protected function parse_cron_part($part, $f_min, $f_max) { $list = array(); //处理"," -- 列表 if (false !== strpos($part, ',')) { $arr = explode(',', $part); foreach ($arr as $v) { $tmp = self::parse_cron_part($v, $f_min, $f_max); $list = array_merge($list, $tmp); } return $list; } //处理"/" -- 间隔 $tmp = explode('/', $part); $part = $tmp[0]; $step = isset($tmp[1]) ? $tmp[1] : 1; //处理"-" -- 范围 if (false !== strpos($part, '-')) { list($min, $max) = explode('-', $part); if ($min > $max) { throw new Exception('使用"-"设置范围时,左不能大于右'); } } elseif ('*' == $part) { $min = $f_min; $max = $f_max; } else {//数字 $min = $max = $part; } //空数组表示可以任意值 if ($min == $f_min && $max == $f_max && $step == 1) { return $list; } //越界判断 if ($min < $f_min || $max > $f_max) { throw new Exception('数值越界。应该:分0-59,时0-59,日1-31,月1-12,周0-6'); } return $max - $min > $step ? range($min, $max, $step) : array((int) $min); } }