2012-01-27 312 views

回答

1
if (!$fp = fopen('http://www.basitansari.com/wp-content/uploads/logoaba.png', 'r')) { 
    // The image cannot be retrieved, handle it here. 
} else { 
    fclose($fp); 
} 

這是最快的方法,因爲它只是檢查圖像是否可以成功檢索,並不下載整個文件。

+0

如果圖像是100s megs,該怎麼辦?爲什麼他只是爲了知道它是否在那裏?有更好的方法來做到這一點。看到我的回答 – Zepplock 2012-01-28 00:03:59

+0

@Zepplock這不會傳輸整個圖像。試試看。它只發送請求,讀取頭並讓套接字準備好接收數據 - 只要確認文件是否可訪問,「fopen()」調用就會返回。當然,這是'HEAD'方法應該做的,但是這樣做需要(稍微)更多的代碼,並且要求服務器正確地處理HEAD,這總是有可能不會。這只是初始化一個'GET',確認它是否會起作用,然後返回。 – DaveRandom 2012-01-28 00:09:41

+0

謝謝@DaveRandom它正在工作:) – 2012-01-28 00:12:26

0

你應該叫與HEAD方法URL,並檢查狀態代碼404(未找到)或200(OK)

+0

感謝您的回答,我現在正在嘗試這種方法。 – 2012-01-28 00:21:34

0

您可以直接撥打:檢查是否存在圖像源使用的fopen,如果沒有顯示notfound.jpg 。 @用於禁止警告

<img src="<?php if (@fopen("http://www.basitansari.com/wp-content/uploads/logoaba.png", "r")) {echo 'http://www.basitansari.com/wp-content/uploads/logoaba.png';} else{echo 'notfound.jpg';}?>" /> 
2

檢查服務器端圖像是絕對有可能的,但它可能不是最好的解決方案。這樣做意味着所有有效的圖像將被加載兩次(服務器端和客戶端一次)。更好的方法可能是使用JavaScript來處理破碎的圖像。以下代碼只會在加載圖像時發生錯誤時採取措施,並將其替換爲您指定的圖像:

<script type="text/javascript"> 
function brokenImage(obj) { 
    obj.onerror = ''; 
    obj.src = 'path/to/notfound.jpg'; 
    return true; 
} 
</script> 
<img onerror="brokenImage(this);" src="broken.jpg" alt="" /> 
相關問題