路径开头带正斜杠的文件路径错误

时间:2014-05-08 04:57:35

标签: php

我有一个包含大量文章的文件夹,这些文章都使用相同的页眉和页脚,它们位于includes/文件夹中。我还需要添加不是文章的另一个文件,因此我不希望它与其他文章一起放在文件夹中,而是放在includes/文件夹中。我仍然希望它使用与文章相同的页眉和页脚,所以很自然地我只使用像

这样的命令

include 'article_header.php';

错误位于标题内,其中 it 中包含include个命令。由于article_header.php文件是为文章构建的,因此其中的include命令如下所示:

<?php
    include 'includes/article_social_container.php';
    include 'includes/article_search_container.php';
    include 'includes/membership_container.php';
?>

因为这显然无法用于里面的文件 includes/文件夹。所以我尝试使用正斜杠并从根目录开始,因此它适用于任何使用它的文件。

<?php
    include '/root/folder/includes/article_social_container.php';
    //other code
?>

但是,这似乎不起作用。我在过去的文件路径的开头遇到了正斜杠的问题,但它在其他时候也适用于我。

另外,为什么不会有人总是使用正斜杠并从根目录开始,只是为了保证安全?它可能就是这个问题的答案,因为除非是出于PHP中open_basedir()函数的类似目的,否则这对我来说似乎是完全合理的。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

看一下__DIR__魔法常数。它解析为它出现的脚本的目录。使用它,您只需要使用相对路径,例如......

// within the "includes" directory
include __DIR__ . '/article_social_container.php';

另一种选择是配置您的应用程序include_path。假设您的bootstrap.php目录中有一个脚本includes,其中包含以下内容......

set_include_path(implode(PATH_SEPARATOR, [
    __DIR__, // the "includes" directory
    get_include_path()
]));

这会将includes目录添加到include_path堆栈的顶部。然后,您可以从任何其他脚本中执行以下操作...

require_once __DIR__ . '/relative/path/to/includes/bootstrap.php';

include 'article_header.php';

此时所包含的任何脚本都将具有相同的include_path配置,因此他们可以简单地使用...

include 'article_social_container.php';
include 'article_search_container.php';
// etc