개발-PHP

[함수] crontab 스케쥴링 함수 알고리즘 한번 만들어보았어요 - +

WEBKIKIS 2016. 3. 30. 20:51
반응형

[함수] crontab 스케쥴링 함수 알고리즘 한번 만들어보았어요 - +


<?

  var_dump(decode_crontab($argv[1], $argv[2]));

  # 크론탭에 공식을 적용하여 배열로 돌려줍니다.
  function decode_crontab($data, $column) {
    if ($data != '*') {
      $dataArr = explode(',', $data);
      if (count($dataArr) > 1) {
        foreach ($dataArr as $v1) {
          $a = explode('/', $v1);
          if (count($a) > 1) {
            $b = explode('-', $a[0]);
            for ($i=$b[0]; $i<=$b[1]; $i++) {
              if ($i%$a[1] == 0) {
                $i2 = str_pad($i, 2, '0', STR_PAD_LEFT);
                $result[$i2] = $i2;
              }
            }
          } else {
            $b = explode('-', $v1);
            if (count($b) > 1) {
              for ($i=$b[0]; $i<=$b[1]; $i++) {
                $i2 = str_pad($i, 2, '0', STR_PAD_LEFT);
                $result[$i2] = $i2;
              }
            } else {
              $v2 = str_pad($v1, 2, '0', STR_PAD_LEFT);
              $result[$v2] = $v2;
            }
          }
        }
      } else {
        $dataArr = explode('-', $data);
        if (count($dataArr) > 1) {
          $a = explode('/', $dataArr[1]);
          if (count($a) > 1) {
            for ($i=$dataArr[0]; $i<=$a[0]; $i++) {
              if ($i%$a[1] == 0) {
                $i2 = str_pad($i, 2, '0', STR_PAD_LEFT);
                $result[$i2] = $i2;
              }
            }
          } else {
            for ($i=$dataArr[0]; $i<=$dataArr[1]; $i++) {
              $i2 = str_pad($i, 2, '0', STR_PAD_LEFT);
              $result[$i2] = $i2;
            }
          }
        } else {
          $dataArr = explode('/', $data);
          if (count($dataArr) > 1) {
            $columnArr = array('min', 'hour', 'day', 'month', 'week');
            $maxValueArr = array(
              'min' => array('s' => 0, 'e' => 59)
              , 'hour' => array('s' => 0, 'e' => 23)
              , 'day' => array('s' => 0, 'e' => 31)
              , 'month' => array('s' => 1, 'e' => 12)
              , 'week' => array('s' => 0, 'e' => 6)
            );
            for ($i = $maxValueArr[$column]['s']; $i <= $maxValueArr[$column]['e']; $i++) {
              if ($i%$dataArr[1] == 0) {
                $i2 = str_pad($i, 2, '0', STR_PAD_LEFT);
                $result[$i2] = $i2;
              }
            }
          } else {
            $data2 = str_pad($data, 2, '0', STR_PAD_LEFT);
            $result[$data2] = $data2;
          }
        }
      }
    } else {
      $result[$data] = $data;
    }

    return $result;
  }

?>

1. php 파일.php 1 min
2. php 파일.php 1-10 min
3. php 파일.php 1,2,3 min
4. php 파일.php 1-10/3 min
5. php 파일.php 1,2-10/2,15 min

조건은 if (! in_array('*', $result) AND ! in_array($this->today[$column], $result)) { 이런식 - +
쿄쿅 - +

스케쥴링중에 제일 개발자스럽고 편한것 같은데 소스가 없길래 혹시나 필요한분이 계시면 가져다 쓰시라고
올려놓아요 ~* 편히 갖다 쓰세요.


출처 phpschool

반응형