PHP カレントディレクトリという名の罠
PHPにカレントディレクトリを調べる方法がいくつがありますが、WindowsとUnixではどうやら挙動が違うようです。
test.php
echo "realpath: ".realpath(".")."\n"; echo "getcwd: ".getcwd ()."\n"; echo "env@pwd: ".$_ENV['PWD']."\n";
Windowsの場合
現在いるディレクトリ | C:\work |
実行するコマンド | C:\php\php.exe |
実行するファイル | C:\php\test.php |
結果
realpath: C:\work getcwd: C:\work env@pwd:
UNIXの場合
現在いるディレクトリ | /home/hogehoge/work |
実行するコマンド | /usr/local/bin/php |
実行するファイル | /user/local/bin/test.php |
結果
realpath: /usr/local/bin getcwd: /usr/local/bin env@pwd:/home/hogehoge/work
となるわけですな。(苦
Windowsの場合は、現在いるディレクトリを返し、
Unixの場合は、実行したファイルがあるディレクトリーを返すようです。
なので、挙動を同じにするためには
function getPwd() { return (OS_WINDOWS) ? getcwd() : $_ENV['PWD']; }
とすればいける。
ちなみに、Webサーバ上で実行している分にはこの問題にはぶつかりません。
Webサーバ上は
dirname(__FILE__)
を使えばいいですからね。