我有三个文件如下
其中users.php
位于目录/
的根目录。 auth和main.php
位于测试文件夹示例/test/auth.php
& /test/main.php
。
Users.php
包含以下php代码。
<?php
include('test/main.php');
?>
auth.php
包含以下php代码。
<?php
include('../test/main.php');
?>
main.php代码
<?php
include('test/db.php');
?>
我正在执行的users.php
它工作正常,但是当我执行位于根文件夹的users.php
时,我输出完美但是如果我正在执行/test/auth.php
Warning: include(test/db.php) [function.include]: failed to open stream: No such file or directory in /path/db.php on line 2
是否有任何解决方案可以使用正确的函数来访问auth.php
错误。
答案 0 :(得分:2)
我稍微努力了解你的问题。我认为你的文件结构如下:
users.php
test
(文件夹)
main.php
auth.php
db.php
如果是这样,要包含db.php
中的main.php
,您需要做的就是include('db.php');
。当前文件夹自动位于用于确定可能包含哪些文件的路径中。
在auth.php
中,您执行include('../test/main.php');
。这是不必要的,因为您已经在test
文件夹中。你做..
以摆脱它,然后你直接回到它!您可以使用include('main.php');
简化此操作。
答案 1 :(得分:0)
包含总是相对于工作目录(实际上,相对于 PATH ,工作目录是其中的一部分)。工作目录由正在执行的脚本确定。假设您具有以下结构:
webroot/
foo.php
folder/
bar.php
当您通过命令行上的foo.php
或浏览器中的$ php foo.php
运行localhost/foo.php
时,工作目录为webroot/
。如果您运行folder/bar.php
,则工作目录为webroot/folder
。
为了确保您将文件包含在include
所在的文件中,请使用以下内容:
include __DIR__ . '/folder/bar.php`;
那,或alter your PATH将项目根添加到它并始终包含相对于项目根目录。我更喜欢上面显示的文件相对包含或autoloading。