• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpでのログファイル自動削除について)

phpでのログファイル自動削除について

このQ&Aのポイント
  • phpでログファイルを自動削除する方法を教えてください。
  • 日付をファイル名に含めて保存しているログファイルを、一定期間経過した古いファイルを自動で削除したいです。
  • 削除プログラムはcronのwgetを使って呼び出す予定です。どのように記述すればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

<?php //まずベースとなるディレクトリ名を設定します。 //定数「__FILE__」を使うと自分自身のフルパスを返してくれるので、 //自分自身+ログのおいてあるディレクトリをまず設定 $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR; //スクリプト動作時間から、3日前を設定 //strtotime関数は非常に便利です。 $time = strtotime("-3 day", time()); //glob関数にて、そのディレクトリの中の、特定のファイルを取得し //foreachでまわす。glob関数はワイルドカードを指定できるので便利 foreach(glob($dir."*.dat") as $data){ //$dataには、ファイルのフルパスが代入されてますので、 //basename関数でファイル名のみを取得しておきます。 $fname = basename($data); //ファイル名の規則にしたがって、正規表現の後方参照で //必要箇所を抜き出します。 if(preg_match("/^[^_]+_([0-9]{8})_[^_]+/", $fname, $match)){ //たとえば、「20100910」といった文字であれば、 //strtotime関数は日付として認識してくれますので、 //タイムスタンプに変換。 $ts = strtotime($match[1]); //先に取得しておいた、現在時刻の3日前のタイムスタンプより //前のタイムスタンプが取得されていたら if($ts < $time){ //unlink関数にフルパスを渡してやってファイルを削除 unlink($data); } } } ?> 原始的なロジックとしては、こんなところでしょうか。 PHPには便利な定数があるので覚えておいたほうがよいです。 DIRECTORY_SEPARATOR定数は、Windowsだと円マークになりLinuxやMacなどではスラッシュになるので、 これも便利です。

bou1025
質問者

お礼

大変ご丁寧にご教授いただきましてありがとうございます。 1つ1つ処理の詳細を書いていただいたおかげで 未熟な私でもとても良く理解する事ができました。 こんなに便利な定数があるとは全くもって知りませんでしたので とても勉強になりました。 なかなか思うようにいかず、 検索しながらファイルの生成時間を利用してやるしかないと思っていただけに とても助かりました。 本当にありがとうございました。

関連するQ&A