一定時間経過したファイルを削除する

ログファイルとかあるディレクトリにおいて、一定時間経過したファイルは全て消してしまいたいとする。

cronで使うのも有りだが、作成した処理内のどこかに組み込んでおけばアクセスする都度に消えてくれるので便利。

下記は対象ファイル以外は全て消す。

$targets = ['.','..','.svn','.git']; // 除外するファイル
$image_make_path = "対象ディレクトリの絶対パス";
$dir = opendir($image_make_path);
while($fn=readdir($dir)){
	// 『.』やら『.svn』等の場合は処理せず次へ
	if(in_array($fn,$targets)){
 		continue;
	}

 	// 今の例として保持期限1時間(3600秒)
 	if(time() - filectime($image_make_path."{$fn}") > 3600){
 		@unlink($image_make_path."{$fn}");
 	}
 }
 closedir($dir);

これを1行目消して、6行目を下記のように書き換えると『.log』ファイル系だけ消す処理になる。

if(!preg_match('/.+(\.(log))$/i', $fn){

※注意※
filectime()は、
『作成してからの時間』というよりは
『そのディレクトリ内に現れてからの時間』

あとサーバに結構負荷かかる処理なので、X万件とかあまりに大量にやることはオススメしない。

コメント

タイトルとURLをコピーしました