php验证文件格式
方法一:判断文件的扩展名(不能识别文件伪装) 操作思路:将文件的后缀和允许的后缀对比 - <body>
- <?php
- if(!empty($_POST)) {
- $allow=array('.jpg','.png','.gif'); //允许的扩展名
- $ext=strrchr($_FILES['face']['name'],'.'); //上传文件扩展名
- if(in_array($ext,$allow))
- echo '允许上传';
- else
- echo '文件不合法';
- }
- ?>
- <form method="post" action="" enctype='multipart/form-data'>
- <input type="file" name="face">
- <input type="submit" name="button" value="上传">
- </form>
- </body>
复制代码注意:比较扩展名不能防止文件伪装。
方法二:通过$_FIELS[]['type']类型(不能识别文件伪装) - <body>
- <?php
- if(!empty($_POST)) {
- $allow=array('image/jpeg','image/png','image/gif'); //允许的类别
- $mime=$_FILES['face']['type']; //上传文件类型
- if(in_array($mime,$allow))
- echo '允许上传';
- else
- echo '文件不合法';
- }
- ?>
- <form method="post" action="" enctype='multipart/form-data'>
- <input type="file" name="face">
- <input type="submit" name="button" value="上传">
- </form>
- </body>
复制代码注意:比较$_FIELS[]['type']不能防止文件伪装。
方法三:php_fileinfo扩展(可以防止文件伪装) 在php.ini中开启fileinfo扩展 - extension=php_fileinfo.dll
复制代码注意:开启fileinfo扩展以后,就可以使用finfo_*的函数了
- <body>
- <?php
- if(!empty($_POST)) {
- //第一步:创建finfo资源
- $info=finfo_open(FILEINFO_MIME_TYPE);
- //var_dump($info); //resource(2) of type (file_info)
- //第二步:将finfo资源和文件做比较
- $mime=finfo_file($info,$_FILES['face']['tmp_name']);
- //第三步,比较是否合法
- $allow=array('image/jpeg','image/png','image/gif'); //允许的类别
- echo in_array($mime,$allow)?'合法':'不合法';
- }
- ?>
- <form method="post" action="" enctype='multipart/form-data'>
- <input type="file" name="face">
- <input type="submit" name="button" value="上传">
- </form>
- </body>
复制代码小结:验证文件格式有三种方法 1、可以验证扩展名(不可以防止文件伪装) 2、通过$_FILES[]['type']验证(不可以防止文件伪装) 3、通过file_info扩展(可以防止文件伪装)
|