画像のバリデーション
getimagesizeを使って画像の有効性を判定
PHP
if (! file_exists($file_name)) {
// エラー(存在しない)
}
if (filesize($file_name) <= 0) {
// エラー(サイズ不明)
} elseif (filesize($file_name) > 1024 * 1024 * 5) {
// エラー(サイズ上限超過) 5M(1024 * 1024 * 5)
}
$path_parts = pathinfo($file_name);
if (! preg_match('/^[\x21-\x7e]{1,50}+$/', $path_parts['filename'])) {
// エラー(半角英数記号50文字まで)
// (参考)ファイル名に次の文字は使用できない( \ /:* ? " < > |)
}
$file_ext = strtolower($path_parts['extension']);
if (! preg_match('/^(gif|jpe?g|png)$/i', $file_ext)) {
// エラー(拡張子が一致しない)
}
list($width, $height, $type, $attr) = getimagesize($file_name);
if (empty($width) || empty($height) || empty($type)) {
// エラー(画像以外のファイル)
} else {
if ($width > 3200) {
// エラー(幅上限超過)
}
if ($height > 2400) {
// エラー(高さ上限超過)
}
// 1 = GIF
// 2 = JPG
// 3 = PNG
// 4 = SWF
// 5 = PSD
// 6 = BMP
// 7 = TIFF(intel byte order)
// 8 = TIFF(motorola byte order)
// 9 = JPC
// 10 = JP2
// 11 = JPX
// 12 = JB2
// 13 = SWC
// 14 = IFF
// 15 = WBMP
// 16 = XBM
if ($type > 3) {
// エラー(gif、jpg、png以外の画像)
} elseif ($type == '1' && $file_ext != 'gif') {
// エラー(gif 画像タイプと拡張子が一致しない)
} elseif ($type == '2' && ($file_ext != 'jpg' && $file_ext != 'jpeg')) {
// エラー(jpg 画像タイプと拡張子が一致しない)
} elseif ($type == '3' && $file_ext != 'png') {
// エラー(png 画像タイプと拡張子が一致しない)
}
}