2010-07-14 86 views
0
<? 
$user_image = '../images/users/' . $userid . 'a.jpg'; 
if (file_exists($user_image)) 
{ 
    echo '<img src="'.$user_image.'" alt="" />'; 
} 
else 
{ 
    echo '<img src="../images/users/small.jpg" alt="" />'; 
} 
?> 

大家好,這段代碼應該檢查一個文件,如果它不起作用,顯示另一個。 由於某些原因,它始終顯示佔位符,即使它在那裏也不會找到初始文件。 這裏有什麼顯然不對嗎? 感謝您的閱讀!文件存在測試總是失敗

+0

您是否嘗試過使用根用戶目錄而不是相對路徑的路徑? – DeaconDesperado 2010-07-14 15:10:10

+0

當前工作目錄可能不是你所期望的,realpath('../ images/users /')給你什麼,或者getcwd()的輸出? – Wrikken 2010-07-14 15:10:33

+0

你檢查過$ user_images的值了嗎?例如echo($ user_image) – macleojw 2010-07-14 15:12:14

回答

1

請嘗試使用realpathdirname代替。

<? 
$user_image = '../images/users/' . $userid . 'a.jpg'; 
if (file_exists(realpath(dirname(__FILE__) . $user_image))) 
{ 
    echo '<img src="'.$user_image.'" alt="" />'; 
} 
else 
{ 
    echo '<img src="../images/users/small.jpg" alt="" />'; 
} 
?> 
+0

乾杯芽,這個工程。 – sark9012 2010-07-14 15:21:05

4

PHP運行在不同的目錄中。嘗試echo getcwd();

2

如果htdocs目錄的子目錄地區以外的相對路徑點,則圖像將不會被通過服務器

4

file_exists發送不與相對路徑工作。嘗試是這樣的:

$user_image = $_SERVER{'DOCUMENT_ROOT'}.'/../images/users/' . $userid . 'a.jpg'; 
if (file_exists($user_image)) 
// blah blah 

但是,正如Artefacto建議,最好使用真實路徑:

$user_image = '/path/to/your/files/images/users/' . $userid . 'a.jpg'; 

它更易於維護,因爲你可以在位於不同的不同的PHP腳本中使用的代碼目錄而不必改變任何東西。

+0

http://www.php.net/manual/en/function.file-exists.php#93572 – DeaconDesperado 2010-07-14 15:11:19

+0

謝謝...我正在添加該示例。 – Cristian 2010-07-14 15:11:58

+1

爲什麼不'realpath'? – Artefacto 2010-07-14 15:13:49

0

我的意思是我並不總是最聰明的用PHP,但是你的concat位置是否正確?因爲現在,它不會解析爲/images/users/userida.jpg嗎?這真的是你想要的嗎?

+0

駁斥它,它會解析爲:'../ images/users/123a.jpg'如果$ userid是'123' – 2010-07-14 15:16:50

+0

沒錯,那正是我所說的。只是忘了.. – cwill747 2010-07-14 15:22:56

+0

這就是他想要的。 – 2010-07-14 15:52:26

0

我想你應該檢查看看realpath('../images/users/' . $userid . 'a.jpg')返回什麼。我覺得它與相對路徑有關