2013-01-23 77 views
2

可能重复已经包含在PHP文件的文件:
PHP: Why such weird behaviour when I include a file from another directory which also includes a file?包括[警告(!)

我有一个问题,包括有一个包含文件的文件。

  • core.inc.php PATH:www/test/includes/core.inc.php

  • 列入core.inc.php文件:include_once ('../../connectdb.php');

  • connectdb.php PATH:www/connectdb.php

  • 的index.php PATH :www/test/index.php

  • 在在index.php中cluded文件:include_once ('included/core.inc.php');

当我运行的index.php以下警告弹出:

(!) Warning: include_once(../../connectdb.php): failed to open stream: No such file or directory in G:\wamp\www\test\includes\core.inc.php on line 7

(!) Warning: include_once(): Failed opening '../../connectdb.php' for inclusion (include_path='.;C:\php\pear') in G:\wamp\www\test\includes\core.inc.php on line 7

为了dinamically更改所包含路径最佳做法是什么?请帮我解决我的问题。谢谢。

+4

用当前文件的目录开始相对路径,即'require_once dirname(__ FILE__)。 '/relative/path/to.file.php';' – DCoder

+0

提供相对于您正在编辑的文件的路径。 – Deadlock

+1

这是一个明确定义的问题,使用'__FILE__'和/或'__DIR__ '得到你的文件的路径,而不是'include_path'。有很多问题,例如,这个问题的答案似乎相当不错,但问题本身有点长。刚刚阅读接受的答案:http://stackoverflow.com/questions/3099357/php-why-such-weird-behaviour-when-i-include-a-file-from-another-directory-which?rq=1 – Nanne

回答

4

为了避免这样的问题,你可以使用PHP魔术常量__DIR__将由当前文件的目录来代替。

例如:

include_once(__DIR__ . '/relative/path/to/file-to-include.php'); 

注意__DIR__仅适用于PHP 5.3+。在该版本下面,您可以用dirname(__FILE__)替换__DIR__

顺便说一句,autoloading是避免包含混乱的好习惯。

+1

甚至是“dirname(__ FILE__)” –

+0

我有以下结果:'Warning:require_once(G:\ wamp \ www \ testincludes/core.inc.php) :未能打开流:在第13行G:\ wamp \ www \ test \ index.php中没有这样的文件或目录。反斜杠和正斜杠... – xnote

+2

正向/反向斜线混合不应该是PHP的问题Windows(引用手册:'在Windows上,斜杠(/)和反斜杠(\)用作目录分隔符。在其他环境中,它是正斜杠(/)。')。问题不在文件'core.inc.php'上,而是在文件'index.php'上,它似乎不存在于'G:\ wamp \ www \ test'中。请仔细阅读您收到的错误消息。 –

1

列入index.php文件:include_once ('./includes/core.inc.php');

0

你在index.php文件指向core.inc.php相对路径是完全错误的。

你是在说:“从index.php文件的位置,上目录了,它就在那里。”但是“www”目录中没有文件“core.inc.php”。

正确的路径是“包括/ core.inc.php”:从当前目录“WWW /试验”一个目录成“包括”和它是。

任何提及使用__DIR____FILE__的魔术常量也可以工作,但这是一种不同的方法:它将通过使用相对加法创建文件的绝对路径。它的工作原理是一样的,但看起来更复杂。

如果您正在使用类,请尝试实施自动加载。那么你不需要明确包含文件,只需使用类。

+0

你能提示我应该使用哪些课程吗? __FILE__实际上显示文件所在的目录,反斜杠如'G:\ wamp \ www \ test \ includes \ core.inc.php'。但是,include函数需要像'/ includes/core.inc.php'这样的正斜杠路径。当你追加都认为它会中断。 – xnote

+0

对不起,路径输入错误。当然,我已经检查了包含的路径,正如你所说的。 'include_once('indcludes/core.inc.php');'检查我已更正 – xnote

+0

PHP并不关心斜线是向前还是向后 - 它会自动将它们转换为它所运行平台上所需的斜杠。 'include'只需要路径(相对或绝对)和文件名。你甚至可以在连接'__DIR__'和最后一部分的字符串时混合它们。唯一可以肯定的是:不要忽略斜线! '__DIR__'的结果不以斜杠结尾。 – Sven

相关问题