2010-12-16 124 views
1

當我嘗試PHP實時路徑('./ models')返回「」或null?

realpath('./') 

我得到 「d:\項目\癢癢\ PUBLIC」

但是當我嘗試

realpath('./models'); // or './models/' 

我得到 「」 或空。這是爲什麼?奇怪的是,當我嘗試

realpath('../application/models'); 

我得到 「d:\項目\癢癢\程序\模型」,這是正確的

UPDATE

我的目錄結構看起來像下面(我使用Zend Framework)

/application 
    /models 
    /controllers 
    /views 
    /configs 
    bootstrap.php <-- this is where I am 
+1

你當前的目錄不是「應用程序」嗎? – 2010-12-16 13:41:36

+0

你目前的目錄是什麼? – Gumbo 2010-12-16 13:42:58

+0

查看更新。我在/application/bootstrap.php – 2010-12-16 14:26:21

回答

3

根據您發佈的輸出,你的目錄結構,似乎是這樣的:

D:\Projects\Tickle 
    public 
     foo.php 
    application 
     models 

我們在foo.php。通過使用realpath('./models');您可以參考不存在的D:\Projects\Tickle\public\models

UPDATE 如果你想獲得一個文件(相對於當前文件),你應該使用這樣的事情:

realpath(__DIR__ . '/models'); 

甚至更​​好(__FILE__是當前文件你在) :

realpath(dirname(__FILE__) . '/models') 

使用Zend框架,所述APPLICATION_PATH常數定義爲realpath(dirname(__FILE__) . '/../application')(在public/index.php)。

+0

我錯過了realpath('./')'公開的部分!但爲什麼?如果您熟悉Zend Framework,則代碼實際上位於'/ application/bootstrap.php'中。是否因爲代碼開始從/public/index.php調用bootstrap.php運行?使用'realpath(__ DIR__。'/ models')'工作。 '__DIR__'與'。/'不一樣嗎? – 2010-12-16 14:31:49

+1

@jiewmeng由於您在瀏覽器中調用的文件是'public/index.php',因此您處於公開狀態。bootstrap只包含在'public/index.php'中,你是對的。兩種方法的區別是:'__DIR__'返回當前**文件的目錄**。 (這是一個常量 - 每個包含的文件都不相同!)當您使用'realpath('./')'時,您不使用常量,腳本將'public/index.php'(由用戶調用)作爲開始點。使用Zend,你應該總是使用常量APPLICATION_PATH,你的模型目錄是:APPLICATION_PATH。 「/ models''。 – Nedec 2010-12-16 16:44:00

2

嘗試以下,看看你任何機會得到false

var_dump(realpath('./models')); 

如果我沒有記錯的話,你的樹結構如圖波紋管和你有以上代碼的文件是public,正確嗎?在這種情況下,你實際上試圖獲得public/models的真實路徑。

public 
    somefile.php 
application 
    models 
+0

是的,我弄錯了。哦,我錯過了realpath('./')'公開的部分!但爲什麼?如果您熟悉Zend Framework,則代碼實際上位於'/ application/bootstrap.php'中。是否因爲代碼開始從/public/index.php調用bootstrap.php運行?使用'realpath(__ DIR__。'/ models')'工作。 '__DIR__'與'。/'不一樣嗎? – 2010-12-16 14:29:55