我正在尝试创建一个常量来定义我的 Web 根目录,我可以使用它来构建要求、标头重定向、图像等的路径。
在根文件夹和子文件夹中的文件中使用时,我需要常量才能工作。我知道我可以很容易地用../
etc 对路径进行硬编码,但我试图让它工作的主要原因(除了干净的代码)是这样我可以在不同服务器上的各个站点上重用代码,其中路径可能会有所不同。
我的目录结构
/
index.php
/library
libSetPathRoot.php
文档根目录
echo $_SERVER["DOCUMENT_ROOT"];
返回:/home/james/web/sites/
“sites”目录包含 /etc/apache2/sites-available 中定义的各种文档根(因此我可以处理不同的脚本)。
文件内容
/index.php
require_once('library/libSetPathRoot.php'); //works fine.. of course
/库/libSetPathRoot.php
define("PATHROOT", realpath(__DIR__ .'/..').'/');
以上正确返回我的根:
echo PATHROOT;// /home/james/web/sites/site3/
我尝试了以下代码和其他各种代码来定义根路径。
这些,以及其他,都不适用于redirect()、include(),什么都没有:
define ('PATHROOT', getenv("DOCUMENT_ROOT"));
define ('PATHROOT', basename(dirname((__DIR__))));
echo PATHROOT;
其他一切似乎只返回“site3”。
工作定义适用于include()
并且require()
无论它放置在 dir 结构中的什么位置。即,如果在子目录中的文件中调用根目录或其他子目录到根目录,在根目录中的文件中,包含文件等。
但我就是不能让它为header()
重定向工作。同样,无论我在哪里使用它——根脚本、子文件夹脚本、包含的脚本。也许我需要另一种方法,但是已经阅读了许多选项并广泛尝试了它们(花了半天时间)。
为什么我的定义适用于包含但不适用于标头重定向,我怎样才能使它适用于所有?还是我必须使用两种方法,一种用于包含,一种用于重定向?
编辑
示例标头重定向我试过:
header('Location: '.PATHROOT.'page-not-found.php');
返回404:/home/james/web/sites/site3/page-not-found.php
(文件确实存在)