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


网页中一些图片获取失败,会显示一个空的图片,影响美观。
 
服务器获取图片地址时,可以先判断图片地址是否有效,如果找不到图片,则返回默认图片地址,判断文件是否存在有多种方式:
  • 图片与项目在同一服务器中,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){
   return false ;
}
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){
     return false;   
}
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{
    return false;
}
js:
//将为加载成功的图片替换为默认图片
$('img').each(function(){
    $(this).onerror(function(key,obj){
        obj.src='default.jpg';
       obj.οnerrοr=null; 
     });
});



你可能感兴趣的:(PHP开发)