phpでのログファイル自動削除について
以下のような形式でdataフォルダ内にログファイルに日付をつけて
毎日いくつかファイルを保存させているのですが
data/
a_20100914_a.dat
b_20100914_b.dat
c_20100914_c.dat
どんどん蓄積していくために
ある程度日数が経過した古いファイルを自動で削除させたいのですが
(たとえば3日前のものは全部削除など、削除プログラム自体の呼び出しにはcronのwgetを使います)
ファイルが生成された日付で判断させる言う方法もあると思うのですが、
出来ればファイル名で日付を使っているのでそれを利用して出来ないものかと思うのですが
どのように記述すればよいのでしょうか。
削除させるプログラムを置く予定場所はdataフォルダからみて../の位置になります。
お手数をおかけしますがソースをご教授いただけますと幸いですm(__)m
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などではスラッシュになるので、
これも便利です。
大変ご丁寧にご教授いただきましてありがとうございます。
1つ1つ処理の詳細を書いていただいたおかげで
未熟な私でもとても良く理解する事ができました。
こんなに便利な定数があるとは全くもって知りませんでしたので
とても勉強になりました。
なかなか思うようにいかず、
検索しながらファイルの生成時間を利用してやるしかないと思っていただけに
とても助かりました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- ノートパソコン ソフトアンインストール残存ファイル 3 2022/09/13 18:15
- Windows Vista・XP windows10 フォルダを上書きするときに、元のフォルダを全て削除してコピーする方法 3 2022/05/22 00:53
- その他(Microsoft Office) PCのHDの空きを増やすために,ONE driveのフォルダーを限定しましたが,容量が増えません? 4 2022/08/04 14:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/10 11:34
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- PDF PDFを自動添付したメールを送信してくれるツールを探しています。 2 2023/02/07 15:19
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Java 動かなくなったのでJavaソースを手直しお願いします。 2 2022/04/30 05:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
現在位置より2つ上のディレク...
-
Smarty includeでテンプレート...
-
visualstudioでc#のdllができない
-
バッチを用いたフォルダの自動移動
-
Subversionのリポジトリの削除
-
CFileDialogの最初のディレクト...
-
MkDir関数
-
拡張子を隠すのは良い事なので...
-
renameでのPermission deniedエ...
-
絶対パス?絶対アドレス?意味...
-
PHPのWarningとは?
-
fopenでファイルが開かない場合...
-
VB2008でFTPでのディ...
-
rmdirでフォルダが消せません
-
Smartyのtemplatesとtemplates_...
-
ASPのページだけ表示できません。
-
aspのページが表示できません
-
C言語でのディレクトリ作成につ...
-
ファイルアップロードに関して...
-
$_SERVER["HTTP_HOST"]と、$_SE...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
visualstudioでc#のdllができない
-
ファイルアップロードに関して...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
fopenでファイルが開かない場合...
-
rmdirでフォルダが消せません
-
絶対パス?絶対アドレス?意味...
-
VB.NET 最下位のディレクトリ名...
-
コマンドプロンプトを指定のデ...
-
VB2008でFTPでのディ...
-
DLL のロードの順序
-
MkDir関数
-
ファイル選択ダイアログで選択...
-
図に示す階層構造で,現在のデ...
-
[ ディレクトリ '.' は書き込み...
-
JAVA内で複数のファイルを削除...
おすすめ情報