У меня есть плагин WordPress с резервным скриптом, который выполняется по расписанию. Уловка, если кто-то несколько раз ударяет страницу, он может выполнить сценарий резервного копирования несколько раз. Любые мысли о том, как предотвратить множественные казни?Как я могу предотвратить выполнение PHP несколько раз?
global $bwpsoptions;
if (get_transient('bit51_bwps_backup') === false) {
set_transient('bit51_bwps_backup', '1', 300);
if ($bwpsoptions['backup_enabled'] == 1) {
$nextbackup = $bwpsoptions['backup_next']; //get next schedule
$lastbackup = $bwpsoptions['backup_last']; //get last backup
switch ($bwpsoptions['backup_interval']) { //schedule backup at appropriate time
case '0':
$next = 60 * 60 * $bwpsoptions['backup_time'];
break;
case '1':
$next = 60 * 60 * 24 * $bwpsoptions['backup_time'];
break;
case '2':
$next = 60 * 60 * 24 * 7 * $bwpsoptions['backup_time'];
break;
}
if (($lastbackup == '' || $nextbackup < time()) && get_transient('bit51_bwps_backup') === false) {
$bwpsoptions['backup_last'] = time();
if ($lastbackup == '') {
$bwpsoptions['backup_next'] = (time() + $next);
} else {
$bwpsoptions['backup_next'] = ($lastbackup + $next);
}
update_option($this->primarysettings, $bwpsoptions);
$this->execute_backup(); //execute backup
}
}
}
Установите поле в базе данных, указывающее время, и вычислите его так, чтобы, если разница между последним запуском сценария и текущим временем больше, чем 't', не запускайте скрипт. –
Где вы заполняете '$ bwpsoptions'? Если это не внешний источник, например база данных, файл, сеанс и т. Д., То он будет забыт при загрузке следующей страницы. –