Validating Crontab Entries with PHP

后端 未结 7 1151
青春惊慌失措
青春惊慌失措 2020-11-29 05:43

What is the best way to validate a crontab entry with PHP? Should I be using a regex, or an external library? I\'ve got a PHP script that adds/removes entries from a crontab

7条回答
  •  悲&欢浪女
    2020-11-29 06:17

    Thanks to Jordi Salvat i Alabart and ph4r05.

    I have small modified existing solution posted on php. Perl alternative to generate regex:

    sub _BuildRegex {
        my $number = {
                'min'   =>      '[0-5]?\d',
                'hour'  =>      '[01]?\d|2[0-3]',
                'day'   =>      '0?[1-9]|[12]\d|3[01]',
                'month' =>      '[1-9]|1[012]',
                'dow'   =>      '[0-6]'
        };
    
        my $field_re = {};
        foreach my $nmb ( qw/min hour day month dow/ ) {
                my $range = "(?:$number->{$nmb})(?:-(?:$number->{$nmb})(?:\\/\\d+)?)?";
                $field_re->{$nmb} = "\\*(?:\\/\\d+)?|$range(?:,$range)*";
        }
    
        $field_re->{'month'} .='|[jJ]an|[fF]eb|[mM]ar|[aA]pr|[mM]ay|[jJ]un|[jJ]ul|[aA]ug|[sS]ep|[oO]ct|[nN]ov|[dD]ec';
        $field_re->{'dow'} .= '|[mM]on|[tT]ue|[wW]ed|[tT]hu|[fF]ri|[sS]at|[sS]un';
    
        my $ff = [];
        push @$ff, $field_re->{$_} foreach ( qw/min hour day month dow/ );
    
        my $fields_req = '(' . join(')\s+(', @$ff) . ')';
    
        my $replacements = '@reboot|@yearly|@annually|@monthly|@weekly|@daily|@midnight|@hourly';
    
        return '^\s*(' .
             '$' .
             '|#' .
             '|\w+\s*=' .
             "|$fields_req\\s+" .
             "|($replacements)\\s+" .
             ')' .
             '([^\\s]+)\\s+' .
             '(.*)$';
    }
    

提交回复
热议问题