因此,我在header.php
文件夹中设置了我的包含文件,例如nav.php
,footer.php
和/inc
。
然后我将文件包含在我的页面中。但是如果我有另一个文件夹,例如wiki
我想将这些文件包含在wiki的页面中,那么包含的文件路径就会中断。
示例:我已将其包含在wiki
目录的页面中。
<?php include_once('../inc/header.php'); ?>
我在header.php文件中还有另外两个包含,但由于我将它们包含在不同的目录中,因此都包含break,除非我在include路径中附加../
。
我想知道在不同目录中包含文件的最佳方法是什么,而不必返回并修复路径?
答案 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']),如果有帮助的话。