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){
   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; 
     });
});



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章