- 追加された行はこの色です。
- 削除された行はこの色です。
**少しだけ荒らしに強いバックアップ [#cdd8971e]
バックアップを荒らしに強くするためにはバックアップサイクル($cycle)を短くし保存世代($maxage)を多く取る事で対応できますが、反面バックアップがディスクを圧迫したり長い目で見た変更履歴を分かりにくくする事が問題になります。~
これを両立させる一つの解決策を提案します。
**変更されるバックアップ仕様 [#k79574ee]
バックアップが行なわれるタイミング
-$cycleで設定した時間を経過後にページの変更をした場合(従来通り)
-$cycleの設定に関らず、ページ内容に変更や削除((差分で赤い行が存在する場合です。内容の追加だけが行なわれたり、改行のみの行が消された時は該当しません。))が加えられた場合(新設)
バックアップの保存処理
-$force_backupで設定した時間までは、$maxageの制限を越えてバックアップを保存
-$force_backupで設定した時間を超えたバックアップは、バックアップ処理が行われる時に$cycleの保存間隔に従って自動削除される&br;&color(blue){''注意:過去にバックアップサイクルを短く設定していた場合、この処理で過去のバックアップが削除される可能性があります''};
バックアップ履歴のイメージ
-バックアップ一覧
---hogehoge のバックアップを削除
---1 (2005-07-01 06:54:06 (金)) [ 差分 | 現在との差分 | ソース ] &color(blue){----↑過去};
---2 (2005-07-02 05:54:04 (土)) [ 差分 | 現在との差分 | ソース ] &color(blue){ $cycle時間より大きい間隔で};
---3 (2005-07-02 09:05:36 (土)) [ 差分 | 現在との差分 | ソース ] &color(blue){ $maxage個のバックアップを保存};
---4 (2005-07-02 12:09:52 (土)) [ 差分 | 現在との差分 | ソース ] &color(blue){----$force_backupの設定時間};
---5 (2005-07-02 12:18:32 (土)) [ 差分 | 現在との差分 | ソース ] &color(blue){ $maxage,$cycleと無関係に};
---6 (2005-07-02 12:25:18 (土)) [ 差分 | 現在との差分 | ソース ] &color(blue){ 変更・削除((差分で赤い行が存在する場合です。内容の追加だけが行なわれたり、改行のみの行が消された時は該当しません。))があったら保存};
---7 (2005-07-02 12:25:56 (土)) [ 差分 | 現在との差分 | ソース ] &color(blue){----↓現在};
**差分((1.4.5_1ベース)) [#j48d689a]
--- pukiwiki.ini.org.php Mon Feb 07 13:22:40 2005
+++ pukiwiki.ini.php Sat Jul 02 10:09:46 2005
@@ -269,6 +269,9 @@
$cycle = 3; // Wait N hours between backup (0 = no wait)
$maxage = 120; // Stock latest N backups
+// 削除行が存在する時の強制バックアップを保存する時間(0:この機能を無効にする)
+$force_backup = 24;
+
// NOTE: $cycle x $maxage / 24 = Minimum days to lost your data
// 3 x 120 / 24 = 15
--- file.org.php Sat Jan 29 13:29:34 2005
+++ file.php Sat Jul 02 09:31:32 2005
@@ -38,7 +38,8 @@
file_write(DIFF_DIR, $page, $diffdata);
// Create backup
- make_backup($page, $postdata == ''); // Is $postdata null?
+ $is_corrected = preg_match('/^-/m', $diffdata);
+ make_backup($page, $postdata == '', $is_corrected); // Is $postdata null?
// Create wiki text
file_write(DATA_DIR, $page, $postdata, $notimestamp);
--- backup.org.php Sat Jan 29 13:40:40 2005
+++ backup.php Sat Jul 02 08:59:12 2005
@@ -25,10 +25,11 @@
* @return Void
*/
-function make_backup($page, $delete = FALSE)
+function make_backup($page, $delete = FALSE, $is_corrected)
{
global $cycle, $maxage;
global $do_backup, $del_backup;
+ global $force_backup;
if (PKWK_READONLY || ! $do_backup) return;
@@ -40,10 +41,26 @@
if (! is_page($page)) return;
$lastmod = _backup_get_filetime($page);
- if ($lastmod == 0 || UTIME - $lastmod > 60 * 60 * $cycle)
+ if ($lastmod == 0 || UTIME - $lastmod > 60 * 60 * $cycle ||
+ ($force_backup != 0 && $is_corrected && UTIME > $lastmod))
{
$backups = get_backup($page);
- $count = count($backups) + 1;
+
+ if($force_backup == 0){
+ $count = count($backups) + 1;
+ }else{
+ $count = $prev_time = 0;
+ foreach($backups as $age=>$data){
+ if(UTIME - $data['time'] <= 3600 * $force_backup)
+ break;
+ if($data['time'] - $prev_time <= 3600 * $cycle){
+ unset($backups[$age]);
+ }else{
+ $count++;
+ $prev_time = $data['time'];
+ }
+ }
+ }
// 直後に1件追加するので、(最大件数 - 1)を超える要素を捨てる
if ($count > $maxage)
**コメント [#n72a5c39]
-もっと良い方法はあると思いますがとりあえず提案させて頂きました。これでしばらく静かにしていようと思います。失礼しました。 -- [[Cue]] &new{2005-07-02 (土) 14:39:10};
#comment