require_once:打开流失败:没有这样的文件或目录。

24

我在 "PAGE A" 页面上有以下测试代码:

<?php
require_once('../mysite/php/classes/eventManager.php');
$x=new EventManager();
$y=$x->loadNumbers();
?>

"eventManager.php"内部包含一个require_once:

<?php
require_once('../includes/dbconn.inc');
class EventManager {...}
?>

我的文件夹结构如下:

mysite/php/classes folder and includes folder
如果我在浏览器中测试页面A,会收到以下警告信息:

Warning: require_once(../includes/dbconn.inc) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\mysite\php\classes\eventManager.php on line 3


Fatal error: require_once() [function.require]: Failed opening required '../includes/dbconn.inc' (include_path='.;C:\php5\pear') in C:\wamp\www\mysite\php\classes\eventManager.php on line 3

请问错误出在哪里?
谢谢 Luca

“错误在哪里?哈哈?你解决问题了吗?” - Michiel Pater
是的Michiel,但我认为使用绝对路径会更好! - luca
可能是重复的问题:无法打开流:没有这个文件或目录 - Vic Seedoubleyew
5个回答

22

这个错误已经很明显地说明了问题:你试图包含一个不存在的文件。

尝试使用完整路径来引用这个文件,可以使用realpath()函数,并使用dirname(__FILE__)来获取当前目录:

require_once(realpath(dirname(__FILE__) . '/../includes/dbconn.inc'));

仅供Windows用户参考:我不得不更改上面的解决方案,以require_once(realpath(dirname(FILE) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'util.php'))为基础。这在Linux中也适用。 - carlosrafaelgn

20
您需要相对于包含 eventManager.php 的文件(页面A)链接到该文件

将您的代码更改为:
require_once('../mysite/php/includes/dbconn.inc');

6

这样也能工作

 require_once(realpath($_SERVER["DOCUMENT_ROOT"]) .'/mysite/php/includes/dbconn.inc');

1

set_include_path(get_include_path() . $_SERVER["DOCUMENT_ROOT"] . "/mysite/php/includes/");

还有这个可以帮助。请参见 set_include_path()


0

它说文件 C:\wamp\www\mysite\php\includes\dbconn.inc 不存在,所以错误是你缺少了这个文件。


1
它存在是因为在Dreamweaver中已经链接到了eventManager! - luca
你真的看到这个文件了吗?你能找到它吗?如果你打开你的文本编辑器,选择“打开文件”,并输入 C:\wamp\www\mysite\php\includes\dbconn.inc,它会显示什么?文件没找到?Bingo。 - Benubird
2
@benubird:我也遇到了同样的问题,而且我检查了文件路径,文件确实存在。是什么问题导致这种情况?我感到困惑。 - AsepRoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接