3

我有一个站点范围的包含文件,我包含在主目录的页面中。但是,我在子目录中放置了一堆具有共同主题的页面。这些页面需要引用相同的包含文件。我现在遇到了包含文件中的相对链接的问题,例如图像,因为它们根据主文件是在主目录中还是在子目录中调用不同的路径。例如,"images/pic.jpg"如果从主目录调用包含,则链接将起作用,但如果从子目录调用包含,则链接将尝试转到"sub/images/pic.jpg"

我已经通过使用回到根目录的硬链接解决了这个问题,如/images/pic.jpg. 但是,我宁愿不使用硬链接,因为如果将站点移动到另一个目录等,它们可能会中断。

您调用给定包含的所有页面都必须位于同一目录中吗?或者是否有一些技术可以使包含中的相对链接起作用,即使从子目录中调用包含?

非常感谢。

4

6 回答 6

3

对于 HTML 内容,请使用这个 meta :

<head>
    <base href="http://www.domain.ca/base/website/" target="_blank" />
</head>

此元将适用于每个链接。因此,如果链接是img/blabla并且您位于子子子文件夹中,则加载的图像将是 base_href + src ...

在 PHP 中,在脚本的开头设置一个变量并将其放在每个包含之前。您也可以在每次图像加载和填充之前编写此变量。

于 2012-06-26T18:40:18.170 回答
3

没有硬性规定 - 您可以根据需要处理包含的内容,但您应该努力保持一致。

我管理的最大站点有数千个包含文件,分散在数百个子目录中。我们始终使用绝对路径,使用一个变量来表示根目录,然后根据需要连接路径的其余部分。当我们需要移动文件时,我们需要更改一个变量,然后整个站点都移动了。

您可以使用相对链接,但是当您试图找出从哪里调用哪些文件时,我发现它们更加令人困惑。

于 2012-06-26T18:44:27.633 回答
2

在较小的项目中,一个简单的常量就可以很好地完成这项工作:假设您有 2 个文件,/homepage.php并且/contact/form.php,这两个文件都包含第三个文件layout.php- 主文件(主页 + 表单)应该传播它们相对于根目录的位置通过常量访问网络服务器:

主页.php

<?php
define('WEB_ROOT', './');  // relative path to /
include('layout.php');

联系人/form.php

<?php
define('WEB_ROOT', '../');  // relative path to /
include('layout.php');

布局.php

<img src="<?php echo WEB_ROOT; ?>images/pic.jpg">
于 2012-06-26T22:53:01.607 回答
1

如果我是你,我会尝试创建一个(各种)函数来检查你当前的工作目录,然后相应地添加适当的路径尺寸

<?php

// current directory
echo getcwd() . "\n";
于 2012-06-26T18:41:06.343 回答
1

在我看来,您正在寻找的是..目录命令。这将说“上一个目录”。

从 /:

include('includes/inc.php');

来自/子:

include('../includes/inc.php');


这也适用于浏览器端。您可以在 HTML、CSS 和 JavaScript 中使用 ..。地狱,你可以在任何地方使用它。在你的命令行中,尤其是。

不过老实说,我会使用绝对路径并设置一个常量来引用站点的路径。这样您就可以将您想要的路径附加到该常量的末尾以获得绝对路径。

于 2012-06-26T18:54:19.877 回答
0

您可以在(或在 PHP 5.3+ 上)使用魔术常量__FILE__ 构建相对于包含文件的路径。dirname__DIR__

$image = dirname(__FILE__) . '/images/pic.jpg';

或者

$image = __DIR__ . '/images/pic.jpg';
于 2012-06-26T18:41:35.557 回答