PHP如何找到应用程序root?

时间:2010-10-17 08:49:21

标签: php include-path

我的包含文件存在问题。当我使用require_once('somefile.php')时,我似乎无法弄清楚如何构建我的URL。如果我尝试在目录结构不同的多个地方使用包含文件,则会收到无法找到包含文件的错误。

在asp.net中,要获取我的应用程序根路径,我可以使用〜/ directory / file.aspx。 tild正斜杠总是知道我从我的网站根目录引用并找到该文件,无论我的网站中的请求来自何处。它总是返回根并从那里查找文件。

问题:如何获取网站的根路径?我该怎么做才能在网站的任何地方重用我的包含文件?我必须在网址中使用绝对路径吗?

谢谢!

7 个答案:

答案 0 :(得分:21)

$_SERVER['DOCUMENT_ROOT']应该有您的网络服务器的根路径。

编辑:如果你看看大多数主要的PHP程序。使用安装程序时,通常输入应用程序文件夹的完整路径。安装程序将把它放在整个应用程序中包含的配置文件中。一种选择是使用auto prepend file来设置变量。另一种选择是在你需要的每个页面上只需include_once()配置文件。我建议的最后一个选项是使用bootstrapping为您编写应用程序,您可以通过一个文件(通常使用url_rewrite)汇集所有请求。这使您可以在一个位置轻松设置/包含配置变量,并使它们在所有脚本中都可用。

答案 1 :(得分:10)

我通常将config.php文件存储在 ROOT目录中,并在config.php我写道:

define('ROOT_DIR', __DIR__);

然后在所有其他脚本中使用 ROOT_DIR 常量。 使用$_SERVER['DOCUMENT_ROOT']并不是很好,因为:

  • 并不总是匹配 ROOT_DIR
  • 此变量在 CGI 模式下不可用(如果您通过CRON运行脚本,则为e.x.)

答案 2 :(得分:0)

您应该使用内置的魔术常量来查找文件。 __FILE____DIR__。如果您使用PHP< 5.3你应该使用dirname(__FILE__)

E.g。

require_once __DIR__.'/../../include_me.php';

$_SERVER['DOCUMENT_ROOT']并不总是保证会返回您期望的内容。

答案 3 :(得分:0)

很高兴能够在每个脚本的顶部使用相同的代码,并且知道您的页面将正确加载,即使您在子目录中也是如此。我使用它,它依赖于你知道你的根目录被调用(通常是'htdocs'或'public_html':

defined('SITEROOT') or define('SITEROOT', substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'], 'public_html')) . 'public_html');

通过一致地定义SITEROOT,您可以访问配置文件和/或页面组件,而无需逐个脚本地调整路径,例如:存储在根文件夹之外的配置文件:

require_once SITEROOT . "/../config.php";

答案 4 :(得分:-1)

在某个配置文件中定义它。

假设您正在使用MVC样式,其中所有内容都通过单个index.php进行路由,那么

realpath('.');

将显示当前工作目录的路径(即index.php所在的位置)

那么你可以将其定义为

define('PROJECT_ROOT', realpath('.'));

如果它不是MVC并且您需要它来处理子文件夹中的文件,那么您可以在配置文件中对其进行硬编码

define('PROJECT_ROOT', 'C:/wamp/www/mysite');

然后包括你可以做的事情;

include PROJECT_ROOT . '/path/to/include.php';

答案 5 :(得分:-1)

您可以选择在.htaccess文件

中设置基目录
SetEnv BASE_PATH C:/wamp/www/mysite/

然后在PHP中,您可以使用$_SERVER['BASE_PATH']

引用它

答案 6 :(得分:-2)

试试这个:

$_SERVER['DOCUMENT_ROOT']