獲取檔案型別的方法:1、使用「$_FILES['uploadfile']['type']」語句;2、使用「finfo_file(finfo_open(FILEINFO_MIME),檔案路徑)」語句;3、通過讀取檔案頭六個位元組來進行判斷。
本教學操作環境:windows7系統、PHP7.1版、DELL G3電腦
php獲取檔案型別(不通過字尾)
方法1:$_FILES
如果是php上傳檔案,則可以用$_FILES['uploadfile']['type']
來獲取檔案型別,但是同樣會存在和pathinfo同樣的問題,該方法僅僅只能根據檔案字尾來判斷檔案型別。
方法2:php Fileinfo 獲取檔案MIME型別(finfo_open)
程式碼範例:
<?php $finfo = finfo_open(FILEINFO_MIME); // 返回 mime 型別 $filename = '.\Uploads\2.zip'; var_dump(finfo_file($finfo, $filename)); finfo_close($finfo); die;
返回結果:
說明: 如果檔案存在則返回檔案型別,否則返回false。該方法需要php5.3.0+版本。可以根據返回的結果來判斷是什麼型別的檔案。該方法即便是原檔案被改過字尾,已然可以讀到原檔案型別。
方法3:讀取檔案頭六個位元組作為判斷
<?php // 官方範例 function minimime($fname) { $fh=fopen($fname,'rb'); if ($fh) { $bytes6=fread($fh,6); fclose($fh); if ($bytes6===false) return false; if (substr($bytes6,0,3)=="\xff\xd8\xff") return 'image/jpeg'; if ($bytes6=="\x89PNG\x0d\x0a") return 'image/png'; if ($bytes6=="GIF87a" || $bytes6=="GIF89a") return 'image/gif'; return 'application/octet-stream'; } return false; } // 將檔案頭4個位元組轉換成16進位制判斷 function fileType($filename) { // 讀取檔案的前4個位元組,根據寫死判斷 $file = fopen ( $filename, "rb" ); $strFile = fread ( $file, 4 ); //唯讀檔案頭4位元組 fclose ( $file ); $strInfo = @unpack ( "C4chars", $strFile ); //dechex(),把十進位制轉換為十六進位制。 $code = dechex ( $strInfo ['chars1'] ) . dechex ( $strInfo ['chars2'] ) . dechex ( $strInfo ['chars3'] ) . dechex ( $strInfo ['chars4'] ); $type = ''; switch ($code) //寫死值查表 { case "504b34" : $type = 'application/zip; charset=binary'; break; case "89504e47" : $type = 'image/png; charset=binary'; break; default : $type = false; break; } return $type; }
說明: 這個方法有缺陷,不同型別的檔案,檔案頭4個位元組可能會相同,並且部分檔案型別表示檔案型別的字串,少於4個位元組。可以考慮將方法2和方法3結合使用。
檔案型別寫死值的對照表:http://www.garykessler.net/library/file_sigs.html
(對照表的英文大寫要改成小寫,第一個數位為0時要省略,eg:504B0304讀到的是504b34)
擴充套件知識:通過字尾獲取檔案型別
pathinfo方法
程式碼範例:
/** * 獲取檔案字尾(如果檔名為11.11,11不是字尾,會預設11為字尾) * $file string 檔案路徑或者檔名 */ function get_extension($file){ return pathinfo($file, PATHINFO_EXTENSION);
說明: pathinfo具體使用方法,可以檢視php手冊。但是該方法僅僅只能根據檔案字尾來判斷檔案型別,如果html字尾的檔案,被修改成.php的字尾之後,讀取到的則是php型別檔案。
推薦學習:《》
以上就是php怎麼獲取檔案型別(不通過字尾)的詳細內容,更多請關注TW511.COM其它相關文章!