まず「ユーザーデータの書き込み(sub openoutuserdata)」の中に、
下記のオレンジ色のスクリプトを追加します。
# ------------------------- #
# Sub Open Out User Data
# ユーザーデータの書きこみ
# ------------------------- #
sub openoutuserdata {
&lock;
open(OUT,">$userdata") || &error("Can't write $userdata");
print OUT @new;
close(OUT);
$bfk = '.back'; # バックアップファイルの拡張子
$bfw = 4; # 毎週何曜日にバックアップを取るか(日曜:0 ~ 土曜:6)
$bfl = 30; # バックアップを保存しておく期間(日数)
# バックアップ用現在の日付取得
($bsec,$bmin,$bhour,$bday,$bmon,$byear,$bweek) = localtime(time);
$byear += 1900; $bmon++;
$bmon = sprintf("%.2d",$bmon);
$bday = sprintf("%.2d",$bday);
# 今日が設定した曜日かつ今日の日付のファイル名がまだなかったらバックアップ処理
if ($bweek == $bfw && !(-e "$byear$bmon$bday$bfk")) {
# 設定した日数経過しているバックアップファイルがあったら削除
opendir(DIR,".");
@bff = readdir(DIR);
closedir(DIR);
foreach (@bff) {
if ($_ =~ /$bfk/) {
if ((-M "$_") > $bfl) {
unlink($_);
}
}
}
# バックアップ保存
open(OUT,"> $byear$bmon$bday$bfk") || &error("Can't write Backupfile");
print OUT @new;
close(OUT);
}
&unlock;
}
|
そして、追加した部分の最初の方にある3行の設定を変更します。
1行目は、バックアップファイルの拡張子の設定です。
拡張子がわかってしまうと、
そのファイルに直接アクセスすることが出来てしまう場合がありますので、
できるだけ他の文字列に変更してください。
2行目は、毎週何曜日にバックアップを取るかの設定です。
日曜日なら「0」、月曜日なら「1」、火曜日なら「2」、…、土曜日なら「6」という具合に、
曜日に対応する数字で設定してください。
3行目は、そのバックアップファイルを何日間保存しておくかの設定です。
30日に設定しますと、5~6週分のバックアップが常にサーバにあることになりますので、
サーバ容量が少ない方は短めに設定してください。
バックアップファイルは、pet.cgiが置いてあるディレクトリの中に自動で作成されます。
そのため、pet.cgiが入っているディレクトリのパーミッションを、
「777(707)」に変更する必要があります。
バックアップファイルの作成が上手く行かない場合は、ここを確認してみてください。
バックアップファイルの名前は、「日付.設定した拡張子」になっています。
ユーザーデータが消えてしまったり、壊れてしまったりしましたら、
ユーザーデータのファイルを一度削除して、
正常だった日付のバックアップファイルの名前を、ユーザーデータのファイルの名前に変更します。
バックアップを毎日取りたい、という方は、
# 今日が設定した曜日かつ今日の日付のファイル名がまだなかったらバックアップ処理
if ($bweek == $bfw && !(-e "$byear$bmon$bday$bfk")) {
|
この条件式を変更することで可能になります。
条件式前半の「$bweek == $bfw && 」を削除して、
# 今日が設定した曜日かつ今日の日付のファイル名がまだなかったらバックアップ処理
if (!(-e "$byear$bmon$bday$bfk")) {
|
とすると、バックアップを毎日取るようになります。
が、バックアップの保存期間を30日などにしてしまうと、
ユーザーデータのバックアップがサーバに30個出来てしまうことになりますので、
3~7日など、比較的短い周期にしてください。
まず、元々入っている「半自動バックアップ」を無効にします。
スクリプトの最初の方にある「▼主な設定はここから▼」の少し下に、
$editor = 'オーナー'; # オーナーさんが遊ぶときの名前(半自動バックアップ用)要変更
|
という行がありますので、ここの設定を、
$editor = ''; # オーナーさんが遊ぶときの名前(半自動バックアップ用)要変更
|
このように、名前がない状態にします。これで無効になります。
次に「ユーザーデータの書き込み(sub openoutuserdata)」の中に、
下記のオレンジ色のスクリプトを追加します。
# ------------------------- #
# Sub Open Out User Data
# ユーザーデータの書きこみ
# ------------------------- #
sub openoutuserdata {
# 以下変更(a02-02)
if ($FORM{'name'} eq $editor) {
open(BACK,"$bufile2") || &error("Can't Open BackUpFile");
@back3 = <BACK>;
close(BACK);
open(BACK,"> $bufile3") || &error("Can't Write BackUpFile");
print BACK @back3;
close(BACK);
open(BACK,"$bufile1") || &error("Can't Open BackUpFile");
@back2 = <BACK>;
close(BACK);
open(BACK,"> $bufile2") || &error("Can't Write BackUpFile");
print BACK @back2;
close(BACK);
open(USER_FH,"$userdata") || &error("Can't open Userdata");
eval { flock(USER_FH,1); };
@back1 = <USER_FH>;
close(USER_FH);
open(BACK,"> $bufile1") || &error("Can't Write BackUpFile");
print BACK @back1;
close(BACK);
}
open(USER_FH,"+< $userdata") || &error("Can't write Userdata");
eval { flock(USER_FH,2); };
seek(USER_FH,0,0);
print USER_FH @new;
truncate(USER_FH,tell(USER_FH));
close(USER_FH);
$bfk = '.back'; # バックアップファイルの拡張子
$bfw = 4; # 毎週何曜日にバックアップを取るか(日曜:0 ~ 土曜:6)
$bfl = 30; # バックアップを保存しておく期間(日数)
# バックアップ用現在の日付取得
($bsec,$bmin,$bhour,$bday,$bmon,$byear,$bweek) = localtime(time);
$byear += 1900; $bmon++;
$bmon = sprintf("%.2d",$bmon);
$bday = sprintf("%.2d",$bday);
# 今日が設定した曜日かつ今日の日付のファイル名がまだなかったらバックアップ処理
if ($bweek == $bfw && !(-e "$byear$bmon$bday$bfk")) {
# 設定した日数経過しているバックアップファイルがあったら削除
opendir(DIR,".");
@bff = readdir(DIR);
closedir(DIR);
foreach (@bff) {
if ($_ =~ /$bfk/) {
if ((-M "$_") > $bfl) {
unlink($_);
}
}
}
# バックアップ保存
open(BACK_FH,"> $byear$bmon$bday$bfk") || &error("Can't write Backupfile");
eval { flock(BACK_FH,2); };
print BACK_FH @new;
close(BACK_FH);
}
}
|
そして、追加した部分の最初の方にある3行の設定を変更します。
1行目は、バックアップファイルの拡張子の設定です。
拡張子がわかってしまうと、
そのファイルに直接アクセスすることが出来てしまう場合がありますので、
できるだけ他の文字列に変更してください。
2行目は、毎週何曜日にバックアップを取るかの設定です。
日曜日なら「0」、月曜日なら「1」、火曜日なら「2」、…、土曜日なら「6」という具合に、
曜日に対応する数字で設定してください。
3行目は、そのバックアップファイルを何日間保存しておくかの設定です。
30日に設定しますと、5~6週分のバックアップが常にサーバにあることになりますので、
サーバ容量が少ない方は短めに設定してください。
バックアップファイルは、pet.cgiが置いてあるディレクトリの中に自動で作成されます。
そのため、pet.cgiが入っているディレクトリのパーミッションを、
「777(707)」に変更する必要があります。
バックアップファイルの作成が上手く行かない場合は、ここを確認してみてください。
バックアップファイルの名前は、「日付.設定した拡張子」になっています。
ユーザーデータが消えてしまったり、壊れてしまったりしましたら、
ユーザーデータのファイルを一度削除して、
正常だった日付のバックアップファイルの名前を、ユーザーデータのファイルの名前に変更します。
半自動バックアップで使用していたバックアップ用のファイルは、
この改造を施すことで必要なくなりますので、
サーバから削除していただいて構いません。
バックアップを毎日取りたい、という方は、
# 今日が設定した曜日かつ今日の日付のファイル名がまだなかったらバックアップ処理
if ($bweek == $bfw && !(-e "$byear$bmon$bday$bfk")) {
|
この条件式を変更することで可能になります。
条件式前半の「$bweek == $bfw && 」を削除して、
# 今日が設定した曜日かつ今日の日付のファイル名がまだなかったらバックアップ処理
if (!(-e "$byear$bmon$bday$bfk")) {
|
とすると、バックアップを毎日取るようになります。
が、バックアップの保存期間を30日などにしてしまうと、
ユーザーデータのバックアップがサーバに30個出来てしまうことになりますので、
3~7日など、比較的短い周期にしてください。