1

所以我在一个文件夹中设置了我的包含文件,例如header.phpnav.php和。footer.php/inc

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

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

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

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

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

4

8 回答 8

3

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

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

如何从 PHP 获取我的 URL 的“应用程序根”?

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

于 2012-10-06T22:50:50.547 回答
1

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

于 2012-10-06T22:48:56.883 回答
1

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

顺便说一句,include_once 意味着这个操作是“可选的”,意味着程序将继续执行。如果您需要包含的文件,请使用 require_once,如果不存在,程序将中断。

于 2012-10-06T22:59:50.550 回答
0

像这样包括他们

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

这可以工作!

于 2012-10-06T22:50:39.517 回答
0

我喜欢使用这种方法:

define('ROOT_DIR', dirname(__FILE__) . '/'); // Defined on the index or in the bootstrap
include(ROOT_DIR . 'subfolder/fileName.php');
于 2012-10-06T22:55:02.230 回答
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');
?>
于 2012-10-07T00:17:46.817 回答
0

$_SERVER['DOCUMENT_ROOT']为您提供您的DocumentRoot网络服务器,例如 Apache。然后你可以把它作为一个稳定的基准并从那里映射,因为它不会改变。

include_once($_SERVER['DOCUMENT_ROOT'].'/inc/header.php');
于 2012-10-07T01:19:16.093 回答
0

如果有帮助,我发现在 IIS 上运行时我必须执行 str_replace("\\","/",$_SERVER['DOCUMENT_ROOT']) 。

于 2015-08-17T21:33:32.643 回答