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

MrV*_*mes 20 php

我认为这很简单,但我似乎无法找到$_SERVER具有我正在寻找的数组的变量.

让我们说我的网址是http://example.com/subdirectory/index.php 我想得到除文件名之外的所有文件 - http://example.com/subdirectory/.

我知道我可以通过一些字符串操作很容易地做到这一点,但我想知道是否有一个我不知道的_server数组变量.我已经尝试了所有这些,看看他们给了什么,我可以得到任何东西,但我正在寻找什么.

Lès*_*sté 41

没有一个,因为它不是一个有用的属性来跟踪.如果当前脚本不是index.*那么,它将不会返回当前脚本的正确URL.

但是,这可能会让你得到你想要的:

echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
Run Code Online (Sandbox Code Playgroud)

编辑:
另外,除了安装用于Firefox的php.net在线手动搜索工具并使用搜索关键字设置它(这将允许您$_SERVER通过php $_server在URL栏中键入类似" " 的内容来提取全局文档),也应该知道var_dump()print_r()允许您输出任何变量的全部内容,包括数组和对象.这对于调试非常有用.


小智 16

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

例如:

substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1);
Run Code Online (Sandbox Code Playgroud)

  • 文森特我不这么认为.因为我们在这里操作URI,而不是windows文件路径! (3认同)

Car*_*uro 8

没有为您想要的定义变量.

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

// Base folder url
$myBase =  ( (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
Run Code Online (Sandbox Code Playgroud)

但希望大多数时候你不会要求使用完整的东西:

// Base folder server root path
$myBase = dirname($_SERVER['PHP_SELF']);
Run Code Online (Sandbox Code Playgroud)

如果你正在使用某种路由系统(mod_rewrite),请小心.