【问题标题】:Define absolute path for PHP-include [duplicate]定义PHP-include的绝对路径[重复]
【发布时间】:2018-09-16 13:35:45
【问题描述】:

我目前正在使用此方法为我的 HTML 模板添加某些部分:

<?php include $_SERVER['DOCUMENT_ROOT'] . "/common.php"; ?>。 到目前为止,这对我来说效果很好,但只有一个问题。我的主域(在此示例中我们称之为 test.com)附加到根文件夹。但是我的子域附加到另一个文件夹。所以它看起来像这样:

test.com | /var/www/Root Folder

sub1.test.com | /var/www/Root Folder/Subdomains/Essentials/Sub1

这意味着$_SERVER['DOCUMENT_ROOT'] 将无法正常工作,因为根虚拟已更改。我知道你可以使用:<?php include_once '/var/www/Root Folder/common.php'; ?>。但这很痛苦,因为如果我将我的网站移动到另一台服务器,那么我必须再次更改绝对路径。

有解决这个问题的方法吗?

【问题讨论】:

  • 是否可以使用__DIR__ 常量来解决它?
  • $_SERVER['DOCUMENT_ROOT'] 没有帮助,因为服务器多次使用路径别名。
  • 如果能够移动它是一项要求,该文件应该是子域应用程序代码库的一部分,并且您不应链接到另一个应用程序或站点来包含它。所以你可以复制它,通过 composer 等将它作为组件提供。
  • 阅读this answerthis answerthis answer了解类似问题。

标签: php


【解决方案1】:

因此,我建议使用 __DIR__ 常量或 dirname(__FILE__),它适用于旧版本的 PHP,正如 Justinas 在下面的评论中所概述的那样。

__DIR__ 本质上定义了正在处理的文件当前所在的目录。因此,如果您的脚本位于同一目录中,您可以输入如下内容:

index.php is in __DIR__

如果 sub1.test.com 需要在根目录中包含某些内容,并且您在子域、必需品等中......您会这样做:

include_once(__DIR__ . "/../../../common.php")

这将遍历 3 个目录,到达根目录,并包含该文件。

【讨论】:

  • 对于旧 php:dirname(__FILE__)
  • 谢谢@Justinas,我会更新我的答案。
  • 看起来不错。但这意味着如果我在 sub1 文件夹顶部添加另一个子域,则它需要返回 4 个目录,对吧?
  • @CodeGeekBot ../ 进入父目录
猜你喜欢
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2014-03-14
相关资源
最近更新 更多