Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中尝试获取没有文件名的完整URL_Php - Fatal编程技术网

在PHP中尝试获取没有文件名的完整URL

在PHP中尝试获取没有文件名的完整URL,php,Php,我原以为这很简单,但我似乎找不到一个包含我要查找的内容的$\u SERVER数组变量 假设我的url是http://example.com/subdirectory/index.php我想获取除文件名以外的所有文件-http://example.com/subdirectory/ 我知道我可以很容易地通过一些字符串操作来实现这一点,但我想知道是否有我刚刚丢失的\u服务器数组的变量。我已经试过所有这些方法,看看它们能给我什么,除了我要找的以外,我什么都能得到。不会有,因为它不是跟踪的有用属性。如果

我原以为这很简单,但我似乎找不到一个包含我要查找的内容的
$\u SERVER
数组变量

假设我的url是
http://example.com/subdirectory/index.php
我想获取除文件名以外的所有文件-
http://example.com/subdirectory/


我知道我可以很容易地通过一些字符串操作来实现这一点,但我想知道是否有我刚刚丢失的
\u服务器
数组的变量。我已经试过所有这些方法,看看它们能给我什么,除了我要找的以外,我什么都能得到。

不会有,因为它不是跟踪的有用属性。如果当前脚本不是
索引。*
,则它不会返回当前脚本的正确URL

但是,这可能会满足您的需求:

echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
编辑:
此外,除了为Firefox安装php.net在线手动搜索工具并使用搜索关键字进行设置(通过在URL栏中键入类似“
php$\u SERVER
”的内容,您可以在
var\u dump()
print\r()上调出
global上的文档)之外,您还应该知道
var\u dump()
用于输出任何变量的完整内容,包括数组和对象。这对于调试非常有用。

您可以使用它来获取url的路径

我似乎找不到$\u服务器数组的变量,该变量包含我要查找的内容

因为它是虚构的字符串,仅存在于浏览器的地址栏中。
它的部分被分别发送到服务器

我想知道是否存在_服务器阵列的变量

这很容易知道。只需
print\r($\u服务器)非常简单

我知道我可以很容易地通过一些字符串操作来实现这一点

嗯。您必须编写的代码少于此问题文本


但通过一些手动魔法,它可以简化为一个功能

没有为您想要的内容定义变量

您可以使用以下代码获取完整的基本url:

// 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),请务必小心。

在您的情况下,字符串操作是最好的解决方案

$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$path = $protocol.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
例如:

substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1);

这对我来说非常有效,似乎是一个非常干净的解决方案

$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$path = $protocol.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

另一种解决方案是使用老式的get-path方法(),它不需要
dirname
,也不需要
http
https
。 然后检查路径是否以文件扩展名“.php”结尾。如果为true,请将其从路径中删除

长版本

$current\u url\u path=(isset($\u SERVER['HTTPS'])和&$\u SERVER['HTTPS']==='on'?“HTTPS:“http”)。“://$\u服务器[HTTP\u主机]$\u服务器[REQUEST\u URI]”;
if(substr($current\u url\u path,-4)=“.php”){
//路径以.php结尾
//将字符串拆分为数组
$arr=explode(“/”,$current\u url\u path);
//删除最后一个数组项(位于文件的最后一个/之后)
$arrS=数组\ U片($arr,0,-1);
//将数组连接到字符串
$current\u url\u path=内爆(“/”,$arrS);
}
echo$current\u url\u路径;
缩短版

$current\u url\u path=(isset($\u SERVER['HTTPS'])和&$\u SERVER['HTTPS']==='on'?“HTTPS:“http”)。“://$\u服务器[HTTP\u主机]$\u服务器[REQUEST\u URI]”;
$current\u url\u path=substr($current\u url\u path,-4)=“.php”?
内爆(“/”,数组切片((分解(“/”,$current\u url\u path)),0,-1)):$current\u url\u path;
echo$current\u url\u路径;
测试


此url:
http://localhost/comp-test/test.php
返回为
http://localhost/comp-test

但是请注意,您不应该假设dirname()等于url路径。在我的情况下,它不起作用,获取类似
http://magento.p111111.webspaceconfig.de/magento.p111111.webspaceconfig.de/
@Stefan:你可以试试JackFuchs写的
$\u服务器['REQUEST\u URI']
。也许您正在使用某种形式的URL重写,docroot将wwwroot的服务位置提高了一个级别。让我知道这对你是否有效。我在direnameWatch之前得到两个斜杠,dirname不会以斜杠结尾,除非它是主页,在主页上它只是“/”,所以如果你使用dirname($\u SERVER['PHP\u SELF'])。“/文件夹”;只有在主页上,你才会连续有两条斜线。问得好。感谢可能存在的副本或substr($\u服务器['REQUEST\u URI'],0,strrpos($\u服务器['REQUEST\u URI'],'\\')+1);在windows服务器上我不这么认为Vincent。因为我们在这里操作的是URI,而不是windows文件路径!