- 締切済み
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 ]; ※以下、必要な分だけ記述する。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- agehage
- ベストアンサー率22% (2752/12072)
何をお聞きになりたいか分かりかねるのですが。 コードを全部書いて欲しいということですか? 補足願います
補足
agehage 様 ご回答有難うございます。 また、ご指摘いただきました事、ごもっともでございます。 自分なりに集めた情報と要望を記載することで、完全に舞い上がっておりました。 >何をお聞きになりたいか分かりかねるのですが。 >コードを全部書いて欲しいということですか? 大変不躾だとは承知しておりますが、agehage様のご指摘通り、コードをご提示いただきたく存じます。 どうぞよろしくお願いいたします。