2013-02-08 123 views
0

我有三个文件,其是如下PHP的包括()问题

  1. users.php
  2. auth.php
  3. main.php

其中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

只需输入正确的位置。 – Peon 2013-02-08 14:14:52

+0

include('/ test/main.php'); – jussi 2013-02-08 14:16:03

+0

'test.php'在哪里? – 2013-02-08 14:17:08

回答

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

2

我很努力地理解你的问题。我认为文件结构如下:

  • users.php
  • test(文件夹)
    • main.php
    • auth.php
    • db.php

如果是这样,要包括main.phpdb.php,您所需要做的就是include('db.php');。当前文件夹将自动位于用于确定可能包含哪些文件的路径中。

auth.php,你做include('../test/main.php');。这是不必要的,因为您已经在test文件夹中。你做..摆脱它,然后你直接回到它!您可以使用include('main.php');来简化此操作。