例如,我正在编写一个脚本来检查各种设置和权限。它检查../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/
有什么想法吗?
答案 0 :(得分:1)
您可以将parse_url
与explode()
分开使用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
有点混乱,如果你愿意,可以将它包装到一个函数中。