我有一个包含在主目录中的页面中的全站点包含文件。但是,我在一个子目录中放了一堆带有共同主题的页面。这些页面需要引用相同的包含文件。我现在遇到包含文件中相对链接的问题,例如图像,因为它们根据主文件是在主目录还是子目录中调用不同的路径。例如,如果从主目录调用include,则链接"images/pic.jpg"
将起作用,但如果从子目录调用include,则会尝试转到"sub/images/pic.jpg"
。
我通过使用返回根目录的硬链接解决了这个问题,如/images/pic.jpg
中所述。但是,我宁愿不使用硬链接,因为如果将网站移动到另一个目录等,它们可能会中断。
调用给定包含的所有页面都必须位于同一目录中吗?或者是否有一些技术可以使include中的相对链接起作用,即使从子目录中调用include也是如此?
非常感谢。
答案 0 :(得分:3)
对于HTML内容,请使用此meta:
<head>
<base href="http://www.domain.ca/base/website/" target="_blank" />
</head>
此元将适用于每个链接。因此,如果链接为img/blabla
并且您位于子子文件夹中,则加载的图像将为base_href + src ...
在PHP中,在脚本的开头设置一个变量,并将其放在每个include之前。 你也可以在每个图像加载和填充之前编写这个变量。
答案 1 :(得分:3)
没有严格的规则 - 您可以根据需要处理您的包含,但您应该努力保持一致。
我管理的最大网站有数千个包含文件分散在数百个子目录中。我们使用了绝对路径,使用一个变量来表示根目录,然后根据需要连接路径的其余部分。当我们需要移动文件时,我们需要更改一个变量,并移动整个站点。
你可以使用相对链接,但是当你试图找出从哪里调用哪些文件时,我发现它们更加令人困惑。
答案 2 :(得分:1)
如果我是你,我会尝试创建一个功能(各种)来检查你当前的工作目录,然后相应地添加相应的路径尺寸
<?php
// current directory
echo getcwd() . "\n";
答案 3 :(得分:1)
在我看来,你正在寻找的是..
目录命令。这将说“上一个目录”。
来自/:
include('includes/inc.php');
来自/ sub:
include('../includes/inc.php');
这也适用于浏览器方面。您可以在HTML,CSS和JavaScript中使用..你可以在任何地方使用它。在您的命令行中,尤其是。
说实话,我会使用绝对路径,只需设置一个常量,指向站点的路径。这样你就可以将你想要的路径附加到该常量的末尾以获得绝对路径。
答案 4 :(得分:1)
在较小的项目中,一个简单的常量可以很好地完成这项工作:让我们假设您有两个文件/homepage.php
和/contact/form.php
,两个文件都包含第三个文件layout.php
- 主文件(主页+表单)应该通过常量传播它们相对于web服务器根目录的位置:
homepage.php
<?php
define('WEB_ROOT', './'); // relative path to /
include('layout.php');
接触/ form.php的
<?php
define('WEB_ROOT', '../'); // relative path to /
include('layout.php');
layout.php中
<img src="<?php echo WEB_ROOT; ?>images/pic.jpg">
答案 5 :(得分:0)
您可以将__FILE__
magic constant与dirname
(或PHP上的__DIR__
}一起使用来构建相对于所包含文件的路径。
$image = dirname(__FILE__) . '/images/pic.jpg';
或
$image = __DIR__ . '/images/pic.jpg';