2011-12-15 75 views
2

我在根文件夾中有一個文件夾uploads。根目錄中有另一個文件夾A,幷包含一個PHP文件。我在PHP文件下面的代碼:PHP中的file_exists()和文件路徑

$imgpath = '/uploads/' . $filename; 
echo '<img src="' . $imgpath . '" />'; 
echo (file_exists($imgpath))?'true':'false'; 

它會顯示圖像,因此該文件存在,但file_exists顯示false

如果我將'/uploads/'更改爲'../uploads/',則會顯示圖像並且file_exists顯示true。即使沒有圖像,file_exists總是顯示true

問題是什麼?

*更新*

我試過echo dirname(__FILE__);。它顯示/....../Auploads文件夾位於/....../uploads。此外,我有另一個類似的PHP文件在文件夾/....../m/A。所以我需要某種普遍的道路。如何獲得根路徑,即/....../

我也試過$_SERVER['DOCUMENT_ROOT'],但圖像無法顯示,儘管路徑是100%正確的。

回答

3

爲了避免出現問題,最簡單的做法是在file_exists()中使用絕對路徑。系統根/是不一樣的Web根(例如,)/var/www

嘗試

# /var/www/A/script.php 
$imgpath = '/uploads/' . $filename; 

# check in /var/www/uploads/filename 
if(file_exists(dirname(__FILE__) . '/..' . $imgpath)) { 
    echo '<img src="' . $imgpath . '" />'; 
} 

EDIT爲PHP> = 5.3

$path = "/uploads/${filename}"; 

if (file_exists(sprinf("%s/..%s", __DIR__, $path)) { 
    echo "<img src=\"{$path}\">; 
} 
+0

This Works。但即使沒有這樣的文件,`file_exists`也顯示爲'true`。爲什麼? – DrXCheng 2011-12-15 20:05:10

2

原因是您的HTML絕對路徑是相對於您的網站根目錄的,但在PHP中它是相對於文件系統根目錄。他們不一樣。

我的網站根目錄是http://www.example.com/但我的網站是在/var/www/文件系統上開發所以,如果我是在/var/www/index.php和使用的路徑/uploads/,在HTML中,這將是http://www.example.com/uploads/但文件系統,這將是/uploads/。我甚至不在我的網站目錄了!

3

以 「/」 是指開始了網頁上的相對路徑,但是在引用根目錄「/」目錄中的「上傳」文件夾的文件系統上。

嘗試./uploads表示法或使用dirname(__FILE__)