【发布时间】:2012-03-18 18:04:08
【问题描述】:
我有一个带有按计划执行的备份脚本的 WordPress 插件。问题是,如果有人连续多次点击该页面,它可以多次执行备份脚本。关于如何防止多次处决有什么想法吗?
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?如果它不是来自外部来源,如数据库、文件、会话等,那么它将在下一页加载时被遗忘。