如何在PHP中获取更高目录的名称?

时间:2010-08-27 21:06:30

标签: php

例如,我正在编写一个脚本来检查各种设置和权限。它检查../login/includes/以查看它是否可写,但是当它显示错误时,我想显示它的完整URL。

例如,安装程序的网址为http://example.com/path/to/installer/index.php,如果错误,我希望它显示http://example.com/path/to/login/includes/而不是http://example.com/path/to/installer/../login/includes/

我知道我可以使用$_SERVER['HTTP_HOST']来获取example.com,但我需要知道如何获取path/to/

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以将parse_urlexplode()分开使用DIRECTORY_SEPARATOR常量(Unix中的'/',Windows中的'\')来更改路径。

要获取脚本的路径,请使用超全局$_SERVER数组:$_SERVER['PHP_SELF']:'当前正在执行的脚本的文件名,相对于文档根目录。'另请查看$_SERVER['REQUEST_URI']('为了访问此页面而提供的URI;例如,'/ index.html'。')和$_SERVER['SCRIPT_NAME']。让所有这些一目了然的最简单方法是在脚本中调用phpinfo()并滚动到$_SERVER vars。

如果您没有使用mod_rewrite,只需阅读$_SERVER['PHP_SELF']即可获得脚本的当前路径。然后,使用explode(DIRECTORY_SEPARATOR, $path)将路径拆分为其组件。小例子:

# get path
$path = $_SERVER['PHP_SELF'];
# split path
$path_components = explode(DIRECTORY_SEPARATOR, $path);
# remove last element of path
array_pop($path_components);
# rebuild path
$path = implode(DIRECTORY_SEPARATOR, $path_components);

答案 1 :(得分:0)

您可以尝试使用$_SERVER['REQUEST_URI']来获取完整路径。

请参阅:http://php.net/manual/en/reserved.variables.server.php

不确定为什么需要使用“..”而不是仅使用http://example.com/path/to/login/includes。假设path/to部分永远不会改变,您可以将其分配给变量。

答案 2 :(得分:0)

您还可以使用dirname

var_dump(dirname('http://example.com/path/to/installer/index.php'));
var_dump(dirname(dirname('http://example.com/path/to/installer/index.php')));
var_dump(dirname(dirname(dirname('http://example.com/path/to/installer/index.php'))));

输出:

string(36) "http://example.com/path/to/installer"
string(26) "http://example.com/path/to"
string(23) "http://example.com/path"

多个dirname有点混乱,如果你愿意,可以将它包装到一个函数中。