Как предотвратить ошибку «недействительный файл изображения» при использовании функции GD imagecreatefrom * in php?

Я использую функции imagecreatefromgif / imagecreatefromjpeg / imagecreatefromjpeg с загруженными изображениями и иногда получаю сообщение об ошибке (например, Warning: imagecreatefromgif (): … не является допустимым файлом GIF), когда изображение повреждено. Я прочитал много сообщений об этой теме и не смог найти «рабочий» ответ.

Я попробовал некоторые из следующих действий для проверки изображения (как это было предложено на других сообщениях), но ни один из них не работал во всех ситуациях. Если изображение не имеет информации заголовка, работает следующее, но если изображение имеет информацию типа заголовка / mime и повреждено, оно не работает.

if( imagecreatefromjpeg($uploaded_image) !== false ) { // image is okay. } 

ИЛИ

 try { $test = imagecreatefrompng($uploaded_image); } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } 

ИЛИ

используя getimagesize ($ uploaded_image); // вернет false или ошибку, если изображение недействительно.

Ни одна из этих ситуаций не работала с поврежденным файлом изображения с информацией типа заголовка / типа mime.

Я хотел бы предотвратить наличие этих ошибок и, если возможно, обнаружить, если изображение не повреждено и может быть использовано без проблем с любой функцией imagecreatefromgif / imagecreatefromjpeg / imagecreatefromjpeg. Если он поврежден, я хочу отобразить сообщение об ошибке вместо запуска funciton. Я ищу решение на PHP.

Благодарим вас за помощь и предложения.

Можешь попробовать

 $gd = @imagecreatefromstring(file_get_contents($file_path)); if ($gd === false) { throw new Exception ('Image is corrupted'); } 

Он должен работать с большинством графических форматов, известных gd. Также, если вам нужно специальное сообщение об ошибке, вы можете использовать error_get_last ().

@ будет подавлять сообщения об ошибках, а imagecreatefromstring пытается открыть известные форматы изображений. Если это не удастся, $ gd будет иметь значение «false» и никаких сообщений об ошибках не будет.

Редактировать:

Пожалуйста, не то, что в этом примере оператор @ также будет предупреждать о любых ошибках из функции file_get_contents.