【问题标题】:DOCUMENT_ROOT set but can't get it in script. Why?DOCUMENT_ROOT 已设置但无法在脚本中获取。为什么?
【发布时间】:2012-05-04 21:41:49
【问题描述】:

自去年 10 月以来,我的 php 脚本运行良好,我记得上次是 2 个月前,今天在执行它们时,_SERVER['DOCUMENT_ROOT'] 变量出现问题。

如果我查看 _SERVER 数组,它没有设置。而如果我在脚本中执行:

phpinfo();

然后变量在那里并设置。但称之为:

$_SERVER['DOCUMENT_ROOT']

返回空值

这是什么原因?如何在我的脚本中再次使用它?我认为原因是 php 或 apache 更新,但在过去 2 个月中两者都更新了几次。

另外,我没有在 php.ini 文件中看到 DOCUMENT_ROOT。我确实看到了 doc_root,这是不同的。

我的 php: PHP 版本 5.3.5-1ubuntu7.7 阿帕奇: PHP 版本 5.3.5-1ubuntu7.7

【问题讨论】:

  • 正如我所写,在 DOCUMENT_ROOT 中包含一个空字符串

标签: php apache apache2 ini


【解决方案1】:

DOCUMENT_ROOT 是一个环境变量,通常由 (apache) 网络服务器在通过 CGI 调用您的脚本之前设置。如果您的网络服务器有错误或配置错误,则可能不再设置此环境变量。

您可以尝试使用 mod-rewrite、mod-cgi、mod-setenv 或类似工具对其进行调试和/或修复。如果这完全超出您的想象,请联系您的服务器管理员并讨论该问题,因为它可能有很多原因。

【讨论】:

  • 是的,事实证明 var 是空的,因为我从终端调用脚本 - 因此跳过了 apache。谢谢!
【解决方案2】:

试试print_r($_SERVER),看看是否真的设置好了

【讨论】:

  • 你是从命令行调用脚本吗?而不是从浏览器进行常规调用?
  • 是的,就是这样,谢谢:)。用浏览器试过了,然后我想就像 Hakre 说的那样,这个 var 来自 apache,因此由于在终端中调用会跳过它,所以 var 是空的。
【解决方案3】:

如果可能是 Apache 配置问题:您是否在 Apache 配置文件中定义了文档根目录?

否则,您可以使用以下方法绕过它:

dirname(__FILE__)

或:

substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2018-03-28
    • 2023-01-08
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多