[PHP]特定の日付より前のファイルを自動で削除する
以前、さくらインターネットでのウェブ公開エリアのWWWディレクトリを自動でCRONを使ってバックアップする記事を書きました、その自動バックアップに一定日数経ったものは削除するように改良しようということで、PHPで特定の日付より前のものを自動で削除する方法です
PHPで特定の日付より前のファイルを削除する
まずは、特定の日ということで7日前の日をPHPで取得します。data()使って現在の日時を取得することができるのですが、こちらで引き算をすることで7日前を自動的に割り出してくれます。
$delet_day = date('Y-m-d',strtotime("- 6 day"));
data() の前半の部分は日付のフォーマットです、後に日時を比較するときに利用するための形にしています。strtotime() で – 6 day とすることで、6日前のさかのぼった日付を計算します。当日を入れると6日前の指定で、ちょうど7分のファイルが保持される。
次にディレクトリからファイルリストをストクします
$dir = opendir(/home/id/wwwbackup/); while (false !== ($file = readdir($dir))){ if($file[0] != "."){ if ($delet_day > $file) { unlink($dir.$file); } } } closedir($dir);
if ($delet_day > $file) で削除する期限とファイル名を照らしあわせてファイル名よりも期限が大きい(=期限の方が新しいのでファイルが期限よりも前のもの)場合にunlinkで指定パスにあるファイルを削除しています。
$fileにはファイル名が入ります。
ちなみにファイル名は 2015-02-10.zip といったようなファイル名が日付となるようにしてあるので。ファイル名で日付の比較が出来古いものを削除することが出来ます。ファイル名が日付ではない場合は、そのファイルが作成された日付を取得して比較して削除する方法が行えます。ファイルの作成日や更新日はファイルをコピーしたりした場合など変わってしまうことがあるので、信頼性にかけるので、もともとファイル名に日付をつけるようにしてあり、そのファイル名で比較しています。
ちなみにファイルの日付は
$file_time = date ("Y-m-d", filemtime(/home/id/wwwbackup/text.txt));
このようにして取得することができる。
COMMENT