PHP Conference Japan 2024

exif_imagetype

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

exif_imagetype确定图像的类型

描述

exif_imagetype(字符串 $filename): 整数|false

exif_imagetype() 读取图像的前几个字节并检查其签名。

exif_imagetype() 可用于避免对不支持的文件类型的其他 exif 函数进行调用,或与 $_SERVER['HTTP_ACCEPT'] 结合使用以检查浏览器是否能够查看特定图像。

参数

filename
要检查的图像。

返回值

当找到正确的签名时,将返回相应的常量值,否则返回值为 false。返回值与 getimagesize() 在索引 2 中返回的值相同,但 exif_imagetype() 速度要快得多。

定义了以下常量,它们表示可能的 exif_imagetype() 返回值

图像类型常量
常量
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II (intel 字节序)
8 IMAGETYPE_TIFF_MM (motorola 字节序)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
17 IMAGETYPE_ICO
18 IMAGETYPE_WEBP
19 IMAGETYPE_AVIF

注意:

如果 exif_imagetype() 无法从文件中读取足够的字节来确定图像类型,它将发出 E_NOTICE 并返回 false

变更日志

版本 描述
7.1.0 添加了 WebP 支持。
8.1.0 添加了 AVIF 支持。

示例

示例 #1 exif_imagetype() 示例

<?php
如果 (exif_imagetype('image.gif') 不等于 IMAGETYPE_GIF) {
回显
'图片不是 gif';
}
?>

参见

添加注释

用户贡献的注释 4 条注释

23
christophe dot tournayre at univ*bpclermont dot Fr
11 年前
因为我只想从内存字符串中检查 jpeg 或 png,所以这是我的 2 个快速且没有任何依赖项的函数

<?php
函数 is_jpeg(&$pict)
{
返回 (
bin2hex($pict[0]) == 'ff' && bin2hex($pict[1]) == 'd8');
}

函数
is_png(&$pict)
{
返回 (
bin2hex($pict[0]) == '89' && $pict[1] == 'P' && $pict[2] == 'N' && $pict[3] == 'G');
}
?>
22
Tim
17 年前
通过反复试验,似乎文件必须至少为 12 字节才能避免“读取错误!”。这是一个避免抛出错误的解决方法

// exif_imagetype 如果文件太小则抛出“读取错误!”
如果 (filesize($uploadfile) > 11)
$mimetype = exif_imagetype($uploadfile);
否则
$mimetype = false;
16
admin at leonard !spam challis dot com
14 年前
Windows 用户:如果您遇到致命错误“致命错误:调用未定义函数 exif_imagetype()”,并且您已启用 php_exif.dll,请确保您也启用了 php_mbstring.dll。您必须在 php.ini 中将 mbstring 放在 exif 之前,即

extension=php_mbstring.dll
extension=php_exif.dll

您可以通过调用 phpinfo() 并搜索 exif 来检查此操作是否已生效。
11
tom dot ghyselinck at telenet dot be
16 年前
如果函数 exif_imagetype() 不可用,
您可以尝试以下解决方法

如果 ( ! function_exists( 'exif_imagetype' ) ) {
函数 exif_imagetype ( $filename ) {
如果 ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
返回 $type;
}
返回 false;
}
}
To Top