了解对SERVER变量的检查是针对

时间:2015-10-14 15:09:03

标签: php

我刚刚浏览了PhileCMS的源代码并遇到了以下脚本:

在此处查看此代码:

if (isset($this->server['PHP_SELF'])) {
    $url = preg_replace('/index\.php(.*)?$/', '', $this->server['PHP_SELF']);
}

现在$this->server实际上是$_SERVER;

我想知道,如果条件真正检查,上面是什么?

可以看到整个脚本 HERE

1 个答案:

答案 0 :(得分:2)

根据PHP docs$_SERVER['PHP_SELF']包含:

  

当前正在执行的脚本的文件名,相对于文档根目录。

现在我不确定为什么此代码存在或为什么要检查isset(我很确定永远不会出现这样的情况: $_SERVER['PHP_SELF']未设置),但它正在做的是获取网址并删除 index.php及其后的所有内容。

例如,如果您导航到:http://example.com/foo/bar/index.php/info?test=123,则$_SERVER['PHP_SELF']将为/foo/bar/index.php/info(不包括查询字符串)。因此,显示的preg_replace语句会移除/index.php/info,从而离开/foo/bar

更新:您是否注意到此代码所属函数的名称public function getBaseUrl()。它获取index.php的路径(或"基本URL")。它正在确定安装到何处的路径。