分享

使用finfo

 yliu277 2016-02-18

在输入输出中,文件的交互必不可少,比如文件的上传什么的。这里我们来解决一个小问题,就是如何判断用户上传文件的文件类型。

举一个应用场面:在我们的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.

函数很简单,看看官方文档就大概清楚了,这里就举一个使用例子吧,就是上传一张图片,并判断它的类型:

01<html>
02    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
03    <head>
04        <title>文件上传</title>
05    </head>
06    <body>
07    <form accept="" method="post" enctype="multipart/form-data">
08    <input  type="file" name="img[]" /><br />
09    <input  type="submit" name="s" /><br />
10    </form>
11     
12<?php
13    //上传文件信息
14    $img = $_FILES['img'];
15    if ($img)
16    {
17        //文件存放目录,和本php文件同级
18        $dir = dirname(__file__);
19 
20        $filename = $img['name'][0];
21        $tempname = $img['tmp_name'][0];
22 
23        $savepath = "$dir\\$filename";
24        $state = move_uploaded_file($tempname, $savepath);
25        //如果上传成功,预览
26        if($state)
27        {
28            echo "<img src='$filename' alt='$filename' /> ";
29        }
30         
31        $finfo = finfo_open(FILEINFO_MIME_TYPE);
32        //$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename);
33        $mime = finfo_file($finfo, $savepath);
34        echo $mime;
35 
36    }
37?>
38    </body>
39</html>

需要注意的是,finfo_file 函数需要 PHP 版本 >= 5.3.0,如果低于 5.3,那么需要到 php.ini 里,将 extension=php_fileinfo.dll 前面的分号去掉来启用。

当然,检测文件类型的方式很多种,后面我们会慢慢讲到。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多