doc root之外的PHP文件需要文档根目录外部和内部的文件

时间:2010-06-12 18:15:55

标签: php

我有一个类库,都是相互关联的。

有些文件位于文档根目录中,有些文件位于httpd.conf中的<Directory> and Alias功能之外

假设我有3个文件:

webroot.php (Inside the document root)
alias_directory.php (Inside a folder outside the doc root)
alias_directory2.php (Inside a **different** folder outside the doc root)

如果alias_directory2.php需要webroot.php和alias_directory.php,这不起作用。 (记住alias_directory.php和alias_directory2.php不在同一个位置)

require_once $_SERVER['DOCUMENT_ROOT'].'/webroot.php'; //(ok)
require_once $_SERVER['DOCUMENT_ROOT'].'/alias_directory.php'; //(not ok)

这不起作用,因为alias_directory.php不在doc根目录中。

类似地

require_once $_SERVER['DOCUMENT_ROOT'].'/webroot.php'; //(ok)
require_once dirname(__FILE__).'/alias_directory.php'; //(not ok)

这里的问题是dirname(__FILE__)将返回alias_directory2.php而不是alias_directory.php的路径。

这有效:

require_once $_SERVER['DOCUMENT_ROOT'].'/webroot.php'; //(ok)
require_once '/full/path/to/directory/alias_directory.php'; //(ok)

但如果我决定将我的图书馆搬到另一个地方,这是非常讨厌的,也是一个维护的噩梦。

如何解决此问题,似乎我需要一种正确解析Alias文件夹的方法。

2 个答案:

答案 0 :(得分:0)

两次使用dirname。一旦获取当前文件的目录,再次获取该目录的父目录,然后退回到另一个目录;

require_once dirname( dirname(__FILE__) ) . '/other_dir/alias_directory.php';

答案 1 :(得分:0)

PHP将无法解析alias_directory.php文件的位置。您需要自己提供alias_directory.php文件的位置。作为绝对路径,或相对于alias_directory2.php或DOCUMENT_ROOT

示例:

If your file locations look something like this:
/var/www/webroot.php
/var/otherdir1/alias_directory.php
/var/otherdir2/alias_directory2.php

From alias_directory2.php you can now include alias_directory.php by either:
require_once('/var/otherdir1/alias_directory.php');
or
require_once(dirname(__FILE__).'/../otherdir1/alias_directory.php');
or
require_once($_SERVER['DOCUMENT_ROOT'].'/../otherdir1/alias_directory.php');

要使用相对路径,alias_directory.php应位于alias_directory2.php附近或DOCUMENT_ROOT

附近

另一个解决方案是将有问题的文件夹添加到include_path,并使用require_once('alias_directory.php');没有路径规范。