路径错误:路径开头带有斜杠

3
我有一个文件夹,里面有很多文章都使用相同的页眉和页脚,并存放在includes文件夹中。我还需要添加另一个文件,它不是文章,因此我不想将其放在与其他文章相同的文件夹中,而是放在includes文件夹中。尽管如此,我仍然希望它使用与文章相同的页眉和页脚,所以我自然会像这样使用命令: include 'article_header.php'; 错误出现在页眉中,其中包含了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()函数的类似目的,否则这可能是答案,因为除此之外,这对我来说似乎完全有意义。感谢您的任何帮助。

2
最好定义一个站点根目录的常量,可以根据文件位置动态确定,然后在整个应用程序中都使用这个常量。 - Mike Brant
1个回答

2

请看 __DIR__ , 这是一个魔术常量,它会解析出包含该常量的脚本所在的目录。有了它,你只需要使用相对路径就可以了,比如...

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

另一个选项是配置应用程序的include_path。假设您的includes目录中有一个名为bootstrap.php的脚本,其中包含以下内容...
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

现在我开始理解了...所以即使我将header.php包含在比includes/上一级的文件夹中,header.php内部的包含也会相对于header.php的位置而定? - BestAnswer
1
只有在前缀为__DIR__时才有效。否则,标准CWD(当前工作目录)是包含第一个include的脚本的包含树顶部文件的CWD。鉴于您组织文件的方式,我强烈建议使用我上面概述的include_path配置。 - Phil
好的,现在有一些进展,但不幸的是出现了一个错误。它说“致命错误:require_once():在/data/_numbers_/user/_number_/htdocs/search_me/includes/search_me_custom_header.php的第40行中打开所需的'/data/_numbers_/user/_number_/htdocs/search_me/includes/search_me_global funcs_and_vars.php'失败(include_path ='.:/usr/share/php:/usr/services/vux/lib/php')。include_path有问题吗? - BestAnswer
感谢您尝试帮助@Phil。 - BestAnswer
等一下...它正在工作!非常感谢!你一直都是对的。 - BestAnswer
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接