wp-settings.php (3) $_SERVER['REQUEST_URI']


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

「wp-settings.php」の続きをみていきます。今回は,IISサーバでは$_SERVER['REQUEST_URI'] が直接取得できないので、間接的に取得する方法をみていきます。$_SERVER['REQUEST_URI']には、「ページにアクセスするために指定された URI」が代入されます。例えば、「/index.php?id=10」などパラメータも含まれます。 ※wordpress2.71で解析しています。

【前回まで】

analyze08 では続きをみていきます。

unset( $wp_filter, $cache_lastcommentmodified, $cache_lastpostdate );

これは変数を検索かけたりしたのですが、よくわかりませんでした。後々調べたいと思います。

/** * The $blog_id global, which you can change in the config allows you to create a simple * multiple blog installation using just one WordPress and changing $blog_id around. * * @global int $blog_id * @since 2.0.0 */ if ( ! isset($blog_id) ) $blog_id = 1;

コメントを訳してみると、「グローバル変数「$blog_id」を変えることにより、1つのwordpressインストールで複数のブログが作れますよ」みたいなことが書かれています。複数ブログは「wordpress MU」で通常は対応してなかったと思うのですが、このコメントみてるとできそうですね。ただ、$blog_idを検索かけて簡単に使用している箇所みたのですが、キャッシュ関連で使ってたりして複数ブログでどう使ってるのかよくわかりませんでした。まだ解析途中で流れが十分把握していないので、順に調査し「$blog_id」を使うときになったら詳しく記事にしようと思います。

④IISサーバでの、$_SERVER['REQUEST_URI'] の修正
// Fix for IIS, which doesn't set REQUEST_URI
if ( empty( $_SERVER['REQUEST_URI'] ) ) {
	// IIS Mod-Rewrite
	if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
		$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
	}
	// IIS Isapi_Rewrite
	else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
		$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
	}
	else
	{
		// Use ORIG_PATH_INFO if there is no PATH_INFO
		if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) )
			$_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];

		// Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
		if ( isset($_SERVER['PATH_INFO']) ) {
			if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] )
				$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
			else
				$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO'];
		}

		// Append the query string if it exists and isn't null
		if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
			$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
		}
	}
}

今回のメインです。$_SERVER['REQUEST_URI'] に関する処理です。 $_SERVER の説明をphp公式リファレンス(日本語)から引用します。

$_SERVER は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列です。この配列のエントリは、Web サーバにより 生成されます。全ての Web サーバがこれら全てを提供する保障はありません

上記引用文で重要なのは、Webサーバにより生成され、何の情報を提供するかはwebサーバにより異なるということです。 wordpressのコードをみてみます。

Fix for IIS, which doesn't set REQUEST_URI」 (IISサーバは「REQUEST_URI」取得できない)

と書かれています。 IISサーバのように、$_SERVER['REQUEST_URI']が取得できない場合は、他の処理で同じ内容を取得し$_SERVER['REQUEST_URI']に代入します。 具体的に、どのように値を取得し代入しているかみていきます。

①$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL']
$_SERVER['HTTP_X_ORIGINAL_URL'] について調べてみたのですが詳しい情報がありませんでした。直接$_SERVER['REQUEST_URI']に代入していることから、内容は全く同じなのでしょう。主なサーバ関数ではないようです。
②$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL']
①と同様
以下は、$_SERVER['PATH_INFO'] が取得できる場合のみです。 $_SERVER['PATH_INFO'] が取得できない場合、

if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) ) $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];

$_SERVER['ORIG_PATH_INFO'] があれば、$_SERVER['PATH_INFO']に $_SERVER['ORIG_PATH_INFO']を代入します。

③$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO']
$_SERVER['PATH_INFO'] についても調べてみました。 「晴練雨読」サイトに書かれていた説明を引用します。
PATH_INFOとは、URL中のクエリー文字列をプログラム名の後にスラッシュ(/)をつけて指定するプログラミング技法、またはその技法を適用した際にクエリー文字列が保管される環境変数のことです。
結構ややこしいですが、「晴練雨読」にサンプル例などもあったので詳しく知りたい方はそちらをみてください。ただし、この式が成り立つのは、 $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] の場合のときだけです。$_SERVER['SCRIPT_NAME'] は現在 実行しているファイル名を取得しています。パラメータは含まれません。
④$_SERVER['REQUEST_URI']

= $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO']

$_SERVER['PATH_INFO'] が取得でき、 $_SERVER['PATH_INFO']  != $_SERVER['SCRIPT_NAME'] の場合です。


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

コメントを残す

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