找不到PHP文件,但它就在那里

时间:2013-03-19 11:14:37

标签: php

当我在运行我的网站时,它一直在告诉我

Warning: require_once(../../functions.inc.php): failed to open stream: No such file or directory in F:\xampp\htdocs\FinalYear\inc\functions\LoginOrRegister.inc.php on line 5

但是文件正好是我要求的文件上方的2个文件夹。 当我做以下事情时:

set_include_path(dirname(__FILE__)."/../../");
require_once('functions.inc.php');

它有效(我没有收到不存在的文件的错误消息但是在functions.inc.php中有一个新的对象是由database.php创建的。

$db = new database();

我可以在每个其他网站上调用它,而不是在我的LoginOrRegister.php上。它总是告诉我,当我在文件中自己创建它时,这个对象甚至不存在。有什么帮助吗?

3 个答案:

答案 0 :(得分:4)

我认为你要包含一个包含文件的文件。如果是这种情况,则相对路径必须相对于正在运行的脚本,而不是第一个脚本中包含的脚本。

使用绝对路径要容易得多(在相对路径之前使用dirname(__FILE__))。

require_once(dirname(__FILE__)."/../../functions.inc.php");

答案 1 :(得分:1)

您可能包含一个文件,该文件本身包含在另一个文件中。 PHP将包括与最初调用的文件的相对性。

所以考虑一下这个结构:

|- htdocs
    |- index.php
    |- inc
        |- test.php (A)
        |- inc
            |- test.php (B)

如果您现在调用/index.php并且index.php文件将包含inc / test.php,则将包含文件A.

如果在test.php(A)中我们也调用include inc / test.php,它将再次包含test.php(A),因为路径是相对于index.php的。如果你在web浏览器中调用/inc/test.php,那么inc / test.php中有一个include,它将test.php(B)包含在被调用的test.php(A)中

这是因为PHP处理包含类似包含文件的源代码的include会替换include行,所以基本上你将源代码移动到另一个位置。

答案 2 :(得分:0)

我总是这样做以避免这类问题:

$root = $_SERVER['DOCUMENT_ROOT']; //your website's root folder, where the index.php is
include("$root/path");