サーバーサイド アプリケーションを開発する場合、リクエストの正確なアドレスを決定することは、ナビゲーションと処理にとって非常に重要です。この記事では、4 つの PHP スーパーグローバル、PHP_SELF、PATH_INFO、SCRIPT_NAME、および REQUEST_URI を比較して、それらの違いと信頼性を明確に理解します。
PHP_SELF は、実行されている現在のスクリプトを表します。その値には、サブディレクトリやクエリ文字列を含むスクリプトの完全な URI が含まれます。提供された例では、mod_rewrite がリクエストをメイン コントローラーにルーティングするために使用されており、実際にリクエストされた URL に関係なく、PHP_SELF は常に「index.php」になります。
PATH_INFO には、スクリプト名とクエリ文字列に続く URI の部分。スクリプトに対する相対的なパス情報を表します。同じ例を使用すると、要求された URL が「http://www.example.com/faq/whatever」の場合、PATH_INFO には「/faq/whatever」が保持されます。
SCRIPT_NAME現在実行中のスクリプトの完全なパスとファイル名を示します。ほとんどの場合、これは PHP_SELF に似ていますが、RewriteBase で mod_rewrite を使用する場合、またはリクエストがサブリクエストである場合は異なります。 mod_rewrite の例では、SCRIPT_NAME は「index.php」ではなく「/test.php」になります。
REQUEST_URI には、クエリ文字列を含む、クライアントによって送信された完全な URI が含まれます。 。これは、要求された URL の最も完全な表現です。ただし、空ではないクエリ文字列、サーバー側のリダイレクト、HTTP エラー (例: 404) などの特定の条件下では、SCRIPT_NAME および PHP_SELF とは異なる場合があります。
次の例は、これらのスーパーグローバルの違いを示しています。
要求された URL が "http://example.com/test.php/foo/bar" の形式である場合:
空ではないクエリ文字列が入力された場合 (http://example.com/test.php?foo=bar):
サーバー側リダイレクトが有効な場合:
これらの例に基づいて、REQUEST_URI は要求された URL の最も包括的な表現を提供します。ただし、サーバー側のリダイレクトや HTTP エラーの影響を受ける可能性があります。 PHP_SELF と SCRIPT_NAME は通常、スクリプトのアドレスを決定するのに信頼できますが、mod_rewrite が使用されている場合、PATH_INFO は特定のパス情報を抽出するのに役立ちます。
以上がPHP_SELF、PATH_INFO、SCRIPT_NAME、および REQUEST_URI の違いは何ですか?どれを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。