wp-settings.php (4) $_SERVER['SCRIPT_FILENAME']


[wp-settings.php 解析 | WP2.7 関連記事]
WordPrss3.5 wp-settings.php 解析はこちら

「wp-settings.php」の続きをみていきます。
※wordress2.7で解析しています。

【 前回まで 】
analyze08

前回は、IISサーバなど、$_SERVER['REQUEST_URI'] の値が取得できない場合、別の方法で同じ値を取得し、$_SERVER['REQUEST_URI']に代入する処理をみました。
今回も、環境による $_SERVER の値の違いを調整する作業をみていきます。

⑤ $_SERVER['SCRIPT_FILENAME'] の調整
// 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」のサンプルはなかったです。


[wp-settings.php 解析 | WP2.7 関連記事]
WordPrss3.5 wp-settings.php 解析はこちら

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です