可以使用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. 解决:Could not resolve bean definition resource pattern [/WEB-INF/classes/spring/applicationContext-*.xml]

    问题: 用Maven搭建spring.springmvc.mybatis时,运行报错: org.springframework.beans.factory.BeanDefinitionStoreExc ...

  2. IT学习的计算机网络内容

    1.一种结构:数据结构 参考书目:<大话数据结构>.<数据结构(C#语言描述)>.<剑指Offer> ①线性表部分: 线性表(上){ 数组.ArrayList } ...

  3. LASSO回归与L1正则化 西瓜书

    LASSO回归与L1正则化 西瓜书 2018年04月23日 19:29:57 BIT_666 阅读数 2968更多 分类专栏: 机器学习 机器学习数学原理 西瓜书   版权声明:本文为博主原创文章,遵 ...

  4. echarts 根据经纬度坐标在地图上描点

    var mapData = [ {'latitude':30.67, 'longitude':104.07}, {'latitude':34.76, 'longitude':113.65}, {'la ...

  5. 正则表达式(Regular Expression)分组(Group)

    基本语法 (exp)匹配exp, 并捕获文本到自动命名的组里 (?<name>exp)  自己命名分组 static void Main(string[] args)        {   ...

  6. js组合继承

    //组合继承指的是将原型链和借用构造函数(call.apply)的技术组合到一起,从而发挥二者之长的一种继承模式,//其背后的思路就是使用原型链实现对原型属性和方法的继承://而通过借用构造函数来实现 ...

  7. windows 日志清理和设置

    Windows日志路径 c:/windows/system32/winevt/logs 这里的日志文件可以ctrl+a 选中后使用shift+delete进行删除,删不掉的可以点击跳过.   在“管理 ...

  8. liunx pyinotify的安装和使用

    介绍此功能是检测目录的操作的事件 1.安装 在百度云盘下载或者在gits上下载安装包 链接:https://pan.baidu.com/s/1Lqt872YEgEo_bNPEnEJMaw 提取码:bj ...

  9. 制作docker 离线仓库

    目录 制作docker 离线仓库 1.前言 2.步骤 安装docker-distribution 编辑docker-distribution服务的配置,使用yaml进行的配置 启动仓库服务 编辑doc ...

  10. 06_Hive分桶机制及其作用

    1.Clustered By 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分. Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后 ...