TL;DR:当尝试在 PHPinclude
命令包含的页面上使用相对链接时,有哪些替代此页面上的最后一个代码示例的方法?
我正在尝试include()
链接到文档的.css
文件,问题是我需要从多个(不同)目录中包含此文件。我的目录结构有点像这样:
www
├── (getpath.php)
│
├── css
│ └── style.css
├── php
│ └── header.php
└── content
├── index.php
└── posts
└── index.php
(我header.php
在两个index.php
文件中都包含。header.php
是引用的文件style.css
(浏览器需要能够找到)。示例:使用../css/style.css
时,CSS 将显示在 mycontent/index.php
但不在 my 中content/posts/index.php
,因为浏览器正在寻找content/css/index.php
.)
当放置在文档根目录的子目录中时,该网站也应该可以工作,而不是在文档根目录本身。出于这个原因,我不能只使用/css/style.css
(相对于服务器根)链接到我的 CSS 样式表。
我认为(如果我错了,请纠正我!)告诉浏览器在哪里可以找到 CSS 文档的最简单方法可能是指定相对于文档 root的路径。因为我希望我的网站位于文档根目录的子目录中(并且希望避免使用config
文件来存储子目录),所以我需要找出网站所在子目录的相对路径。我的想法是放置getpath.php
在我网站的根目录(不是文档根目录)中调用的文件。在那个文件中,我写了以下内容:
<?php
define('PROJECT_SUBDIRECTORY', $_SERVER['PHP_SELF']);
?>
但是,我注意到这给了我用户在浏览器中请求的 PHP 文件的相对目录(例如content/index.php
),而不是包含的文件(getpath.php
)。我也读过那PHP_SELF
是基于的REQUEST_URI
,这不安全。我在这里找到了这个解决方案:
define('PROJECT_DIR', preg_replace('/^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', __DIR__));
它工作得很好,但我想知道是否有“更好”的方法来做到这一点。我没有找到一个变量——上面的解决方案真的是唯一的方法吗?
我应该使用前面的代码示例还是有更好的方法?
我应该改变我的目录结构吗?其他人如何解决这个问题?
编辑:我的网络服务器上有多个(完全独立的)网站,它们都在文档根目录的子目录中(例如/documentroot/project1/
,,/documentroot/project2/
...)
我试图让网站在子目录中工作。我显然可以通过 将 CSS 发送到浏览器/css/style.css
,但如果网站位于子目录中,这将不起作用。我还想避免使用配置文件来指定我的项目相对于文档根目录的路径。
另一个编辑:问题是我项目中的每个 php 文件都/documentroot/project1
包含一个使用 PHPinclude
函数的导航栏。导航栏保存为/documentroot/project1/php/header.php
,导航栏的 css 保存为/documentroot/project1/css/style.css
. 当使用相对链接(告诉浏览器在哪里style.css
)时,浏览器仍然认为路径是相对于index.php
而不是相对的header.php
,所以它会在与index.php
.
问题:不同目录中有多个 index.php 文件,我不想将我的 CSS 文件夹复制并粘贴到每个包含index.php
文件的目录中。