为什么getenv("PHP_SELF")
会返回false
?
当$_SERVER['PHP_SELF']
正在运行并返回值时。
答案 0 :(得分:3)
这是因为getenv()
不等于$_SERVER
取消引用。即:$_SERVER
中的{strong>并非所有键都可用于getenv()
,而并非所有键都具有相同的名称。
第一个重要区别是getenv()
将以不区分大小写的方式进行搜索。例如,这两个调用将返回相同的数据:
$script = getenv('SCRIPT_NAMe');
$script = getenv('SCRIPT_NAME');
其次,关于PHP_SELF
:这是不将由 environment 设置的密钥。因为这个密钥在环境中有另一个名称(或者说具体而言),它是SCRIPT_NAME
。 getenv()
将使用预定义键列表,这些键主要列在RFC 3875
因此,如果您想使用getenv()
,则应使用SCRIPT_NAME
来引用当前脚本名称。请注意,在某些情况下,可以设置此环境密钥 (因此您可以执行getenv('PHP_SELF')
) - 但在常见情况下不应依赖于此。
答案 1 :(得分:1)
确定。实际上,问题是getenv()不接受" PHP_SELF"作为一种争论。 或者,您可以使用 -
$ip=getenv('REQUEST_URI');
print_r($ip);
这将为您提供所需的结果。我希望它有所帮助。
答案 2 :(得分:0)
请注意getenv
(或$_ENV
为a slight difference)和$_SERVER
可访问的值之间有these are identical。
$_ENV
可直接访问当前流程的环境变量,这些变量来自操作系统。
$_SERVER
可以访问from the webserver的其他执行信息。
如何填充这些数组取决于PHP的执行方式。主要有apache-module和cgi。在这两种情况下,超全局变量可能会以非常不同的方式填充。
最好在$_SERVER
上构建脚本,这些脚本在Web服务器的上下文中运行,因为这通常包含有关PHP的更多信息,这些信息实际上是需要的。如果您开发应该在命令行上运行的php应用程序,您将更有可能希望使用$ _ENV来更好地控制环境。