作者: Bruce.
日時: 2006/11/21(20:54)
Bruce.です。

ねこ丸 writes:

> > 上記のスクリプトを sample.php という名前で保存してコマンドラインで
> > 実行してみてください。
> > ナルバイトが先頭にある名前のファイルが存在することになっています(笑)
> 
>   なんか Windows版 PHP の file_exists() はおかしいんですよね。現状
> の確認をせずに書きますが、4.2.4-dev の時点では file_exists( "" )
> が確か常に true になるはずです。is_readable( "" ) は true にならな
> いんですけど。

んと日記にちょっと書きましたが、Windows以外ではファイルの存在確認に
libc の access という関数を使っています。Windows版ではこのaccessに
加えて SHGetFileInfoというWin32APIでのチェックも同時に行っています。
どうも SHGetFileInfoでのハンドリングを間違っているくさいですね。

"\x0" でも "" でも C形式の文字列としては \0 で始まるものなので
file_exists("") が真を返すのは納得できます。

is_readbleは追いかけていないのでわかりませんが、チェックの方法が
違っていて、その影響でしょう。多分。


>   PHP + Windows って組み合わせ的によくありますけど、他の LL に比べ
> て PHP は Windows 版と Un*x 版の挙動の違いが開発側でちゃんと把握さ
> れていない印象があります。少なくともマニュアルには反映されていない
> バグなのか仕様なのかよく分からない挙動の揺れがちょこちょこあります。

ふむ。

全機能のすべての入力に対する動作をテストして比較して回るわけにも
行かないですからね。そういうのは気づいた人がリポートするのがいい
んじゃないかと。

今回のはプラットフォームの違いに起因するものというよりは、単なる
バグのような気がしますが。

いじょ。