IIS 7.0 上の PHP 5.3.0 で file_exists が正しく動作しない

SERVER


IIS 7.0 + PHP 5.3.0 で file_exists が正しい結果を返さない

以前に EZ-NET: IIS 7.0 で PHP を実行できるようにする でお話しした方法で PHP の動作環境を Windows 上に構築して利用していたのですけど、あるとき、ファイルが存在するかを判定する file_exists 関数が正しい結果を返さないという問題に遭遇してしまいました。

同じようにファイルを検査する is_dir も同じように正しい結果を返してくれない感じです。

 

通常のファイルであれば問題なく動作していたのですけど、Windows の "ジャンクション" でリンクをはったフォルダー内のサブフォルダーを file_exists でチェックしてみると、稀に "存在する" と判定されることもあるのですが、大半は "存在しない" と判断されてしまいます。絶対パスでも相対パスでも、判定結果は同じでした。

同じパスを指定しているのに、IIS を再起動する度に、どうも最初の 1 回だけは正しい判定をするような感じで、それ以降は一律に "存在しない" となってしまっているようです。

PHP をコマンドラインから実行すると上手く行くような感じだったのですけど、Web アプリケーションではそんなありさまです。念のため実行権限についても調べてみたのですけど、Web アプリケーションからは読みだせないようなアクセス制御が施されているということもないようでした。

 

どうにかならないものかと試行錯誤を重ねた結果、PHP 5.3.5 に入れ替えてみたところ、ジャンクション上のファイルについても file_exists 関数で正しく判定できるようになった感じです。

ただ、PHP 5.3.0 を PHP 5.3.5 に入れ替えるにあたって、手間取ってしまうところがありましたので、実運用中のサーバーを差し替える場合には慎重に行うのが良いかもしれません。その辺りについては EZ-NET: IIS 7.0 上の PHP 5.3.0 を PHP 5.3.5 にアップデートする に記してみましたので、必要に応じてご覧ください。