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

PHP小技

自動でどんどこ増えるファイルは一定期間で消したい

ログファイルとかあるディレクトリにおいて、一定時間経過したファイルは全て消してしまいたいとする。
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);

『.log』ファイル系だけ消す

先のソースから1行目消して、6行目を書き換えると『.log』ファイル系だけ消す処理になる。

$image_make_path = "対象ディレクトリの絶対パス";
$dir = opendir($image_make_path);
while($fn=readdir($dir)){
   // 『log』が含まれたものだけ
   if(!preg_match('/.+(\.(log))$/i', $fn){
     continue;
   }
   // 今の例として保持期限1時間(3600秒)
   if(time() - filectime($image_make_path."{$fn}") > 3600){
      @unlink($image_make_path."{$fn}");
   }
}
closedir($dir);
filectime()は『作成してからの時間』というよりは
『そのディレクトリ内に現れてからの時間』
サーバに結構負荷かかる処理なので、X万件とかあまりに大量にやることはオススメしない。

コメント

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