PHP — Получить тип файла по URL

Я хочу получить тип файла (например, 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 для извлечения типа контента

5

Решение

<?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);
2

Другие решения

Вы не ошибетесь нигде. 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';
}

Возможно, вы захотите изменить порядок на наиболее часто ожидаемые для повышения производительности.

3

Вот функция 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;
}
}
3

В первом примере вы получаете пустую страницу, потому что вы ничего не делаете с возвращаемым значением из вызова функции. Во втором примере вы получаете правильный ответ. Увидеть страница руководства для exif_imagetype () для списка того, что значения означают.

2

exif_imagetype возвращает тип изображения. Ответ 3 указывает, что это IMAGETYPE_PNG, правильный ответ.

1

3 — ответ типа изображения для изображения PNG. Увидеть:
http://php.net/manual/en/function.exif-imagetype.php

1
По вопросам рекламы [email protected]