PHP中获取当前脚本路径信息的4个常用变量,助你轻松上手!
2024-03-01 13:09:00
## PHP 中获取当前脚本路径信息的常用变量
简介
在 PHP 开发中,经常需要获取当前正在执行脚本的路径信息。$_SERVER
超级全局变量包含了有关当前请求的信息,其中有四个变量特别适用于此目的:PHP_SELF
、PATH_INFO
、SCRIPT_NAME
和 REQUEST_URI
。这些变量提供不同级别的脚本路径信息,并在不同的情况下有各自的优点和缺点。本文将深入探讨这些变量的用途和最佳实践。
### PHP_SELF
路径包括脚本文件名
$_SERVER['PHP_SELF']
包含当前脚本的完整路径,包括脚本文件名。例如,如果脚本位于 http://www.example.com/index.php/faq/whatever
,那么 $_SERVER['PHP_SELF']
将为 /index.php/faq/whatever
。
### PATH_INFO
路径不含脚本文件名
$_SERVER['PATH_INFO']
包含与脚本相关的所有路径信息,但不包括脚本文件名。如果 $_SERVER['PHP_SELF']
为 /index.php/faq/whatever
,则 $_SERVER['PATH_INFO']
将为 /faq/whatever
。
### SCRIPT_NAME
仅包含脚本文件名
$_SERVER['SCRIPT_NAME']
包含当前执行脚本的名称,不包括任何查询字符串或路径信息。如果 $_SERVER['PHP_SELF']
为 /index.php/faq/whatever
,则 $_SERVER['SCRIPT_NAME']
将为 /index.php
。
### REQUEST_URI
包含完整请求 URI
$_SERVER['REQUEST_URI']
包含客户端发送的完整请求 URI,包括脚本名称、路径信息和查询字符串。如果 $_SERVER['PHP_SELF']
为 /index.php/faq/whatever
,则 $_SERVER['REQUEST_URI']
将为 /index.php/faq/whatever?param1=value1¶m2=value2
(如果存在查询字符串)。
### 选择合适的变量
每个变量在不同的情况下都有其优点和缺点:
- PHP_SELF: 最容易获取当前脚本的完整路径,但它包含脚本文件名,在某些情况下可能不合适。
- PATH_INFO: 不包含脚本文件名,但要求对 URL 进行配置,以便所有路径信息都作为 PATH_INFO 传递。
- SCRIPT_NAME: 只包含脚本名称,在需要知道脚本文件名的特定情况下很有用。
- REQUEST_URI: 包含完整的请求 URI,但它可能包含查询字符串,在某些情况下可能不需要。
### 使用示例:
以下是一个示例,展示了如何根据不同的变量获取当前脚本的路径信息:
echo 'PHP_SELF: ' . $_SERVER['PHP_SELF'] . '<br>';
echo 'PATH_INFO: ' . $_SERVER['PATH_INFO'] . '<br>';
echo 'SCRIPT_NAME: ' . $_SERVER['SCRIPT_NAME'] . '<br>';
echo 'REQUEST_URI: ' . $_SERVER['REQUEST_URI'] . '<br>';
输出:
PHP_SELF: /index.php/faq/whatever
PATH_INFO: /faq/whatever
SCRIPT_NAME: /index.php
REQUEST_URI: /index.php/faq/whatever?param1=value1¶m2=value2
### 结论
PHP_SELF
、PATH_INFO
、SCRIPT_NAME
和 REQUEST_URI
是 PHP 中获取当前脚本路径信息的重要变量。了解每个变量的用途和限制对于根据特定需要做出明智的选择至关重要。
### 常见问题解答
-
为什么有时
PATH_INFO
为空?
PATH_INFO 仅在正确配置 Web 服务器时才可用。请确保您的服务器已将 PATH_INFO 传递给 PHP。 -
如何使用
PATH_INFO
访问路径参数?
您可以使用explode()
函数将PATH_INFO
拆分为数组,其中每个元素代表一个路径参数。 -
SCRIPT_NAME
与PHP_SELF
有什么区别?
SCRIPT_NAME
不包含任何路径信息,而PHP_SELF
包含脚本名称和路径信息。 -
REQUEST_URI
与其他变量有何不同?
REQUEST_URI
是客户端发送的完整请求 URI,可能包含查询字符串,而其他变量不包含。 -
如何安全地使用这些变量?
请务必对这些变量进行验证,以防止跨站脚本攻击 (XSS) 和文件包含漏洞。