SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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()を連発するところでした。思わぬ罠が潜んでいるものですね。

関連するメモ

コメント