Как запустить php файл всего 10 раз в день без cron? - PullRequest
1 голос
/ 15 мая 2019

Я новичок в php, поэтому, пожалуйста, не забывайте, если это простой вопрос.У меня есть PHP-скрипт, я хочу, чтобы он выполнялся только 10 раз в день и не более того.Я не хочу использовать cron для этого.Есть ли способ сделать это только в php?

Сейчас я установил счетчик, который увеличивается на единицу каждый раз, когда любой запускает скрипт, и зацикливает его только в 10 раз.если он превышает его, он показывает сообщение об ошибке.

function limit_run_times(){
    $counter = 1;
    $file = 'counter.txt';
    if(file_exists($file)){
         $counter += file_get_contents($file);
    }
    file_put_contents($file,$counter);
    if($counter > 11 ){
        die("limit is exceeded!");
    }
}

Я хочу какой-то эффективный способ сделать это, так что каждый день сценарий выполняется только 10 раз, и это применимо для повседневной, то есть этот счетчик обновляется до 0каждый день или есть какой-либо другой эффективный метод.

1 Ответ

1 голос
/ 15 мая 2019

Я бы порекомендовал вместо этого использовать базу данных - она ​​чище и проще в обслуживании.

Однако, это возможно и с обработкой файлов.Файл будет иметь формат 2019-05-15 1 (разделенный табуляцией \t).Извлеките содержимое файла и разделите значения на explode().Затем сделайте свои сравнения и проверки и верните значения соответственно.

function limit_run_times() {
    // Variable declarations
    $fileName = 'my_log.txt';
    $dailyLimit = 10;
    $content = file_get_contents($fileName);
    $parts = explode("\t", $content);
    $date = $parts[0];
    $counter = $parts[1] + 1;

    // Check the counter - if its higher than 10 on this date, return false
    if ($counter > $dailyLimit && date("Y-m-d") === $date) {
        die("Daily executing limit ($dailyLimit) exceeded! Please try again tomorrow.");
    }

    // We only get here if the count is $dailyLimit or less
    // Check if the date is today, if so increment the counter by 1
    // Else set the new date and reset the counter to 1 (as it is executed now)
    if (date("Y-m-d") !== $date) {
        $counter = 1;
        $date = date("Y-m-d");
    }
    file_put_contents($fileName, $date."\t".$counter);
    return true;
}
...