PHP /正确使用子目录中的包含

时间:2012-06-26 18:35:08

标签: php hyperlink relative subdirectory

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

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

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

非常感谢。

6 个答案:

答案 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 constantdirname(或PHP上的__DIR__}一起使用来构建相对于所包含文件的路径。

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

$image = __DIR__ . '/images/pic.jpg';