我有一个类库,都是相互关联的。
有些文件位于文档根目录中,有些文件位于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文件夹的方法。
答案 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');没有路径规范。