- ベストアンサー
古くなったファイルを削除するには?
- あるファイルを読み込んで、その中に書かれたファイル名の中で10日以上経過したファイルを削除するPHPを作成したが、index.htmlは残しておきたい。
- ファイルを読み込み専用でオープンし、ループでファイルの更新時間と経過時間を計算して、index.html以外のファイルを削除する。
- ファイルを削除する前にclearstatcache関数を使用してキャッシュをクリアする必要がある。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最後の if文の if ( $keika > 864000 && $line != index.html ) { @unlink( "$line" ); } でindx.htmlにクウォーテーションで囲ってないからです。 多分文字列を数字として認識されているのでHITしてない思われます。 文字列はクウォーテーションで囲いましょう。 ところで、TEXTに対象ファイルを書いておく仕様だと、ファイルが増えた場合や、対象ファイルが多い場合に無駄な処理をします。 同一ディレクトリだった場合はopendirで調べたほうが手っ取り早かったりします。 例 $dir = "./"; // Open a known directory, and proceed to read its contents if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { print "filename: $file : filetype: " . filetype($dir . $file) . "<br>\n"; if (preg_match ("/^\.*/i", $file) and $file != 'index.html' and filemtime("$file") < time()-60*60*10) { unlink($file); print "delele file is $file <br>\n"; } } closedir($dh); } } ちなみにopendirは自分のディレクトリをしめす[.]と一階層上のディレクトリを示す[..]もファイル名と一緒に取得するので除外しています。
その他の回答 (1)
- moon_night
- ベストアンサー率32% (598/1831)
>実は同じディレクトリではなく1階層下のfileというディレクトリの中に削除したいファイルはあるのです。 >その場合は >$dir = "./"; >の部分を >$dir = "./file/"; >にすればいいのでしょうか? はい、その通りです。 もしダメな場合は絶対パスにしてみてください。
お礼
ありがとうございました。クウォテーションをつけたところ思っているように動作するようになりました。 改善案も試してみたのですが、こちらの方はうまく作動しませんでした。(こちらがうまく作動すればこちらの方が良かったのですが・・・) それほど頻繁に使うphpでもナイのでクウォテーションをつけるだけにしておきます。 ありがとうございました。
補足
改善案まで書いて頂きありがとうございます。 ぜひ試してみたいと思います。 初心者なので改善案を見てもほとん意味が分からないのですが・・・(^_^;) 実は同じディレクトリではなく1階層下のfileというディレクトリの中に削除したいファイルはあるのです。 その場合は $dir = "./"; の部分を $dir = "./file/"; にすればいいのでしょうか?