2013-02-08 107 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');來簡化此操作。