過去と他人はかえられないが、未来と自分はかえられる このページをアンテナに追加 RSSフィード

2006-12-07 PHP カレントディレクトリという名の罠 このエントリーを含むブックマーク このエントリーのブックマークコメント

PHPにカレントディレクトリを調べる方法がいくつがありますが、WindowsUnixではどうやら挙動が違うようです。

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__)

を使えばいいですからね。

トラックバック - http://d.hatena.ne.jp/magiwo/20061207
Connection: close