PHP-按URL获取文件类型

时间:2014-09-18 17:21:57

标签: php file

我想用PHP获取文件类型(例如.image / gif)。我试过

<?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获取内容类型

7 个答案:

答案 0 :(得分:3)

你不会在任何地方出错。 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';
}

为了获得更好的效果,您可能希望将订单更改为最不受欢迎的订单。

答案 1 :(得分: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;
    }
}

答案 2 :(得分:2)

在第一个示例中,您将获得一个空白页面,因为您没有对函数调用的返回值执行任何操作。在第二个示例中,您将获得有效的响应。请参阅the manual page for exif_imagetype()以获取值的含义列表。

答案 3 :(得分:2)

<?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响应类型为maciej所说的。

尝试这样做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);

答案 4 :(得分:1)

exif_imagetype返回图像类型。响应3表示它是IMAGETYPE_PNG,正确的响应。

答案 5 :(得分:1)

3是PNG图像的图像类型响应。看到: http://php.net/manual/en/function.exif-imagetype.php

答案 6 :(得分:1)

我了解的最好方式

if (!function_exists('getUrlMimeType')) {
    function getUrlMimeType($url)
    {
        $buffer = file_get_contents($url);
        $finfo = new finfo(FILEINFO_MIME_TYPE);
        return $finfo->buffer($buffer);
    }
}

创建函数取决于finfo class