【问题标题】:$_SERVER['document_root'] returns /htdocs not /public_html$_SERVER['document_root'] 返回 /htdocs 而不是 /public_html
【发布时间】:2012-09-28 01:15:37
【问题描述】:

我正在寻找切换到新主机,他们提供了这个漂亮的小“临时 url”,以便在您切换之前测试您的文件。一切都很好,花花公子。所以我复制了我所有的文件。在每一页的顶部我require 来自服务器的另一个文件存储在public_html/includes/head.php。现在无论出于何种原因, $_SERVER['document_root'] var 正在返回 /public_html/htdocs/includes/head.php (服务器上不存在)而不是 /public_html/includes/head.php (确实存在) .产生的错误如下:

Warning: require_once(/home/secure31/public_html/htdocs/includes/head.php) 
[function.require-once]: failed to open stream: Permission denied in 
/home/stephe80/public_html/index.php on line 6

有罪代码:

require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/head.php');

我倾向于认为这是与他们的临时 url 设置相关的错误,但我不想通过我的 DNS 传输并发现我的所有文件都已损坏。我可以将它们更改为绝对路径,但我很好奇我是否遗漏了什么。任何见解将不胜感激。谢谢!

【问题讨论】:

  • $_SERVER['DOCUMENT_ROOT'] 基于调用文件的位置。您是否尝试查看调用文件的 $_SERVER['SCRIPT_FILENAME']$_SERVER['PHP_SELF'] 的值?

标签: php hosting


【解决方案1】:

我建议使用 __FILE__ 常量并从那里计算出您的 htdocs 文件夹。它比依赖 $_SERVER 超全局更可靠,因为这实际上因服务器而异。

示例(您将在根文件夹中的 index.php 中调用):

$htdocs = str_replace(basename(__FILE__), __FILE__, '');
define('ROOT_FOLDER', $htdocs);
require_once(ROOT_FOLDER . '/includes/head.php');

【讨论】:

  • __DIR__ 更适合这个。
  • @Marwelln 不错,我不知道他们补充说...不过它是 5.3+,所以不能在所有环境中使用
  • 感谢 ZathrusWriter 和 @Marwelln 的回复。这似乎是一种更一致的方法,我一定会考虑实施它。原来问题出在他们的测试服务器上(正如我所想的那样)。
【解决方案2】:

为了将来参考(如果有人有类似问题),事实证明问题出在他们的测试服务器上。我用我的代码原样启动它(我知道有风险),结果一切都很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多