【问题标题】:php get the root of the filephp 获取文件的根目录
【发布时间】:2012-04-27 02:00:21
【问题描述】:

如何获取主文件夹的根目录?例如我在这个位置运行文件:

public_html/admin/user/etc/index.php

我想包含来自

的文件
public_html/includes/user/etc/function.php

所以我想做这样的事情:

include(get_first_default_folder().'includes/user/etc/function.php');

代替:

include('../../../includes/user/etc/function.php');

【问题讨论】:

  • 将 /path/to/public_html 添加到 include_path 或使用引导程序中的路径创建一个 PUBLIC_HTML 常量
  • 也可能是 $root = 'public_html';许多应用程序需要知道根安装目录。

标签: php include require


【解决方案1】:

我猜这有点笨拙,但它对我有用。在每个文件的开头我定义了一个变量$root。第一级变量是$root = './'(这不是必需的),第一个子文件夹是$root = '../',第二个子文件夹是$root = '../../',依此类推。 $root 总是将我带到我网站的根文件夹。

当我需要提供路径时,我只需执行 include("{$root}includes/user/etc/function.php"); 之类的操作

这帮助我摆脱了“没有这样的索引或文件”警告,所以我会坚持下去,直到找到更好的方法来做同样的事情。

或者,您可以为每个文件夹级别定义一个常量,这样您就不必在每个文件的顶部添加$root。 (没有测试过,所以我不知道下面的语法是否正确。)相反,你会做这样的事情:

  • {ROOT}includes/user/etc/function.php");` // 根级文件
  • {SUBFOLDER_LEVEL_ONE}includes/user/etc/function.php");` // 第一个子文件夹级别的文件

在某处定义常量之后:

  • define("ROOT", "./");
  • define("SUBFOLDER_LEVEL_ONE", "../");

【讨论】:

    【解决方案2】:

    我通常是这样做的。 $myDir = dirname(__FILE__);(或者您可以在 PHP v5.3+ 上使用 __DIR__)是特定文件所在的目录名称。您知道它在层次结构中的位置,因此您可以使用 $myBaseDir = realpath('../../../'.$mydir) 轻松获得基础. Realpath 扩展其规范版本的路径,不包括任何符号链接。在包含或以其他方式查找文件时,拥有完整路径还可以稍微加快速度。

    我这样做而不是使用$_SERVER['DOCUMENT_ROOT'] 的原因是,如果我从命令行运行脚本,该环境变量可能不存在 - 它由网络服务器设置。

    【讨论】:

      【解决方案3】:

      您可以使用 $_SERVER['DOCUMENT_ROOT'] 中的文档根目录。

      您可以在 index.php 文件中包含这一行。

      include("{$_SERVER['DOCUMENT_ROOT']}includes/user/etc/function.php");

      【讨论】:

      • @Mor 这在 localhost 和生产服务器中给出了不同的结果。我的生产服务器响应:/var/www/virtual/{sitename}/www,本地主机响应:/Users/{username}/Documents/www。这对我来说是不可接受的,因为我在本地网站的文件中保留了相同的副本以进行测试和升级。
      • @ZZ-bb 我刚遇到这个问题,谢谢你让我知道!我怎样才能在 localhost 服务器上做同样的事情?
      • @Mor 查看我的回答。我在文件开头定义了每个文件的子级别并使用includes,例如: include("{$root}includes/user/etc/function.php");在每台服务器上都以相同的方式工作——只需少量额外的体力劳动……
      • 我同意@ZZ-bb 的评论,如果您的网站在根目录上运行,我已经给出了这个示例。但是如果您的站点在根目录的子目录上运行,则会抛出错误。
      猜你喜欢
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多