我有一个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