wp-settings.php (4) $_SERVER['SCRIPT_FILENAME']
「wp-settings.php」の続きをみていきます。
※wordress2.7で解析しています。
前回は、IISサーバなど、$_SERVER['REQUEST_URI'] の値が取得できない場合、別の方法で同じ値を取得し、$_SERVER['REQUEST_URI']に代入する処理をみました。
今回も、環境による $_SERVER の値の違いを調整する作業をみていきます。
// Fix for PHP as CGI hosts that set SCRIPT_FILENAME to something ending in php.cgi for all requests if ( isset($_SERVER['SCRIPT_FILENAME']) && ( strpos($_SERVER['SCRIPT_FILENAME'], 'php.cgi') == strlen($_SERVER['SCRIPT_FILENAME']) - 7 ) ) $_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED'];
コメントをみてみると, 「SCRIPT_FILENAME」の語尾が「php.cgi」で終わる CGI版phpを調整すると書かれています。
$_SERVER['SCRIPT_FILENAME'] と$_SERVER['PATH_TRANSLATED'] について、phpリファレンスで調べてみました。
(1)'SCRIPT_FILENAME'
現在実行されているスクリプトの絶対パス
注意: file.php あるいは ../file.php のような相対パスを指定して CLI でスクリプトが実行されている場合、 $_SERVER['SCRIPT_FILENAME'] には ユーザが指定した相対パスが含まれます。(2'PATH_TRANSLATED'
バーチャルからリアルへのマッピングがなされた後の、 現在のスクリプトのファイルシステム上(ドキュメントルートではなく) でのパス。注意: PHP 4.3.2 以降、PATH_TRANSLATED は、 Apache 2 SAPI において暗黙のうちに設定されなく なりました。一方、Apache 1 では、この値が Apache により設定されない場合、 SCRIPT_FILENAME と同じ値に設定されます。 この変更は、PATH_TRANSLATED は PATH_INFO が定義されている場合のみ 存在するべきであるという CGI の規約を満たすために 行われました。 Apache 2 ユーザは、PATH_INFO を定義するために httpd.conf の中で AcceptPathInfo = On を使用することが可能です。
「SCRIPT_FILENAME」の注意ですが、CLIで実行すると値が変わることがあるみたいです。しかし、CLI版(CLI SAPI)とCGI版(CGI SAPI) は別もので、今回の処理はCGI版に対してなので関係ないようです。
ここでの処理をまとめると、「SCRIPT_FILENAME」には本来、「現在実行されているスクリプトの絶対パス」が格納されているが、CGI版では語尾に「php.cgi」がつき正しいファイル名が取得できない場合があるので、その場合は「PATH_TRANSLATED」の値を使おうってことみたいです。
「しろくろのへや」でサーバごとの$_SERVERの値を比較していました。大体は、$_SERVER['SCRIPT_FILENAME'] と$_SERVER['PATH_TRANSLATED'] は同じようです。残念ながら語尾が「php.cgi」のサンプルはなかったです。
2009 年 6 月 23 日 火曜日 【 カテゴリー: wordpress構造解析 , wp_root 】

