2012-06-19 57 views
40

我有一個文件夾結構如下:PHP怎麼去上一級目錄名上(__ FILE__)

mydomain.com 
    ->Folder-A 
    ->Folder-B 

我從數據庫中的一個字符串,它是「../Folder-B/image1.jpg」 ,它指向文件夾-B中的圖像。

裏面的文件夾-A的腳本,我使用的目錄名(FILE)來獲取文件名和我 mydomain.com/Folder-A。在這個腳本里面,我需要得到一個字符串'mydomain.com/Folder-B/image1.jpg。我試圖

$path=dirname(__FILE__).'/'.'../Folder-B/image1.jpg'; 

這表現爲mydomain.com%2FFolder-A%2F..%2FFolder-B%2Fimage1.jpg

這是一個Facebook的分享按鈕,這不能獲取正確的圖像。任何人都知道如何正確地獲得路徑?

編輯:我希望能得到一個鏈接>>> mydomain.com%2FFolder-B%2Fimage1.jpg

+0

[本答覆佩塔提克瓦](http://stackoverflow.com/questions/11094776/php-how-to-go-one-level-up-on-dirname-file#answer-11094813 )實際上比接受的答案更好地回答了問題。 (它實際上告訴你如何向上移動水平,而不僅僅是如何避免。) – Byson

回答

114

對於PHP < 5.3用途:

$upOne = realpath(dirname(__FILE__) . '/..'); 

或者在PHP 5.3+使用:

$upOne = realpath(__DIR__ . '/..'); 
+0

問題是,我的目標文件在數據庫中保存爲../Folder-B/image1.jpg。 所以用你的方法以及我的,我得到mydomain.com/Folder-A/../Folder-B/image1.jpg。共享按鈕不能識別它,但如果我將其複製到瀏覽器,它似乎獲取正確的圖像。 – aVC

+0

@Petah - 我花了好幾個小時,然後從你的帖子中發現'realpath()'。解決了我最後的輸出完美,謝謝! – James

+1

這個答案實際上回答了這個問題。被接受的答案只是提供了一種解決方法來避免這個問題,但實際上並沒有告訴我們「如何在dirname上升級(__ FILE__)」。做得好。 – Byson

6

您可以使用PHP的dirname函數。 <?php echo dirname(__DIR__); ?>。 這會給你存儲當前目錄的父目錄__DIR__的名稱。

+0

我試過了,我可以得到這個網址。問題是,我的數據庫中保存了目標文件的名稱../。我需要在最終的網址中擺脫這一點。 – aVC

+0

也許是一個正則表達式,沿線的東西: /[^\/\\]+\.\.\/?\/ 使用它可以從路徑中刪除父/../。 '應該'工作,但沒有測試。 – Shane

+0

對不起,我在上面的正則表達式中做了一個小小的錯誤,?\ /實際上應該是?/ – Shane

12

試試這個

dirname(dirname(__ FILE__)) 

編輯:刪除 「./」,因爲它是不正確的語法。沒有它,它完美的作品。

-3

我用這個,如果有一個絕對路徑(這是一個例子):

$img = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']."/Folder-B/image1.jpg"); 

如果有圖片顯示,這就夠了:

echo("<img src='/Folder-B/image1.jpg'>"); 
1

您可以使用realpath刪除unnessesary部分:

// One level up 
echo str_replace(realpath(dirname(__FILE__) . '/..'), '', realpath(dirname(__FILE__))); 

// Two levels etc. 
echo str_replace(realpath(dirname(__FILE__) . '/../..'), '', realpath(dirname(__FILE__))); 

在窗戶也代替如果需要,請在URL中輸入/

0

一個層次了,我用:

str_replace(basename(__DIR__) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php'; 

或PHP < 5.3:

str_replace(basename(dirname(__FILE__)) . '/' . basename(__FILE__), '', realpath(__FILE__)) . '/required.php';