当我包含这样的文件时:include("/testsitedir/include/subdir/inc.php");
在this.php
文件夹中名为testsitedir
的文件上,我收到典型的failed to open stream: No such file or directory in ...\testsitedir\this.php
错误。
但是,当我编写一个简单的HTML锚标记时:<a href="/testsitedir/include/subdir/inc.php">Test Link</a>
(URL与包含的URL相同)浏览器会自动为我解析URL并知道/
表示我的网站根目录。
那么,我可以如何使我的包含以与HTML锚标记相同的方式解析URL?
为了更好地理解,这就是我想要做的。我有一个头文件位于名为content
的子目录中,该目录位于站点的根目录中。我试图弄清楚如何使用相同的URL包含每个文件的标头。我的方法是只使用头文件的绝对URL。这成为一个问题的原因是因为我希望能够使用单个CONSTANT
轻松更改网站的根目录。此外,站点的根目录不会始终是服务器的根目录。因此,当我想将网站放在子目录www.example.com/view/site/siteroot/
中的服务器上时,我会将常量SITE_ROOT
定义为/view/site/siteroot
并包含使用include(SITE_ROOT."/includes/file.php);
的所有文件但是包含不会将/
forwardslash识别为站点根分隔符。我打算使用实际的站点名称,但出于安全原因,我不想启用url_include
。
答案 0 :(得分:1)
使用PHP中定义的DOCUMENT_ROOT
变量:
include($_SERVER['DOCUMENT_ROOT'] . "/testsitedir/include/subdir/inc.php");
从the docs变量包含:
当前脚本所在的文档根目录 执行,如服务器配置文件中所定义。