【问题标题】:DOCUMENT_ROOT is not complete, missing domain folderDOCUMENT_ROOT 不完整,缺少域文件夹
【发布时间】:2011-12-06 09:45:42
【问题描述】:

到目前为止,我已经搜索了很多主题,但似乎找不到解决方案。在我的一个 php 脚本中,我试图获取服务器文档根目录,但我得到的值不完整,它只是缺少域文件夹。我相信这是由于共享托管或其他原因。

这是我目前使用的方式:

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

我得到的路径是:

/home/content/01/0151247/html

虽然我知道应该是这样的:

/home/content/01/0151247/html/mydomain

我知道,当我将它与 SCRIPT_NAME 进行比较时,我在路径中看到了 mydomain。

希望有人可以指导我。

谢谢你,很抱歉可能在社区里又问了一千次相同的问题,我真的从这里尝试过,到目前为止没有任何帮助。

更新

不幸的是,我不能简单地将我的索引文件与 DIR 一起使用,因为它是一个 wordpress 设置,我正在处理一个单独的文件夹,其中包含一些 wordpress 功能,但为此我需要一个 document_root。如果有帮助的话。

更新

显然,以下方式解决了我的问题,也许有一天它会对某人有所帮助:

realpath($_SERVER["SUBDOMAIN_DOCUMENT_ROOT"]);

基本上是因为服务器设置和域配置为子域。

感谢所有参与的人。

【问题讨论】:

  • 如果您对要求和约束提供更完整的解释,将会有所帮助。哪些文件需要知道 webroot 以及它们的位置等。旁注:$_SERVER['DOCUMENT_ROOT'] 中的值是您的文档根目录。文档根目录并不总是网络根目录。
  • 我很抱歉由于我的 php 和服务器端编程初学者水平而缺乏详细信息。反正我尽力了。非常感谢@Shad,因为我今晚确实学到了很多东西!谢谢。
  • 谢谢 ;)。如果您自己发现了一些有用的东西,请继续提交它作为您问题的答案并接受它=)

标签: php document-root


【解决方案1】:

在 PHP 5.3 之前,您可以将文件放在您想要其路径的目录中并定义一个常量:

define('ROOT_DIR', dirname( __FILE__ ));

5.3 之后你可以这样做:

define('ROOT_DIR', __DIR__);

这个想法是在每次应用程序运行时都会包含在某种config.php 中。

Magic Constants Docs

【讨论】:

  • 这很干净漂亮,但不幸的是我正在安装wordpress。我的主题中有一个自定义脚本,因此我不能简单地使用 FILE 因为我可能无法在第一级将其包含在索引中。
  • @Alex 您的ABSPATH 常量解析为什么? (包括 WP 引导程序后)
  • 感谢您回复我。如果我猜对了,我会尝试像这样包含 wp bootstrap require_once("/home/content/01/0151247/html/mydomain/wp-load.php");然后回显ABSPATH;在这种情况下,我确实会根据需要返回正确的路径 /home/content/01/0151247/html/mydomain。这有帮助吗?
  • @Alex 你能依靠ABSPATH而不是DOCUMENT_ROOT吗?既然你包含了 WP 功能,也许你可以在这种情况下依赖 WP 的常量~?
  • 是的,我可以,但只有当我手动将 document_root 输入到 wp-load.php 时我才能得到它,而且我买不起,因为它会在其他服务器上发生变化。
【解决方案2】:

更新

在配置文件中,您只需附加DOCUMENT_ROOT 变量:

$_SERVER['DOCUMENT_ROOT'] = $_SERVER['DOCUMENT_ROOT'] . '/mydomain';

这应该会为您解决。

旧解决方案

DOCUMENT_ROOT 是服务器设置的环境变量。因此,如果这是在共享主机上,则无法更改。另一种方法是为其设置自己的常量,因此在页面中包含的config 类型文件中,您可以执行以下操作:

define('DOCUMENT_ROOT', $_SERVER['DOCUMENT_ROOT'] . '/mydomain');

然后使用该常量代替$_SERVER['DOCUMENT_ROOT']。另一种选择是联系您的主机并询问它,也许这是他们的疏忽,他们会修复它。

编辑

可能使用其他人发布的__DIR__ 是更好的方法,因为DOCUMENT_ROOT 可以设置为不同的项目,至少使用__DIR__ 您应该每次都获得准确的目录。

【讨论】:

  • 不幸的是,我不能简单地将我的索引文件与 DIR 一起使用,因为它是一个 wordpress 设置,我正在处理域内的一个单独文件夹,其中包含一些wordpress 功能,但为此我需要一个 document_root
  • @Alex 你可以修改$_SERVER['DOCUMENT_ROOT'] 变量。更新了我的答案。
  • 实际上在字符串中手动定义'/mydomain'也不是一个选项,因为我明天会改变:(
  • @Alex,如果 __FILE__ 与我们所需的正确目录相呼应,那么只需执行 $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__); 就可以了。
  • 在我的情况下 FILE 返回脚本所在的直接位置。我没有任何包含来引用索引页面。在我的情况下是否仍然可以检测到根?
【解决方案3】:

就个人而言,要在 PHP 中获取文件夹的根目录,我会在我的索引文件中使用它:

define('ROOT', dirname(__FILE__));     // __DIR__ will work under PHP 5.3

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    相关资源
    最近更新 更多