php 检测文件是否存在的几种方式

来源:互联网 发布:数据分析师考试网 编辑:程序博客网 时间:2024/04/29 20:56

网页中一些图片获取失败,会显示一个空的图片,影响美观。
 
服务器获取图片地址时,可以先判断图片地址是否有效,如果找不到图片,则返回默认图片地址,判断文件是否存在有多种方式:
  • 图片与项目在同一服务器中,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默认开启 
if(@fopen('http://my.com/o/test.jpg','r’)){
     return true;
file_get_contents:
//只是将内容抓取过来,如果有404页面,会将整个html都抓取,无法http判断状态码。
$s @file_get_contents($url);
if(strlen($s) == 0){
    return false
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){
     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; 
     });
});



    0 0
    原创粉丝点击