2012-10-18 76 views
27

我有以下文件結構:PHP需要()相對路徑錯誤

 
rootDIR 
    dir1 
     subdir1 
      file0.php 
      file1.php 
    dir2 
     file2.php 
     file3.php 
     file4.php 

file1.php需要來自DIR2這樣file3的和文件4:

require('../../dir2/file3.php') 

file2.php要求file1.php這樣的:

require('../dir1/subdir1/file1.php') 

但之後在file1中要求無法打開文件3和文件4(可能是由於路徑親戚關係)

但究竟是什麼原因,什麼能爲file2.php我這樣做file1.php正常需要文件3和文件4

+2

http://stackoverflow.com/questions/11383960/how-to-refer-back-to-public-html-root-file-using-include-after-going-up-one-file在這裏你可以找到明確的解釋。 –

回答

37

嘗試路徑之前加入dirname(__FILE__),如:

require(dirname(__FILE__).'/../../dir2/file3.php'); 

它應該包括從根目錄開始的文件

+9

如果你在5。3或更高版本,您最好使用__DIR__,與dirname(__ FILE__)相同,但爲您節省'昂貴'的dirname()調用。 –

+1

謝謝..你可以告訴我'/../dir'和'../dir' –

+1

之間的區別,在這種情況下你使用/../,因爲dirname(__ FILE__)返回一個字符串,例如:'/ root/dir1/dir2/dir3',錯過了最後一個'/',所以如果沒有合併這兩條路徑,就會變成'/root/dir1/dir2/dir3../'。 – Baronth

-1

我認爲你的cwd是dir2。 嘗試:

require("file3.php"); 
require("file4.php"); 
3

這裏一個適當的建議,是從來沒有使用這樣的事情 「../../」 在你的web應用程序的相對路徑。維護很難閱讀和可怕。

  1. 正如你可以證明。這讓你很難知道你指的是什麼。

  2. 如果您需要更改應用程序的文件夾級別或部分級別。它完全容易出錯,並且可能會破壞調試可怕的事情。

相反,define在你的主路徑(S)引導文件的幾個常數,然後使用:

require(MY_DIR.'/dir2/file3.php'); 

從那裏移動您的應用程序,是那麼容易,因爲在更換您的MY_DIR常數一個文件。