PHP+CRONでのファイルバックアップ
お知恵をお貸しください。
PHP全くの初心者です。。。
PHPスクリプトとCRONで、定期的にWebサーバー内の複数ファイル(異なるdirにあるファイル)をバックアップ用に作成したdirにバックアップ、同時に世代管理をしたいと考えています。
検索したところ、目的に近い以下のスクリプト情報が見つかりました。
見つかったスクリプトのフローは、
・単純にファイルをコピーし、バックアップ先のdirへバックアップ、スクリプトの実行日を付加した名前へリネームして保存
・一定時間(例は20日以上としてます)経過した古いファイルを削除
という流れです。
このスクリプトを利用し、
バックアップファイルに関する設定部分(対象、保存先、経過時間)を分かり易く、また複数設定できるようにしたいと思っています。
動作環境は一般的なレンタルサーバー(さくらインターネットやXsever)でPHPのバージョンは、「PHP5.6.30」、「PHP7.0.16」、「PHP7.1.2」の3つのVerです。
※CRONでの実行は定刻に1日1回の予定です。
※バックアップ先となるdirは(操作権限を持つ同一アカウントの)レンタルサーバー(同じサーバー内)のdirです。
↓↓↓参考スクリプト↓↓↓
1)単純にファイルをコピー、リネームして保存
$dirHome = '/home/hogehoge/domain.com/public_html/csv/';
$date = date('Ymd');
if(copy($dirHome . 'test.csv', $dirHome .'backup/test.csv')){
echo 'test.csvをコピーしました。';
rename($dirHome . 'backup/test.csv', $dirHome .'backup/test'.$date.'.csv');
echo 'test.csvをリネームしました。';
} else {
echo 'test.csvをコピーできません!';
}
2)一定時間(20日以上)経過した古いファイルを削除
date_default_timezone_set('Asia/Tokyo');
$expire = strtotime("480 hours ago"); //20日前
$dir = dirname(__FILE__) . '/backup/';
$list = scandir($dir);
foreach($list as $value){
$file = $dir . $value;
if(!is_file($file)) continue;
$mod = filemtime( $file );
if($mod < $expire){
chmod($file, 0777);
unlink($file);
}
}
3)複数設定する場合に記述する設定内容例
※以下のようにバックアップ対象(target)、バックアップ先dir(bk_dir)、削除対象となる経過時間(expire)を、それぞれに設定するようにしたいと思っています。
$list = []; // 設定を格納する配列
// 設定1
$list[] = [
'target' => 'domain1.com/public_html/news/data.dat',
'bk_dir' => 'domain1.com/public_html/backup/news/',
'expire' => 480
];
// 設定2
$list[] = [
'target' => 'domain2.com/public_html/news/data.dat',
'bk_dir' => 'domain2.com/public_html/backup/news/',
'expire' => 480
];
※以下、必要な分だけ記述する。
よろしくお願いいたします。
補足
有り難う御座います。 売り切れとは凄いですね。