可以使用pathinfo方法来通过后缀名进行判断文件类型。

/** 

    * 获取文件后缀(如果文件名为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判断文件是否为txt文件的更多相关文章

  1. iOS之使用QLPreviewController打开文件,处理txt文件出现乱码的情况

    iOS之使用QLPreviewController打开文件,处理txt文件出现乱码的情况 主要代码: - (id <QLPreviewItem>)previewController:(QL ...

  2. Android 读取assets文件下的txt文件

    android 读取assets文件下的txt文件,解决了读取txt文件的乱码问题: package com.example.com.scrollview; import java.io.Buffer ...

  3. JAVA读取TXT文件、新建TXT文件、写入TXT文件

    1.创建TXT文件 按照正常的逻辑写就好 先定义一个文件给定一个路径——>判断这个路径上这个文件存不存在——>若不存在则建立,try/catch根据程序提示自动生成就好 2.读取TXT文件 ...

  4. Python文件复制(txt文件)

    功能:这个py脚本是把一个txt文件(源文件)复制到另一个txt文件(目的文件)里面 算法思路: 程序首先判断源文件(用exists函数判断)和目的文件是否存在,如果不存在则输出文件路径不存在,如果存 ...

  5. (qsf文件 、 tcl文件 和 csv(txt)文件的区别) FPGA管脚分配文件保存、导入导出方法

    FPGA管脚分配文件保存方法 使用别人的工程时,有时找不到他的管脚文件,但可以把他已经绑定好的管脚保存下来,输出到文件里. 方法一: 查看引脚绑定情况,quartus -> assignment ...

  6. Java读取txt文件和写入txt文件

    package com.nickwong.code; import java.io.*; /** * Created by Nickwong on 31/07/2018. * 根据1-8楼的建议,优化 ...

  7. 树莓派ubuntu系统下修改config.txt文件 树莓派config.txt文件修改记录

    原文:https://www.raspberrypi.org/documentation/configuration/config-txt.md译文:http://my.oschina.net/fun ...

  8. Mac新建文件夹、txt文件、无格式文件

    新建文件夹: mkdir test 新建txt touch test.txt 新建无后缀格式文件 touch test 如果要删除文件夹 rm -r -f test

  9. CMD命令行合并多个txt文件到一个txt文件

    运行->输入CMD回车 输入: Copy G:\MyFolder\*.txt  G:\NewFolder\a.txt 回车即可 意思是将G:\MyFolder\下的所有txt文本内容复制到G:\ ...

随机推荐

  1. 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)

    --喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...

  2. docker-get拉取镜像

    docker-get Let you get all docker images without having network problem. Install curl -kLO https://s ...

  3. ide的debug

    webstom 新建立一个配置项 找到webpack.config.js,最后一行加上 devtool: "source-map" 然后点击debug

  4. Spring MVC 探讨DispatcherServlet

    先上DispatcherServlet的运行流程图(request processing):

  5. JVM描述符标识字符含义

    标识字符 含义 B byte C char D double F float I int J long S short Z boolean V void L 对象类型,如Ljava/lang/Obje ...

  6. SpringBoot中获取spring.profiles.active的值

    一.网上很多采用@Profile("dev")的方式获取,但是这个是类级别的 二.开发中可能需要代码级别 1.刚开始我想通过classpath下的文件读取方式,麻烦死了,于是换了个 ...

  7. 安装HAXM报错:failed to configure driver unknown error. failed to open driver 并提示数字签证不可用

    1.安装微软补丁:https://www.microsoft.com/en-us/download/confirmation.aspx?id=46148 2.重启后重新安装HAXM

  8. JavaScript基本使用

    基本使用 1.JavaScript组成 ECMAScript+BOM+DOM BOM的思想(重点) DOM的思想(重点) 2.使用<script></script>标签 doc ...

  9. 销售订单(SO)-API-更新销售订单

    更新销售订单和创建销售订单差不多,调用的API相同,只是传入的时候标识不一样:operation := oe_globals.g_opr_update 示例代码如下: PROCEDURE update ...

  10. 流媒体服务器搭建 ffmpeg + nginx

    第一部分: mkdir ~/working 切换到~/working目录下 cd ~/working 获取nginx源码: wget http://nginx.org/download/nginx-1 ...