我有一個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',則不要運行腳本。 – 2012-03-18 18:05:40
你在哪裏填充'$ bwpsoptions'?如果它不是來自外部來源,如數據庫,文件,會話等,那麼它將在下一頁加載時被遺忘。 – 2012-03-18 18:08:48