在PHP中获取站点的根url


Get root url of the site in PHP

考虑我的项目目录结构如下,

-public_html
  -projects
    -folder1
      index.php ''code is written here
    +folder2
  +downloads

我试图通过$_SERVER['DOCUMENT_ROOT']获得根目录,但似乎返回的字符串不是我期望的形式。

我的目录在我的网站是(基本上)public_html/projects/folder1。使用文档根,在网站上实现时返回的字符串如下:如果链接要共享,/home/site_name/public_html将不起作用,因为我正在使用它将文件存储在目录中。所以,我想要这样它应该返回www.site_name.com/downloads

__DIR__是从它被称为(folder1/index.php)的地方给出整个文档路径,但我想进入主文件夹(public_html/downloads),而不是在与索引文件相同的文件夹中。

是否有其他php函数可以帮助到达public_html中的下载文件夹,并且可以访问,如www.sitename.com/downloads/…

返回当前php文件所在的文件夹,使用下面的脚本:

$url = $_SERVER['REQUEST_URI']; //returns the current URL
$parts = explode('/',$url);
$dir = $_SERVER['SERVER_NAME'];
for ($i = 0; $i < count($parts) - 1; $i++) {
 $dir .= $parts[$i] . "/";
}
echo $dir;

您希望使用$_SERVER['SERVER_NAME']来获取站点的根URL。你可以使用这个来获取下载文件夹的URL。

$downloads_url = $_SERVER['SERVER_NAME'] . '/downloads/';

constants.php:

define('PROTOCOL',(!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://',true);
define('DOMAIN',$_SERVER['HTTP_HOST']);
define('ROOT_URL', preg_replace("/'/$/",'',PROTOCOL.DOMAIN.str_replace(array('''',"index.php","index.html"), '', dirname(htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES))),1).'/',true);// Remove backslashes for Windows compatibility

然后,在项目use的索引中