您好,登錄后才能下訂單哦!
這篇文章主要講解了“php不通過后綴如何獲取文件類型”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“php不通過后綴如何獲取文件類型”吧!
獲取文件類型的方法:1、使用“$_FILES['uploadfile']['type']”語句;2、使用“finfo_file(finfo_open(FILEINFO_MIME),文件路徑)”語句;3、通過讀取文件頭六個字節(jié)來進行判斷。
本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版、DELL G3電腦
php獲取文件類型(不通過后綴)
方法1:$_FILES
如果是php上傳文件,則可以用$_FILES['uploadfile']['type']
來獲取文件類型,但是同樣會存在和pathinfo同樣的問題,該方法僅僅只能根據(jù)文件后綴來判斷文件類型。
方法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;
返回結(jié)果:
說明: 如果文件存在則返回文件類型,否則返回false。該方法需要php5.3.0+版本??梢愿鶕?jù)返回的結(jié)果來判斷是什么類型的文件。該方法即便是原文件被改過后綴,已然可以讀到原文件類型。
方法3:讀取文件頭六個字節(jié)作為判斷
<?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個字節(jié)轉(zhuǎn)換成16進制判斷 function fileType($filename) { // 讀取文件的前4個字節(jié),根據(jù)硬編碼判斷 $file = fopen ( $filename, "rb" ); $strFile = fread ( $file, 4 ); //只讀文件頭4字節(jié) fclose ( $file ); $strInfo = @unpack ( "C4chars", $strFile ); //dechex(),把十進制轉(zhuǎn)換為十六進制。 $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個字節(jié)可能會相同,并且部分文件類型表示文件類型的字符串,少于4個字節(jié)??梢钥紤]將方法2和方法3結(jié)合使用。
擴展知識:通過后綴獲取文件類型
pathinfo方法
代碼示例:
/** * 獲取文件后綴(如果文件名為11.11,11不是后綴,會默認11為后綴) * $file string 文件路徑或者文件名 */ function get_extension($file){ return pathinfo($file, PATHINFO_EXTENSION);
說明: pathinfo具體使用方法,可以查看php手冊。但是該方法僅僅只能根據(jù)文件后綴來判斷文件類型,如果html后綴的文件,被修改成.php的后綴之后,讀取到的則是php類型文件。
感謝各位的閱讀,以上就是“php不通過后綴如何獲取文件類型”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對php不通過后綴如何獲取文件類型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。