我认为这很简单,但我似乎无法找到具有我正在寻找的$_SERVER
数组的变量。
假设我的网址为http://example.com/subdirectory/index.php
我想获取除文件名以外的所有内容 - http://example.com/subdirectory/
。
我知道我可以通过一些字符串操作很容易地做到这一点,但是我想知道是否有一些我只是缺少的_server
数组。我已经尝试了所有这些,看看他们给了什么,我可以得到任何东西,但我正在寻找。
答案 0 :(得分:39)
没有一个,因为它不是一个有用的属性来跟踪。如果当前脚本不是index.*
,那么它将不会返回当前脚本的正确URL。
但是,这可能会让你得到你想要的东西:
echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
修改强>
此外,除了为Firefox安装php.net在线手动搜索工具并使用搜索关键字设置它(这将允许您通过键入类似“$_SERVER
的内容来提取php $_server
全局文档“进入你的URL栏”,你还应该知道var_dump()
和print_r()
允许你输出任何变量的全部内容,包括数组和对象。这对于调试非常有用。
答案 1 :(得分:16)
在您的情况下,字符串操作是最佳解决方案。
例如:
substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1);
答案 2 :(得分:8)
没有您想要的定义变量。
您可以使用以下代码获取完整的基本网址:
// Base folder url
$myBase = ( (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
但希望大多数时候你不需要使用完整的东西:
// Base folder server root path
$myBase = dirname($_SERVER['PHP_SELF']);
如果您正在使用某种路线系统(mod_rewrite),请小心。
答案 3 :(得分:3)
我似乎无法找到具有我正在寻找的$ _SERVER数组的变量。
因为它是虚构的字符串,仅存在于浏览器的地址栏中 它的部件被发送到服务器分开。
我想知道是否存在_server数组的变量
这很容易知道。只是print_r($_SERVER);
非常简单。
我知道我可以通过一些字符串操作轻松地做到这一点
耶。你必须编写的代码少于这个问题文本。
但是通过一些手动魔术,它可以简化为一个功能。
答案 4 :(得分:2)
您可以使用dirname()获取网址的路径。
答案 5 :(得分:1)
这对我来说非常有效,似乎是一个非常干净的解决方案。
$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$path = $protocol.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
答案 6 :(得分:0)
另一种不使用 dirname
并尊重 http
和 https
的解决方案是使用老式的获取路径方法 (source from this stackoverflow answer)。
然后检查路径是否以文件扩展名“.php”结尾。如果为 true,请将其从路径中删除。
长版
$current_url_path = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if (substr($current_url_path, -4) == ".php") {
// path ends with .php
// split string to array
$arr = explode("/", $current_url_path);
// remove last array item (after the last / which is the file)
$arrS = array_slice($arr, 0, -1);
// join the array to a string
$current_url_path = implode("/", $arrS);
}
echo $current_url_path;
缩短版
$current_url_path = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$current_url_path = substr($current_url_path, -4) == ".php" ?
implode("/", array_slice((explode("/", $current_url_path)), 0, -1)) : $current_url_path;
echo $current_url_path;
测试
此网址:http://localhost/comp-test/test.php
返回为 http://localhost/comp-test