• ベストアンサー
※ 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

  • 見慣れないログファイルについて

    こんにちは。 ある日、ハードディスクに見慣れないログファイルが 作成されていました。 このファイルを削除しても問題ありませんか? D ドライブの直下 フォルダ:a0b93bdbee70424d2b msxml6-KB927977-enu-x86.log というファイルが1つだけあります。

  • ファイルの削除

    open(FH,">data.dat"); print FH "test"; close(FH); これが書いてあるCGIのページにアクセスすると、 自動的に「data.dat」というファイルが作成されますが、 ファイルを削除することは可能でしょうか? つまり、CGIのページにアクセスすると、「data.dat」 ファイルを削除するということです。 ご教授よろしくお願いします。

    • ベストアンサー
    • Perl
  • 肥大化したOEのpop3.logファイルを削除したい?

    ハードディスクの整理をしていたところ、 outlook express5.5の(WIN98SE) pop3.logファイル(C:\WINDOWS\Application Data\Identiti...\OutlookExpress) が約1.6Gありました。 そこでお聞きしたいのですが、 このpop3.logファイルと言うものを少しでも減らすには、 どのようにすればよろしいでしょうか? 受信フォルダーのものを、ゴミ箱→削除しても、 ファイルサイズは変りませんでした。 または、これは、削除できないもしくは 削除してはいけないものなのでしょうか? よろしくご回答お願いします。

  • ログファイルを更新したいのですが

    ログファイルの中身が むらかみ  1,2,3 4,5,6 7,8,9 ・・・ ぽんた   a,b,c d,e,f g,h,i ・・・ しゅういち い,ろ,は に,ほ,へ と,ち,り ・・・ のようにタブ区切りのログファイルの各行2番目の項目を削除して上書き保存 むらかみ  4,5,6 7,8,9 ・・・ ぽんた   d,e,f g,h,i ・・・ しゅういち に,ほ,へ と,ち,り ・・・ という作業をするスクリプトを組みたいのですが、perlはまったくわかりませんで苦闘しております。 最終的にcronで指定時間にスクリプトを動かせるようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Excelで外部ファイルの取り込み(データの更新)をマクロ化したい

    C:\data のdataフォルダの中に「20060709.dat」「20060710.dat」「20060711.dat」・・・というようにファイル名に日付が入ったファイルがあります。 例えば、(データ)→(外部データの取り込み)で"sheet2"に「20060709.dat」を読み込んでいるとしします。 この時に"sheet1”のセルA1に「20060710」と入力してマクロボタンをクリックすると"sheet2"に「20060710.dat」を(データ)→(データの更新)で読み込むというような作業をマクロで自動化することは可能なのでしょうか? 可能であれば教えて頂きたいのですが。どうぞよろしくお願いします。 ちなみにマクロに関しては(自動記録)で作ったマクロを少しいじる程度の知識しかありません。Excel2000を使用しています。 以上、どうぞよろしくお願い致します。

  • KB*.log というファイル

    PCの動作が重くなってきたと思ったのでファイルの掃除をしていまいたら、 Cドライブのwindowsフォルダ内にKB***.logというファイルが大量にありました。 自分ですこし調べてみた所、windowsのアップデートのファイルらしいということまでは分かったのですが、 削除してはいけないデータなのでしょうか? かなり大量にあったので問題なければ削除したいと思っていますが…。

  • cron設定についてです。

    こんばんは。開発初心者の者です。 今、データベースから引っ張って来たデータを csv作成するphpプログラムファイルを 1日1回cronなりで設定して 自動で動かしたいと思っています。 しかし、php本体を置いているサーバー(仮称:Aサーバー)と csvを作成するプログラムファイルを 置いているサーバー(仮称:Bサーバー)が違うため cron設定にかなり手こずっています。 http://のURL形式でcsvを作成するphpを実行できるので、 Cronがwgetを使いURL形式で読み込んで できそうだということがわかりました。 早速、色々調べて手始めにwgetをやってみたのですが、 ~DNSが…サービスが…不明です。(うろ覚えですが) のような記述が出てwgetすら実行できません。 BASIC認証などもあり、 元々の読み込みURLはhttps://になってます。 (csvを書き出すphpファイルの階層はhttp://になってます) BASIC認証対策用記述もして何度も試みてみましたが、 一向にできません。 開発をしている別環境ではphp本体、 csv作成をするphpファイルともに 同じサーバーに置いてあり、こちらは * * * * * /usr/local/bin/php /…/…/~.phpのような 通常のcron、 * * * * * wget --http-user=** --http-passwd=*** http://~ のようなwgetを使用したcron設定ともに 普通に自動実行ができますが…。 Aサーバー、Bサーバーともにpoderosaを使用して cron設定のコマンドを書いてますが、 何が悪いのかさっぱりわかりません。 php本体を置いてあるAサーバー側でcronの記述するのが たぶん正しいかと思うのですが、 どちらでcron設定するのが正しいのでしょうか? また、何故今wgetができないのかをお聞きしたいです。 サーバーは全く触っていないため仕組みはよくわからないです。 恐らくSSL形式になっていると思います。 何が原因と考えられるでしょうか? また、何かcronなどの他に、このcsv書き出しをするphpを 自動で動作させる方法などもないでしょうか? 知識不足、説明下手で申し訳ないですが、 どうしても解決したいので回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • バッチファイルで、ファイル名から自動振分したい

     C:\B\の中に、必ず「半角数字4桁_」から始まるファイル名のデータが毎週入ります。  「半角数字4桁_」以後のファイル名、拡張子は、その週によって変わります。  C:\A\の中には、必ず「_半角数字4桁_」で終わるフォルダ名のサブフォルダがあります。  このフォルダ名は、ずっと変わることがありません。  C:\B\の中にあるデータを、ファイル名の最初の4桁の数字をもとに、C:\A\にあるサブフォルダに自動で移動したいです。また、移動する際に、既にサブフォルダ内に「半角数字4桁_」から始まるファイル名のデータがある場合は、削除してから移動したいです。 フォルダ構成です。 Cー|    |-【A】    |   |-【あいう_1234】    |  |-【あい_2235】    |   |-【かきくけ_8990】    |   |-【アイウエオ_5014】    |    |-【B】    |   |-1234_ABC.txt    ←このファイルは C:\A\【あいう_1234】に。    |  |-2235_1534.txt   ←このファイルは C:\A\【あい_2235】に。    |   |-8990_22.doc     ←このファイルは C:\A\【かきくけ_8990】に。    |   |-5014_わをん.doc   ←このファイルは C:\A\【アイウエオ_5014】に。   自分でバッチファイルを記述してみたのですが、ここからどうしていいか分かりません。  どなたか教えてもらえないでしょうか? よろしくお願いします。    自分で記述してみたバッチファイルです。 cd C:\B dir /b > C:\C\list.txt set folder=C:\A set file=C:\B set Bat=C:\C for /f "delims=" %%a in ( %Bat%\list.txt ) do if exist "%file%\%%a" move "%folder%\%%a" "%to%" PAUSE > NUL

  • このファイルどうしたらいいの

    Publicフォルダの中にNTUSER.DAT NTUSER.DAT.LOG1 NTUSER.DAT.LOGの3つのファイルが存在します。どういう意味のあるファイルですか?削除してもいいんですか?教えてください。

  • シェルにてファイルの自動削除をするには?

    シェルにて「abc.0101171109(.以降は年月日時分)」 というようなログファイルを一日3回、作成しています。 これを一週間、または一ヶ月たったら 自動的に削除するにはどうすればよいでしょうか。 OSはSolaris2.6で、 シェルはBでもCでも何でもかまいませんのでよろしくお願い致します。

このQ&Aのポイント
  • G3360のWIFI接続が一時停止し、プリントアウトができなくなりました。
  • キヤノン製品のG3360がWIFIに接続されていましたが、突然一時停止し、プリントアウトができなくなりました。
  • G3360のWIFI接続が一時停止しており、これによりプリントアウトができなくなりました。キヤノン製品にお詳しい方、ご教示いただければ幸いです。
回答を見る

専門家に質問してみよう