2024 年 PHP Conference Japan

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
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
echo
'圖片不是 gif 格式';
}
?>

參見

新增註釋

使用者貢獻的註釋 4 則註釋

christophe dot tournayre at univ*bpclermont dot Fr
11 年前
因為我只想從記憶體字串中檢查 jpeg 或 png,所以這是我的兩個快速且沒有任何依賴關係的函式

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

函式
is_png(&$pict)
{
return (
bin2hex($pict[0]) == '89' && $pict[1] == 'P' && $pict[2] == 'N' && $pict[3] == 'G');
}
?>
Tim
17 年前
經過反覆測試,檔案大小似乎必須大於等於 12 位元組才能避免出現「讀取錯誤!」。以下是一種避免拋出錯誤的解決方法

// 如果檔案太小,exif_imagetype 會拋出「讀取錯誤!」
if (filesize($uploadfile) > 11)
$mimetype = exif_imagetype($uploadfile);
else
$mimetype = false;
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 來檢查這是否已生效。
tom dot ghyselinck at telenet dot be
16 年前
如果 exif_imagetype() 函式無法使用,
您可以嘗試以下解決方法

if ( ! function_exists( 'exif_imagetype' ) ) {
function exif_imagetype ( $filename ) {
if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
return $type;
}
return false;
}
}
To Top