2014-09-18 2 views
2

Я хочу, чтобы получить тип файла (например, изображение/GIF) по URL, используя PHP.I попыталсяPHP- Получить тип файла по URL

<?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 для получения типа контента

ответ

1
<?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'

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); 
+0

Когда я храню url в $ image_path, он говорит: Warning: mime_content_type ($ image_path) [function.mime -content-type]: не удалось открыть поток: нет такого файла или каталога в /home/appfesti/public_html/y.php в строке 4 –

+0

Следует отметить, что mime_content_type устарел, а Fileinfo - предпочтительный метод. – Grice

+0

да устарело ... $ finfo = finfo_open (FILEINFO_MIME_TYPE); – Avis

2

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

+0

спасибо за ссылку, мы можем использовать 'image_type_to_mime_type (exif_imagetype ($ URL))', чтобы получить ' 'изображение/xxx'' тип пантомимы – ctf0

1

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

+0

Невозможно получить выход, например, «image/png»? –

+0

Вы можете либо жестко закодировать коммутатор, либо сравнить значение с ним, либо использовать finfo_file для получения типа MIME (image/png) – Grice

1

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

+0

Невозможно ли получить выход, например, «image/png»? –

+0

, тогда вам нужно написать ... mime_content_type @AshishSrivastava – Avis

+2

Использовать finfo - http://php.net/manual/en/function.finfo-file.php –

2

Вы не собираетесь неправильно везде. exif_imagetype возвращает значение одной из констант типа изображения: http://php.net/manual/en/image.constants.php

Если вы хотите, чтобы преобразовать его в строку расширения, вы можете использовать переключатель заявление:

$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'; 
} 

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

+0

Случай 'IMG_JPG' должен быть удален,' image/jpg' не является допустимым типом MIME. –

0

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