私は自分のバックアップクラスを運営しています。その中には、ユーザーが管理者であるかどうかを確認し、ユーザーがホームページにいるかどうかを確認し、バックアップディレクトリをスキャンして、ファイル作成のタイムスタンプを確認して、サイトが 1 日でバックアップされていないかどうかを確認するメンテナンス機能があります。ファイルまたはその不足が 1 日以上経過している状況が存在する場合、バックアップが開始され、ユーザーに通知されます。
これは、クラスに移植する前は正常に機能していました (途中で何かを台無しにしたかどうかはわかりません)。デバッグ目的で、いくつかのエコーなどを追加しました。
問題は、ディレクトリが空の場合 (つまり、バックアップが必要であるか、または$latest_filename
設定されていない場合)、メンテナンス スクリプトが何も実行しないことです。私のすべてのデバッグによりset
、ディレクトリが空であっても、後者の変数は常に評価されていると信じるようになりました。
if ($frontpage && checkAdmin()) {
$path = $this->dir_sql;
$latest_ctime = 0;
$latest_filename = '';
$d = dir($path);
while (false !== ($entry = $d->read())) {
$filepath = "{$path}/{$entry}";
// could do also other checks than just checking whether the entry is a file
if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
$latest_ctime = filectime($filepath);
$latest_filename = $entry;
echo $latest_filename;
echo $latest_ctime;
}
}
// check if latest backup is over a day old
// if it is create a new backup and run the regular
// maintenance scripts below
if (is_file($latest_filename) && date('d', filectime($latest_filename)) == date('d')) {
self::doBackup();
} elseif(!isset($latest_filename)) {
self::doBackup();
}
}
編集/更新:
if の前に追加
if (isDirEmpty($this->dir_sql)) {
self::doBackup();
}
し、一番下の elseif を削除しました。これでうまくいきましたが、それでも奇妙です。