PHP/includes在子目录中的正确使用

PHP/includes在子目录中的正确使用,php,hyperlink,subdirectory,Php,Hyperlink,Subdirectory,我有一个站点范围的包含文件,它包含在主目录的页面中。然而,我已经在一个子目录中放置了一堆具有共同主题的页面。这些页面需要引用相同的include文件。我现在遇到了一些问题,比如图像的include文件中的相对链接,因为它们根据主文件是在主目录还是在子目录中调用不同的路径。例如,如果从主目录调用include,则链接“images/pic.jpg”将起作用,但如果从子目录调用include,则链接将尝试转到“sub/images/pic.jpg” 我通过使用返回根目录的硬链接解决了这个问题,如/i

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

我通过使用返回根目录的硬链接解决了这个问题,如
/images/pic.jpg
。然而,我不想使用硬链接,因为如果网站被移动到另一个目录等,它们可能会断开

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


非常感谢。

对于HTML内容,请使用此元数据:

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

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

在PHP内部,在脚本开头设置一个变量,并将其放在每个include之前。
您也可以在每次加载图像之前编写此变量。

如果我是您,我会尝试创建一个函数(排序)来检查您当前的工作目录,然后相应地添加适当的路径维度

<?php

// current directory
echo getcwd() . "\n";

您可以将
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu
与(或在PHP5.3+上使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

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


没有硬性规定——你可以随心所欲地处理你的收入,但你应该努力做到始终如一

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


您可以使用相对链接,但当您试图找出从何处调用哪些文件时,我发现它们更容易混淆。

在我看来,您实际查找的是
目录命令。这将显示“上一个目录”

From/:

include('includes/inc.php')

发件人/分:

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


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


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

在较小的项目中,一个简单的常数就可以完成这项工作:假设您有两个文件,
/homepage.php
/contact/form.php
,这两个文件都包含第三个文件
layout.php
——主文件(homepage+form)应通过常量传播其相对于Web服务器根目录的位置:

homepage.php

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

问题在于,include是从主目录和子目录中的一个文件调用的,因此,根据调用include的位置,向上移动一个目录意味着不同的事情。关于绝对路径,您可能是对的。这很好。如果include文件中包含的代码引用了基于自身的特定路径,那么您实际上可以y获取包含的文件的路径,无论该文件是从何处包含的:
\uuuu文件\uuuu
<?php
define('WEB_ROOT', './');  // relative path to /
include('layout.php');
<?php
define('WEB_ROOT', '../');  // relative path to /
include('layout.php');
<img src="<?php echo WEB_ROOT; ?>images/pic.jpg">