【php】この関数の結果はキャッシュされます。
ファイルやディレクトリの有り無しを確認する関数などは、マニュアルにあるとおり、結果をキャッシュするものがあります。
例) is_dir()
http://jp2.php.net/manual/ja/function.is-dir.php
キャッシュの動作についてはこちら
http://jp2.php.net/manual/ja/function.clearstatcache.php
「”log”というディレクトリがあったらSQLのログを残す」というような書き方をした場合、
何回でもSQL発行のたびにif(is_dir(“/xxx/log”)) {…}を思う存分使用してよいということかな?
と思ったら、間違いでした!!
- 「ファイルが存在しなかった」という結果はキャッシュしない
- 「ファイルが存在した」とき、存在したことをキャッシュする
とのこと。
つまり、上のログ作成の例では、
- logというディレクトリがあった場合
- 1回目のチェックでディレクトリがあったことがキャッシュされ、パフォーマンスはよい。
- logディレクトリがなかったとき
- ないという結果はキャッシュされず、毎回存在を確認してしまう。パフォーマンスが悪そう。
不思議なphpの動作に頼るのはどうかと思っていたので、キャッシュに頼らない書き方をしようと思っていましたが、これに気づかなかったら、安易にis_dir()を連発するところでした。思わぬ罠が潜んでいるものですね。
コメント