網頁中一些圖片獲取失敗,會顯示一個空的圖片,影響美觀。
服務器獲取圖片地址時,可以先判斷圖片地址是否有效,如果找不到圖片,則返回默認圖片地址,判斷文件是否存在有多種方式:
- 圖片與項目在同一服務器中,php中 file_exsits 函數可以檢查文件是否存在;
- 使用文件服務器時, 可使用curl、fopen、fsockopen、file_get_contents等函數進行判斷,但當文件不存在或網絡不穩定時,非常耗時,如果圖片數量過大更會拖慢網頁運行速度。
服務器無法處理的圖片,可以在前端作處理:
- 使用jq爲img添加onerror事件,在加載不成功時,將圖片源替換爲默認圖片;需要注意的是,如果再次替換不成功,可能會陷入死循環,要指定替換次數或替換後解綁onerror事件。
file_exsits:
//僅限本地文件
if(!file_exists(“text.jpg”))
return false;
curl:
$ch= curl_init ();
curl_setopt($ch, CURLOPT_URL,'http://my.com/o/test.jpg');
curl_setopt($ch, CURLOPT_TIMEOUT, 1);//設置超時時間
curl_setopt($ch,CURLOPT_NOBODY,1);
// 不下載
curl_exec($ch); $httpCode =curl_getinfo($ch,CURLINFO_HTTP_CODE);
if($httpCode==404){
returnfalse;
}
fopen:
// 只有在php的配置開啓了“allow_url_fopen=
On”,即允許遠端訪問,纔可用,php默認開啓
return true;
}
file_get_contents:
//只是將內容抓取過來,如果有404頁面,會將整個html都抓取,無法http判斷狀態碼。
$s = @file_get_contents($url);
if(strlen($s) == 0){
return false
}
fsockopen:
//“allow_url_fopen= Off”時也可以使用
$host=$parseurl['host'];
$path=$parseurl['path'];
$fp=fsockopen($host,80, $errno, $errstr, 10);
if(!$fp){
$path=$parseurl['path'];
$fp=fsockopen($host,80, $errno, $errstr, 10);
if(!$fp){
returnfalse;
}
fputs($fp,"GET {$path} HTTP/1.1 \r\nhost:{$host}\r\n\r\n");
if(preg_match('/HTTP\/1.1 200/',fgets($fp,1024))){
return true;
}else{
returnfalse;
}
js:
//將爲加載成功的圖片替換爲默認圖片
$('img').each(function(){
$(this).onerror(function(key,obj){
obj.src='default.jpg';
obj.onerror=null;
});
});