在输入输出中,文件的交互必不可少,比如文件的上传什么的。这里我们来解决一个小问题,就是如何判断用户上传文件的文件类型。
举一个应用场面:在我们的Web应用中,比如用户上传头像,要求是png,jpg,gif格式,接收到图片后会根据图片格式类型做不同的头像切割处理,但个别用户会传一些只更改过文件后缀的非标准图片,比如nowamagic.jpg 强行修改成 nowamagic.png,这样程序无法对该类型图片进行切割,切割失败。这个时候就需要对文件进行检测,并且仅仅根据后缀来判断是不行的。
这种这么常见的需求,PHP肯定自带了某些函数来实现的,这个函数就是 finfo_file。
finfo_file
(PHP >= 5.3.0, PECL fileinfo >= 0.1.0)
finfo_file -- finfo::file — Return information about a file,This function is used to get information about a file.
函数很简单,看看官方文档就大概清楚了,这里就举一个使用例子吧,就是上传一张图片,并判断它的类型:
02 | <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" > |
07 | <form accept= "" method= "post" enctype= "multipart/form-data" > |
08 | <input type= "file" name= "img[]" /><br /> |
09 | <input type= "submit" name= "s" /><br /> |
14 | $img = $_FILES [ 'img' ]; |
18 | $dir = dirname( __file__ ); |
20 | $filename = $img [ 'name' ][0]; |
21 | $tempname = $img [ 'tmp_name' ][0]; |
23 | $savepath = "$dir\\$filename" ; |
24 | $state = move_uploaded_file( $tempname , $savepath ); |
28 | echo "<img src='$filename' alt='$filename' /> " ; |
31 | $finfo = finfo_open(FILEINFO_MIME_TYPE); |
32 | //$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename); |
33 | $mime = finfo_file( $finfo , $savepath ); |
需要注意的是,finfo_file 函数需要 PHP 版本 >= 5.3.0,如果低于 5.3,那么需要到 php.ini 里,将 extension=php_fileinfo.dll 前面的分号去掉来启用。
当然,检测文件类型的方式很多种,后面我们会慢慢讲到。
|