PHPで画像ファイルかどうかを検証する(Laravel)
※当サイトにはプロモーションが含まれています。
公開日:
更新日:

特定のファイルが画像ファイルかどうかを検証するPHPの関数を書いてみました。ウェブサイトにアップロードされた画像ファイルを検証する時などに使うことを想定しています。
- GIF/JPEG/PNG のみ対象としています。
- Laravelを使っていることを前提としているので、エラー発生時には ErrorExceptionクラスの例外がスローされます。
- getimagesize関数はマジックバイトを見ているだけなので、念のため imagecreatefromstring関数でイメージリソースが生成できるかチェックしています。
/**
* @param String $filepath
* @return bool
*/
function isValidImageFile($filepath)
{
try {
// WARNING, NOTICE が発生する可能性有り
$img_info = getimagesize($filepath);
switch ($img_info[2]) {
case IMAGETYPE_GIF:
case IMAGETYPE_JPEG:
case IMAGETYPE_PNG:
// イメージリソースが生成できるかどうかでファイルの中身を判定する。
// データに問題がある場合、WARNING が発生する可能性有り
if (imagecreatefromstring(file_get_contents($filepath)) !== false) {
return true;
}
}
} catch (\ErrorException $e) {
$err_msg = sprintf("%s(%d): %s (%d) filepath = %s",
__METHOD__, $e->getLine(), $e->getMessage(), $e->getCode(), $filepath);
switch ($e->getSeverity()) {
case E_WARNING:
\Log::warning($err_msg);
break;
case E_NOTICE:
\Log::notice($err_msg);
break;
default:
\Log::error($err_msg);
}
}
return false;
}
こちらにもまとめておきました。→ PHPのセキュリティ対策 - Secure Code Tips
最終更新日: 2015-05-15