【问题标题】:php $_SERVER['DOCUMENT_ROOT'] too far down the treephp $_SERVER['DOCUMENT_ROOT'] 离树太远了
【发布时间】:2010-05-28 15:58:58
【问题描述】:

我在 document_root 中有多个子域。以及这些子域文件夹中的多个文件夹/类。我需要一些可以帮助我处理 include_once 路径的东西,但是 $_SERVER[DOCUMENT_ROOT] 走得太远了。如果我要使用它,并稍后传输网站文件夹,我所有的 include_once 路径都会/可能会中断。

希望我的问题很清楚...有什么建议吗?

基本上,我要做的是访问位于不同文件夹中的类,来自不同的文件。当它适用于某些文件时,它会中断其他文件,因为我编写包含语句的方式。

即。类测试{include_once'../Data/employee.php';} 将包含类测试的文件将起作用。但是假设另一个目录中的另一个文件包含类测试。它会破裂。因为另一个文件可以是 3 个文件夹深,而不仅仅是一个。

【问题讨论】:

  • 你的意思是 $_SERVER['DOCUMENT_ROOT']?
  • 哎呀,我的意思是服务器 :),感谢您发现那个错字。但话虽这么说……你有解决办法吗?
  • $_SERVER['DOCUMENT_ROOT'] 将包含每个系统上的文档根目录。所以,我认为使用它没有问题。
  • 在QA服务器上,网站存在www/test/,所以$_SERVER[DOCUMENT_ROOT]会返回www/,那我就加test。在 prod 服务器上,该网站存在于 www/apache 中。因此,当我执行 $_SERVER[DOCUMENT_ROOT) 时,它将返回 www/,然后添加测试。这是错误的。它需要添加'apache'。假设我将网站移动到 diff 服务器,使用子域“iis”,它也会被破坏。

标签: php


【解决方案1】:

您可以使用Apache's php_value directive. 为每个子域(在<virtualhost> 内)设置include path

【讨论】:

  • 我担心客户端移动服务器。如果他们移动服务器,他们将需要使用您的解决方案重新配置新的 apache 服务器。有没有没有 apache 配置的方法?
  • 你可以在目录本身的 .htaccess 文件中拥有它。
  • 我并没有完全这样做,但我认为它是正确的,因为将文件夹重新定位到真正的文档根目录是我想要的。所以本质上,如果我告诉 Apache 使用不同的文档根目录,理论上这个答案应该有效。
【解决方案2】:

这可以解决你的问题:

$relpath = "";
$tempvarrelpathdir = explode("/",dirname($SERVER['PHPSELF']));
for($i=count($tempvarrelpathdir); $i>0; $i--) if($tempvar_relpathdir[$i] != '') $relpath .= "../";

它会得到根目录的相对路径...

【讨论】:

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