Проверка типа файла изображения

Я пытаюсь добавить функцию на свой сайт, где пользователи могут задавать изображение своего профиля как изображение с внешнего URL, а не сохранять его на свой компьютер, а затем загружать на свой сервер.

Это то, что я придумал до сих пор:

$filename = $inputs['image_url']; if(getimagesize($filename)){ // Get new dimensions list($width, $height) = getimagesize($filename); $new_width = 100; $new_height = 100; // Resample $image_p = imagecreatetruecolor($new_width, $new_height); //a check needs to be done here $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); $filename = "profile_pictures/". md5( uniqid(rand(),true) ).".jpg"; imagejpeg($image_p,$filename,100); }else{ echo 'This is not an image'; } 

Код может скачать .jpg изображения отлично, но я хочу также поддерживать другие типы файлов.

Мне нужно как-то проверить тип файла изображения, чтобы я мог сохранять другие изображения с разными типами файлов …

  if($extension=="jpg" || $extension=="jpeg"){ $image = imagecreatefromjpeg($filename); }else if($extension=="png"){ image = imagecreatefrompng($filename); }else{ $image = imagecreatefromgif($filename); } 

Кто-нибудь знает о функции, которая позволила бы мне это сделать?

Заранее благодарим за любые ответы.

Наиболее прямолинейно и для проверки совместимости GD вы можете просто создать его из строки:

 $image = imagecreatefromstring(file_get_contents($filename)); 

Если это не удается загрузить, вы знаете, что вы не можете обработать это изображение.

Но посмотрите также, как getimagesize , он также проверяет getimagesize , а не только ширину и высоту:

 list($width, $height, $type) = getimagesize($filename); 

Третий элемент, $type , то есть любая из этих констант IMAGETYPE_XXX :

 Value Constant 1 IMAGETYPE_GIF 2 IMAGETYPE_JPEG 3 IMAGETYPE_PNG 4 IMAGETYPE_SWF 5 IMAGETYPE_PSD 6 IMAGETYPE_BMP 7 IMAGETYPE_TIFF_II (intel byte order) 8 IMAGETYPE_TIFF_MM (motorola byte order) 9 IMAGETYPE_JPC 10 IMAGETYPE_JP2 11 IMAGETYPE_JPX 12 IMAGETYPE_JB2 13 IMAGETYPE_SWC 14 IMAGETYPE_IFF 15 IMAGETYPE_WBMP 16 IMAGETYPE_XBM 17 IMAGETYPE_ICO 

Из exif_imagetype . Если вы объедините оба варианта, вы можете сначала проверить, подходит ли тип для загрузки, и затем проверьте, можете ли вы его загрузить.

Splfileinfo::getextension.php может быть именно тем, что вам нужно.

Изменить: я неправильно читаю, вам нужно только проверить расширение строки. Для PHP нет встроенной функции, вы можете просто использовать регулярное выражение:

 $ext = substr(strrchr($fileName,'.'),1); 

Вы можете попробовать это

 $fileExtention = pathinfo ( $filename, PATHINFO_EXTENSION ); 

Или

 $fileExtention = image_type_to_extension(exif_imagetype($filename)); 

Наконец, я бы посоветовал вам использовать что-то вроде http://phpthumb.sourceforge.net/ , имеет больше, чем вам нужно, чтобы манипулировать изображениями