包括来自不同目录的文件

时间:2012-10-06 22:47:21

标签: php filepath

因此,我在header.php文件夹中设置了我的包含文件,例如nav.phpfooter.php/inc

然后我将文件包含在我的页面中。但是如果我有另一个文件夹,例如wiki我想将这些文件包含在wiki的页面中,那么包含的文件路径就会中断。

示例:我已将其包含在wiki目录的页面中。

<?php include_once('../inc/header.php'); ?>

我在header.php文件中还有另外两个包含,但由于我将它们包含在不同的目录中,因此都包含break,除非我在include路径中附加../

我想知道在不同目录中包含文件的最佳方法是什么,而不必返回并修复路径?

8 个答案:

答案 0 :(得分:3)

使用初始文件中的realpath创建常量,然后使用易于阅读和管理但现在是绝对路径来引用它们。

你可以在这里看到一个例子:

How can I get the "application root" of my URL from PHP?

我还建议在定义之前测试常量定义。

答案 1 :(得分:1)

最简单的解决方案?使用绝对路径。

答案 2 :(得分:1)

如果文件位于同一级别的目录中,则相对路径(带../)将相同。如果你在另一个中有一个,你需要在子目录中的那个开头有../。更改路径的唯一方法是创建一个链接作为表示主目录的子目录,尽管这可能会产生与递归过程相关的危险后果。

btw,include_once表示此操作是“可选的”,这意味着程序将继续执行。如果您需要包含文件,请使用require_once,如果程序不存在,程序将会中断。

答案 3 :(得分:0)

像这样包括他们

require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'header.php');

这可行![/ p>

答案 4 :(得分:0)

我喜欢使用这种方法:

define('ROOT_DIR', dirname(__FILE__) . '/'); // Defined on the index or in the bootstrap
include(ROOT_DIR . 'subfolder/fileName.php');

答案 5 :(得分:0)

如果您使用PHP的原生set_include_path添加包含文件夹,则可以仅按名称包含文件。

<?php
/**
 * The path to your /inc/ folder.
 */
$path = '/absolute/path/to/inc/';

/**
 * get_include_path retrieve's the current include path. 
 * It's a bad idea to over write the entire include path
 * The PATH_SEPARATOR constant is set per operating system
 */
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

/**
 * You can now include any files in /inc/ from any directory with no path
 */
include_once('header.php');
?>

答案 6 :(得分:0)

$_SERVER['DOCUMENT_ROOT']为您提供了网络服务器的DocumentRoot,例如Apache的。然后你可以把它作为一个稳定的基准和地图,因为它不会变化。

include_once($_SERVER['DOCUMENT_ROOT'].'/inc/header.php');

答案 7 :(得分:0)

我发现在IIS上运行时我必须执行str_replace(“\\”,“/”,$ _ SERVER ['DOCUMENT_ROOT']),如果有帮助的话。