1. ホーム
  2. http

[解決済み] PHP_SELF vs PATH_INFO vs SCRIPT_NAME vs REQUEST_URI

2022-09-13 10:01:18

質問

CodeIgniterでPHPアプリケーションを構築しています。CodeIgniterはすべてのリクエストをメインコントローラーに送ります。 index.php . しかし、私は index.php をURIに入れるのは好きではありません。例えば http://www.example.com/faq/whateverhttp://www.example.com/index.php/faq/whatever . 私は、スクリプトがそのアドレスが何であるかを知るための信頼できる方法を必要としています。私はこれまで mod_rewrite CodeIgniterのドキュメントにあるように。

ルールは以下の通りです。

RewriteEngine on
RewriteCond $1 !^(images|inc|favicon\.ico|index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L] 

通常であれば、ただ単に php_self をチェックしますが、この場合は常に index.php . から取得することができますね。 REQUEST_URI , PATH_INFO などがありますが、どれが一番信頼できるのか決めかねています。どなたか、の本当の違いを知っている(または、どこで見つけられるか知っている)方はいらっしゃいますか? PHP_SELF , PATH_INFO , SCRIPT_NAME そして REQUEST_URI ? ご協力ありがとうございました。

ノート : SOがアンダースコアを見て、なぜか斜体にしてしまうので、スペースを追加する必要がありました。

更新 : スペースを修正しました。

どのように解決するのですか?

この PHP ドキュメント を見れば、その違いがわかります。

'PHP_SELF'です。

現在実行中のスクリプトのファイル名で、ドキュメントルートからの相対パス。例えば $_server['php_self'] です。 というアドレスのスクリプトでは http://example.com/test.php/foo.bar とすると /test.php/foo.bar . また __FILE__ 定数には、現在の(すなわちインクルードされた)ファイルのフルパスとファイル名が含まれます。PHP がコマンドラインプロセッサとして動作している場合、この変数には PHP 4.3.0 以降のスクリプト名が格納されます。以前は利用できませんでした。

'SCRIPT_NAME'

<ブロッククオート

現在のスクリプトのパスが含まれています。これは、自分自身を指す必要があるページのために有用である。また __FILE__ 定数は、現在の (すなわち、インクルードされた) ファイルのフルパスとファイル名を含みます。

'REQUEST_URI'

<ブロッククオート

このページにアクセスするために指定されたURI、例えば '/index.html' .

PATH_INFO はドキュメント化されていないようです...。