php通过文件头判断格式的方法

当我们通过PHP对一个文件进行处理的时候,有时候我们需要判断该文件的格式,从而进一步进行处理。在PHP中,我们可以通过文件头来判断文件的格式。

文件头,也称为魔数(Magic Number),是一个文件开头的特定几个字节,常用来标识文件类型。每种文件类型都有自己的魔数,根据不同的魔数来判断文件的类型,可以防止拓展名被篡改的情况下被误判。

判断文件类型的方法:

  1. 我们可以使用PHP内置的finfo函数来判断文件类型,具体示例代码如下:
<?php

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, 'test.png');
echo 'Mime Type: '. $mime_type;

?>

上面的代码会输出该文件的MIME类型,这种方法一般是最准确的。但是这个函数需要服务器安装fileinfo扩展。

  1. 我们可以通过读取文件头来判断文件类型,具体示例代码如下:
<?php

$filename = 'test.png';
$fp = fopen($filename,'r');
$bin = fread($fp,2); //读取文件头2字节
fclose($fp);

$str_info = @unpack("C2chars", $bin);
$filetype = '';
$info = '';

//获取文件类型
foreach ($str_info as $num)
{
  $filetype .= dechex($num);
}
$filetypes = array(
  'ffd8' => 'jpg',
  '8950' => 'png',
  '4749' => 'gif',
);
if (array_key_exists($filetype, $filetypes)) {
  $info .= $filetypes[$filetype];
}

echo 'File Type: '. $info;

?>

上面的代码会输出该文件的文件类型,其中数组$filetypes为常见的文件类型对应的文件头,可以根据自己的需要添加。

总结:上面的两种方法都可以通过文件头来判断文件类型。具体使用哪种方法,可以根据自己的实际情况来选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php通过文件头判断格式的方法 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 详解Objective-C设计模式编程中对备忘录模式的运用

    详解Objective-C设计模式编程中对备忘录模式的运用 概述 备忘录模式是目前非常流行的一种设计模式。它用于在不破坏封装性的前提下,捕获并保存一个对象的内部状态,并能在需要时将其恢复。这种模式常常被用于需要实现撤销操作的场景中。 Objective-C是一种基于C语言的面向对象编程语言,备忘录模式同样适用于Objective-C的开发中。下面将详细介绍O…

    C 2023年5月22日
    00
  • 关于Python的异常捕获和处理

    下面是关于Python的异常捕获和处理的完整攻略: 异常捕获和处理 在Python中,异常是指程序在运行时遇到的错误或异常状况,这可能导致程序终止运行或运行出现意料之外的结果。为了增强程序的稳定性和可靠性,我们通常在编写Python代码时使用异常捕获和处理机制来处理异常情况,让程序更具鲁棒性。 常见的异常类型 在Python中,常见的异常类型包括: 异常名称…

    C 2023年5月23日
    00
  • Java8新特性:函数式编程

    Java8新特性:函数式编程 在Java8中,函数式编程成为了一项重要的新特性。函数式编程的核心思想是将函数作为一等公民来处理,这意味着函数可以被当做参数传递,也可以被当做返回值返回。Java8通过引入函数接口、Lambda表达式、方法引用等特性来支持函数式编程。 函数接口 函数接口是函数式编程的关键组件之一,它是一个只有一个抽象方法的接口。Java8中提供…

    C 2023年5月23日
    00
  • C++学习进阶之Makefile基础用法详解

    《C++学习进阶之Makefile基础用法详解》是一篇介绍Makefile基础用法的详细攻略。在Makefile中,开发者可以使用自定义的规则来管理代码的编译和构建过程,使得项目的复杂度得以降低,并确保开发过程中代码的稳定性和一致性。以下是详细的攻略内容: 1. 什么是Makefile Makefile是一个文本文件,在Unix和Linux操作系统中最常用。…

    C 2023年5月23日
    00
  • C语言+MySQL实现推箱子游戏

    C语言+MySQL实现推箱子游戏攻略 1. 实现思路 推箱子游戏是一款比较经典的游戏,本次通过使用C语言和MySQL数据库,实现游戏的记录和排行榜功能。 实现思路分为以下几步:1. 首先需要创建MySQL数据库,包含两张表,分别记录玩家信息和游戏记录信息;2. 使用C语言编写游戏程序,并实现连接MySQL数据库的功能;3. 玩家每次完成游戏后,将游戏记录信息…

    C 2023年5月22日
    00
  • C语言将24小时制转换为12小时制的方法

    下面是“C语言将24小时制转换为12小时制的方法”的完整攻略。 核心思路 我们可以通过判断输入的小时数是上午还是下午,然后将其转换为12小时制,并输出结果。具体的思路如下: 读取用户输入的24小时制时间,并将其保存为一个整数,此处用变量hour表示。 如果用户输入的小时数在12小时之前,那么它就是上午时间,输出相应的12小时制时间和“AM”;如果用户输入的小…

    C 2023年5月23日
    00
  • 100道Linux笔试题,能拿80分就算大神(附答案)

    作为网站的作者,我很高兴为大家详细讲解《100道Linux笔试题,能拿80分就算大神(附答案)》的完整攻略。下面是攻略的具体内容: 1. 学习Linux基础知识 首先,要想拿到80分以上的分数,必须对Linux的基础知识有深入的了解。这部分知识包括但不限于Linux的历史、架构、基本操作、目录结构、文件权限、用户管理、软件包管理等内容。 对于这部分知识,建议…

    C 2023年5月22日
    00
  • C++中的自增与自减

    C++中的自增(++)和自减(–)是一对重要的运算符,可以用于对变量的值进行加或减1操作。在本文中,我们将详细讲解这两个运算符的使用方法和注意事项。 自增运算符 ++ 前置自增运算符 前置自增运算符(++i)会先将变量i的值加1,然后再将增加后的值返回。下面是一个示例: int i = 5; int j = ++i; // i 现在的值为 6,j 的值也为…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部