• 使用finfo_file()函数检测上传图片的类型

    自带的函数
    服务器君一共花费 11.302 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的
    1. Chapter: 对输入文件类型的检测
      1. 1. 使用finfo_file()函数检测上传图片的类型

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

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

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

    <html>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <head>
            <title>文件上传</title>
        </head>
        <body>
        <form accept="" method="post" enctype="multipart/form-data">
        <input  type="file" name="img[]" /><br />
        <input  type="submit" name="s" /><br />
        </form>
    	
    <?php
        //上传文件信息
        $img = $_FILES['img'];
        if ($img)
        {
    		//文件存放目录,和本php文件同级
    		$dir = dirname(__file__);
    
    		$filename = $img['name'][0];
    		$tempname = $img['tmp_name'][0];
    
    		$savepath = "$dir\\$filename";
    		$state = move_uploaded_file($tempname, $savepath);
    		//如果上传成功,预览
    		if($state)
    		{
    			echo "<img src='$filename' alt='$filename' /> ";
    		}
    		
    		$finfo = finfo_open(FILEINFO_MIME_TYPE); 
    		//$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename); 
    		$mime = finfo_file($finfo, $savepath); 
    		echo $mime;
    
        }
    ?>
        </body>
    </html>
    

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

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

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [PHP程序设计] CodeIgniter与PHP框架设计 5 个条目
  2. [软件工程与项目管理] 了解一点WebKit 9 个条目
  3. [移动开发] Android根基概念Context 8 个条目
  4. [Python程序设计] Django Web环境配置 2 个条目
  5. [PHP程序设计] 命令式编程范式 6 个条目
  6. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  7. [移动开发] Android Studio里的Gradle 3 个条目
  8. [PHP程序设计] 对输入文件类型的检测 1 个条目
  9. [Python程序设计] Django模板系统 11 个条目
  10. [Python程序设计] Django 入门知识浅介 10 个条目
  11. [搜索引擎优化] 与百度权重有关的信息 2 个条目
  12. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
窗口 -- [博客]