Предотвращение выполнения кода или функции более одного раза - PullRequest
0 голосов
/ 14 ноября 2011

Есть ли способ предотвратить многократный запуск блока кода или функции в коде, даже если я повторно выполню (или перезагрузлю) файл PHP?

Я имею в виду, могу ли я ограничитькто-то от выполнения сценария php более одного раза?Я не могу найти способ сделать это.

Ответы [ 4 ]

2 голосов
/ 14 ноября 2011

Если вы используете сеансы, вы можете установить флаг в массиве сеансов пользователя после выполнения кода:

function doSomething(){

   if (empty($_SESSION['completed'])){
      //Do stuff here if it has not been executed.
   }

   $_SESSION['completed'] = TRUE;
}

Вам также следует проверить переменную sesison, чтобы увидеть, была ли задача выполнена ранее. Это предполагает, что пользователь может принять сеансовый cookie.

2 голосов
/ 14 ноября 2011

Да, вы можете использовать переменную $ _SESSION, чтобы определить, был ли выполнен код.Переменная сессии будет установлена, пока пользователь не закроет свой браузер.Если вы хотите расширить его дальше, вы можете установить cookie.Для получения более подробной информации см. Следующие ссылки.

Переменные сеанса

Cookies

1 голос
/ 14 ноября 2011

У меня есть приложение, которое делает это.

Мы создали таблицу в базе данных с названием version и сохранили там номер версии.Когда скрипт запускается, он сравнивает номер версии в базе данных с номером в скрипте php.И выполните все необходимое для «обновления» его до новой версии, а затем обновите номер версии в базе данных.

Конечно, если таблица версий не существует, код создаст ее и отметит еев качестве версии хранения ноль.

1 голос
/ 14 ноября 2011

Просто установите счетчик в функцию. Если счетчик больше 0, тогда ничего не делайте. Переменная counter должна быть статической, чтобы она «запоминалась» при нескольких вызовах.

function sample() {
     static $call_counter = 0;
     if ( $call_counter>0 ) {
         return;
     }
     ...
     $call_counter++;
 }

Что касается проверки того, что файл выполняется только один раз, просто используйте include_once () вместо include ().

...