Я хочу получить тип файла (например, image / gif) по URL с помощью PHP. Я пытался
<?php
$image_path="http://fc04.deviantart.net/fs71/f/2010/227/4/6/PNG_Test_by_Destron23.png";
exif_imagetype($image_path);
?>
Приведенный выше код дал мне пустую страницу, а следующий код вернул «3»:
<?php
$image_path="http://fc04.deviantart.net/fs71/f/2010/227/4/6/PNG_Test_by_Destron23.png";
echo exif_imagetype($image_path);
?>
Куда я иду не так?
Решено: использование Fileinfo для извлечения типа контента
<?php
$image_path="http://fc04.deviantart.net/fs71/f/2010/227/4/6/PNG_Test_by_Destron23.png";
echo exif_imagetype($image_path);
?>
Вернулся 3
так как png
Тип ответа, как сказал Мачей.
Попробуй это, чтобы получить вот так image/png
:
echo mime_content_type($image_path);
Попробуй это:
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
echo finfo_file($finfo, $image_path) . "\n";
finfo_close($finfo);
Вы не ошибетесь нигде. exif_imagetype
возвращает значение одной из констант типа изображения: http://php.net/manual/en/image.constants.php
Если вы хотите преобразовать это в строку расширения, вы можете использовать оператор switch:
$typeString = null;
$typeInt = exif_imagetype($image_path);
switch($typeInt) {
case IMG_GIF:
$typeString = 'image/gif';
break;
case IMG_JPG:
$typeString = 'image/jpg';
break;
case IMG_JPEG:
$typeString = 'image/jpeg';
break;
case IMG_PNG:
$typeString = 'image/png';
break;
case IMG_WBMP:
$typeString = 'image/wbmp';
break;
case IMG_XPM:
$typeString = 'image/xpm';
break;
default:
$typeString = 'unknown';
}
Возможно, вы захотите изменить порядок на наиболее часто ожидаемые для повышения производительности.
Вот функция PHP, которую я придумал:
/**
* @param $image_path
* @return bool|mixed
*/
function get_image_mime_type($image_path)
{
$mimes = array(
IMAGETYPE_GIF => "image/gif",
IMAGETYPE_JPEG => "image/jpg",
IMAGETYPE_PNG => "image/png",
IMAGETYPE_SWF => "image/swf",
IMAGETYPE_PSD => "image/psd",
IMAGETYPE_BMP => "image/bmp",
IMAGETYPE_TIFF_II => "image/tiff",
IMAGETYPE_TIFF_MM => "image/tiff",
IMAGETYPE_JPC => "image/jpc",
IMAGETYPE_JP2 => "image/jp2",
IMAGETYPE_JPX => "image/jpx",
IMAGETYPE_JB2 => "image/jb2",
IMAGETYPE_SWC => "image/swc",
IMAGETYPE_IFF => "image/iff",
IMAGETYPE_WBMP => "image/wbmp",
IMAGETYPE_XBM => "image/xbm",
IMAGETYPE_ICO => "image/ico");
if (($image_type = exif_imagetype($image_path))
&& (array_key_exists($image_type ,$mimes)))
{
return $mimes[$image_type];
}
else
{
return FALSE;
}
}
В первом примере вы получаете пустую страницу, потому что вы ничего не делаете с возвращаемым значением из вызова функции. Во втором примере вы получаете правильный ответ. Увидеть страница руководства для exif_imagetype () для списка того, что значения означают.
exif_imagetype возвращает тип изображения. Ответ 3 указывает, что это IMAGETYPE_PNG, правильный ответ.
3 — ответ типа изображения для изображения PNG. Увидеть:
http://php.net/manual/en/function.exif-imagetype.php