getimagesize() 是 PHP 專門用於讀取圖片尺寸、類型等元信息的內置函數,支持 JPEG、PNG、GIF、BMP、WebP 等主流格式,無需載入完整圖片數據,效率極高。
<?php
$arr = getimagesize("1.jpg");
/*
返回數組結構:
$arr[0] 寬度 (像素)
$arr[1] 高度 (像素)
$arr[2] 圖片類型常量 (IMAGETYPE_JPEG=2, IMAGETYPE_PNG=3, IMAGETYPE_GIF=1 等)
$arr[3] 完整 width/height 屬性字符串:'width="800" height="600"'
$arr['mime'] MIME 類型:'image/jpeg'
$arr['channels'] 通道數:3(RGB) 或 4(RGBA)
$arr['bits'] 色深位數
*/
?>
<?php
$arr = getimagesize("1.jpg");
// 方式 1:使用 $arr[3] 直接輸出屬性字符串
echo '<img src="1.jpg" ' . $arr[3] . ' alt="" />';
// 方式 2:顯式拼接寬高
echo '<img src="1.jpg" width="' . $arr[0] . '" height="' . $arr[1] . '" alt="" />';
?>
輸出結果均為:<img src="1.jpg" width="800" height="600" alt="" />
<?php
function isValidImage($path, $allowedTypes = [IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF]) {
$info = @getimagesize($path);
return $info !== false && in_array($info[2], $allowedTypes);
}
// 使用
if (isValidImage($_FILES['avatar']['tmp_name'])) {
// 安全移動文件
}
?>
<?php
$images = glob('uploads/*.{jpg,png,gif}', GLOB_BRACE);
$thumbConfig = [];
foreach ($images as $img) {
$info = getimagesize($img);
if ($info) {
$thumbConfig[] = [
'src' => $img,
'width' => $info[0],
'height' => $info[1],
'ratio' => $info[0] / $info[1],
'mime' => $info['mime']
];
}
}
?>
<?php
$remote = "https://example.com/banner.jpg";
$info = @getimagesize($remote);
if ($info) {
echo "遠程圖片: {$info[0]}x{$info[1]} {$info['mime']}";
} else {
echo "無法讀取遠程圖片";
}
?>
| 問題 | 原因 | 解決方案 |
|---|---|---|
| 返回 false | 文件不存在、非圖片、權限不足、URL 禁止 | 用 @ 抑制警告 + 嚴格判斷 !== false |
| 遠程圖片失敗 | php.ini 關閉 allow_url_fopen | 改用 cURL 下載後本地檢測 |
| 大圖讀取慢 | 需下載完整文件才能解析頭部 | 僅讀取頭部字節(需自定義流上下文) |
| 類型常量不可讀 | 直接輸出 $arr[2] 得到數字 | 用 image_type_to_extension() 或 image_type_to_mime_type() 轉換 |
IMAGETYPE_GIF = 1
IMAGETYPE_JPEG = 2
IMAGETYPE_PNG = 3
IMAGETYPE_SWF = 4
IMAGETYPE_PSD = 5
IMAGETYPE_BMP = 6
IMAGETYPE_TIFF_II = 7
IMAGETYPE_TIFF_MM = 8
IMAGETYPE_JPC = 9
IMAGETYPE_JP2 = 10
IMAGETYPE_JPX = 11
IMAGETYPE_JB2 = 12
IMAGETYPE_SWC = 13
IMAGETYPE_IFF = 14
IMAGETYPE_WBMP = 15
IMAGETYPE_XBM = 16
IMAGETYPE_ICO = 17
IMAGETYPE_WEBP = 18 // PHP 7.1.0+
結語:getimagesize() 是圖片處理流程的「體檢儀」,輕量、無依賴、功能全。善用它的完整返回數組,能讓圖片上傳驗證、縮略圖生成、響應式圖片輸出等環節更加可控高效。