网页中一些图片获取失败,会显示一个空的图片,影响美观。
服务器获取图片地址时,可以先判断图片地址是否有效,如果找不到图片,则返回默认图片地址,判断文件是否存在有多种方式:
- 图片与项目在同一服务器中,php中 file_exsits 函数可以检查文件是否存在;
- 使用文件服务器时, 可使用curl、fopen、fsockopen、file_get_contents等函数进行判断,但当文件不存在或网络不稳定时,非常耗时,如果图片数量过大更会拖慢网页运行速度。
服务器无法处理的图片,可以在前端作处理:
- 使用jq为img添加onerror事件,在加载不成功时,将图片源替换为默认图片;需要注意的是,如果再次替换不成功,可能会陷入死循环,要指定替换次数或替换后解绑onerror事件。
file_exsits:
//仅限本地文件
if(!file_exists(“text.jpg”))
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){
}
fopen:
// 只有在php
的配置开启了
“allow_url_fopen= On”
,即允许远端访问,才可用,php默认开启
if(@fopen(
'http://my.com/o/test.jpg'
,'r’)){
}
file_get_contents:
//只是将内容抓取过来,如果有404页面,会将整个html都抓取,无法http判断状态码。
$s = @file_get_contents($url);
if(strlen($s) == 0){
}
fsockopen:
//“
allow_url_fopen= Off
”时也可以使用
$parseurl=parse_url('
http://127.0.0.1/test.jpg
');
$host=$parseurl['host'];
$path=$parseurl['path'];
$fp=fsockopen($host,80, $errno, $errstr, 10);
if(!$fp){
$path=$parseurl['path'];
$fp=fsockopen($host,80,
if(!$fp){
}
fputs($fp,"GET {$path} HTTP/1.1 \r\nhost:{$host}\r\n\r\n");
if(preg_match('/HTTP\/1.1 200/',fgets($fp,1024))){
}else{
}
js:
//将为加载成功的图片替换为默认图片
$('img').each(function(){
});