Воспроизведите загруженное изображение с помощью gd. Если изображение не воспроизводится, это не изображение!
Если эта функция возвращает false, значит это недопустимое изображение. Я не работал с более чем jpg, png и gif, так что может быть есть еще несколько типов изображений, которые могут вписываться в эту функцию (bmp?) ...
function checkFileType($filetype,$tmp_name)
{
$return_val = false;
switch($filetype){
case 'image/jpg':
case 'image/jpeg':
case 'image/pjpeg':
$return_val = @imagecreatefromjpeg($tmp_name);
break;
case 'image/gif':
$return_val = @imagecreatefromgif($tmp_name);
break;
case 'image/png':
case 'image/x-png':
$return_val = @imagecreatefrompng($tmp_name);
break;
}
return $return_val;
}