php包含相对路径不起作用 - DocumentRoot问题?MAMP?

4

我觉得一定是我忽略了什么,但我似乎无法使用相对路径按预期工作。在MAMP中,DocumentRoot在httpd.conf文件中进行了配置:

# MAMP DOCUMENT_ROOT !! Don't remove this line !!
DocumentRoot "/Applications/MAMP/projects/journalproject”

我打开网站http://localhost:8888/,如果我使用这样的路径,则包含文件能够正常工作:

<?php include('nav.php'); ?>

但是,如果我把我的包含文件放到一个文件夹里,那么该包含文件将不会显示在页面上:

<?php include('/includes/nav.php'); ?>

这是包含文件的路径:/journalproject/includes/nav.php

我正在从这里调用它:/journalproject/journals/index.php

如果我使用以下路径,我也可以使包含工作:

<?php include('../includes/nav.php'); ?>

我不确定为什么在使用相对路径时,锚点链接可以轻松找到相同的文件,而在指定包含文件时却需要指定路径:

<a href="/includes/nav.php">Find nav include</a>

我不确定该从哪里开始。任何帮助都将不胜感激。


<?php include('includes/nav.php'); ?> 相对于您的文档根目录(假定您的脚本正在运行或您的包含路径已设置)。 - fbas
感谢您的帮助。我尝试过 <?php include('includes/nav.php'); ?>,但是没有成功,即使是在位于根目录的文件上也是如此。我认为这是我的误解,即Apache的文档根目录也会决定PHP的路径。我尝试了另一种方法,它可以工作:<?php include($_SERVER['DOCUMENT_ROOT'].'/includes/include-nav.php'); 如果我输出变量,它会给我“/Applications/MAMP/projects/journalproject”。我希望有一个更简洁的方法。我想我会继续使用 <?php include('../includes/nav.php'); ?>。 - Russ M
很高兴你取得了一些成功。在PHP中,您还可以指定INCLUDE PATH,这些路径将被搜索以获取您的包含/需要。这样,您就可以指定相对于包含路径的文件,而不必意识到调用包含/需要的特定.php文件位于何处:http://php.net/manual/en/function.set-include-path.php,例如`set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'])`。 - fbas
2个回答

0
我认为以下代码无法正常工作,因为它被视为绝对路径,因为它以“/”开头,这告诉PHP在Unix操作系统中从字面上的“/”目录查找: <?php include('/includes/nav.php'); ?> 尝试使用以下代码: <?php include('includes/nav.php'); ?>

0

您可以指定相对于包含路径的文件,而不必意识到调用include/require的特定.php文件位于何处:

http://php.net/manual/en/function.set-include-path.php

set_include_path(get_include_path() . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'])

set_include_path(get_include_path().PATH_SEPARATOR.$_SERVER['DOCUMENT_ROOT'])


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