要领一:pathinfo
代码示例:(引荐进修:PHP编程从入门到通晓)
/** * 猎取文件后缀(假如文件名为11.11,11不是后缀,会默许11为后缀) * $file string 文件途径或许文件名 */ function get_extension($file){ return pathinfo($file, PATHINFO_EXTENSION); }
申明: pathinfo细致运用要领,能够检察php手册。然则该要领仅仅只能依据文件后缀来推断文件范例,假如html后缀的文件,被修改成.php的后缀以后,读取到的则是php范例文件。
要领二:$_FILES
假如是php上传文件,则能够用$_FILES[‘uploadfile’][‘type’]来猎取文件范例,然则一样会存在和pathinfo一样的题目,该要领仅仅只能依据文件后缀来推断文件范例。
要领三: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+版本。能够依据返回的效果来推断是什么范例的文件。该要领即便是原文件被悛改后缀,已然能够读到原文件范例。
要领四:读取文件头六个字节作为推断。
<?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个字节。能够斟酌将要领三和要领四连系运用。
以上就是php怎样推断文件范例的细致内容,更多请关注ki4网别的相干文章!