說抓取的圖像,在這個例子中,這是一個圖像:這是對網站A.從另一臺服務器
我打電話這個圖像轉換成B網站與<img>
標籤託管http://www.basitansari.com/wp-content/uploads/logoaba.png。如果網站A的所有者刪除了這張圖片,那我怎麼知道圖片已經被PHP刪除?如果網站A的所有者刪除了圖片,我想要顯示一張notfound.jpg
圖片。我應該爲此目的使用cURL還是其他?
說抓取的圖像,在這個例子中,這是一個圖像:這是對網站A.從另一臺服務器
我打電話這個圖像轉換成B網站與<img>
標籤託管http://www.basitansari.com/wp-content/uploads/logoaba.png。如果網站A的所有者刪除了這張圖片,那我怎麼知道圖片已經被PHP刪除?如果網站A的所有者刪除了圖片,我想要顯示一張notfound.jpg
圖片。我應該爲此目的使用cURL還是其他?
if (!$fp = fopen('http://www.basitansari.com/wp-content/uploads/logoaba.png', 'r')) {
// The image cannot be retrieved, handle it here.
} else {
fclose($fp);
}
這是最快的方法,因爲它只是檢查圖像是否可以成功檢索,並不下載整個文件。
你應該叫與HEAD方法URL,並檢查狀態代碼404(未找到)或200(OK)
感謝您的回答,我現在正在嘗試這種方法。 – 2012-01-28 00:21:34
您可以直接撥打:檢查是否存在圖像源使用的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';}?>" />
檢查服務器端圖像是絕對有可能的,但它可能不是最好的解決方案。這樣做意味着所有有效的圖像將被加載兩次(服務器端和客戶端一次)。更好的方法可能是使用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="" />
如果圖像是100s megs,該怎麼辦?爲什麼他只是爲了知道它是否在那裏?有更好的方法來做到這一點。看到我的回答 – Zepplock 2012-01-28 00:03:59
@Zepplock這不會傳輸整個圖像。試試看。它只發送請求,讀取頭並讓套接字準備好接收數據 - 只要確認文件是否可訪問,「fopen()」調用就會返回。當然,這是'HEAD'方法應該做的,但是這樣做需要(稍微)更多的代碼,並且要求服務器正確地處理HEAD,這總是有可能不會。這只是初始化一個'GET',確認它是否會起作用,然後返回。 – DaveRandom 2012-01-28 00:09:41
謝謝@DaveRandom它正在工作:) – 2012-01-28 00:12:26