Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-通过URL获取文件类型_Php_File - Fatal编程技术网

PHP-通过URL获取文件类型

PHP-通过URL获取文件类型,php,file,Php,File,我想使用PHP通过URL获取文件类型(例如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”: 我哪里做错了? 已解决:在第一个示例中,使用Fileinfo获取内容类型,您将得到一个空白页,因为您没有对函数

我想使用PHP通过URL获取文件类型(例如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”:


我哪里做错了?
已解决:在第一个示例中,使用Fileinfo获取内容类型,您将得到一个空白页,因为您没有对函数调用的返回值执行任何操作。在第二个示例中,您得到了一个有效的响应。有关这些值的含义的列表,请参阅。

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

3表示PNG图像的图像类型响应。见:

试试这个:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension   
echo finfo_file($finfo, $image_path) . "\n";
finfo_close($finfo);

你哪里都不会出错
exif_imagetype
返回一个图像类型常量的值:

如果要将其转换为扩展字符串,可以使用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;
    }
}

这是我理解的最好方式

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

是否创建函数取决于

是否可以获得像“image/png”这样的输出?然后您必须编写…mime\u content\u type@AshishSrivastava@user3923716我得到:警告:mime_content_type()[function.mime content type]:在第4行的/home/appfesti/public_html/y.php中标识数据0:(null)失败,无法获得像“image/png”这样的输出吗?您可以硬编码一个开关并将其值与之进行比较,或者在我将url存储在$image\u path中时使用finfo\u文件获取MIME类型(image/png),它会显示:警告:MIME\u content\u type($image\u path)[function.MIME content type]:无法打开流:第4行的/home/appfesti/public\u html/y.php中没有这样的文件或目录是不推荐的$finfo=finfo\u open(FILEINFO\u MIME\u类型)@我可以使用带有url的文件信息吗?明白了吗@AshishSrivastava@user3923716我使用URL时收到警告:finfo_file()[function.finfo file]:标识数据0失败:(null)。因此,我决定将文件存储在我的服务器上,而不是使用url进行查询:)应该删除
IMG\u JPG
大小写,
image/JPG
不是有效的MIME类型。对于链接,我们可以使用
image\u type\u to\u MIME\u类型(exif\u imagetype($url))
来获取
'image/xxx'
MIME类型我获取此代码并工作!谢谢仅复制和粘贴。干得好!这应该是被认可的答案。这是最干净的
$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';
}
/**
 * @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;
    }
}
if (!function_exists('getUrlMimeType')) {
    function getUrlMimeType($url)
    {
        $buffer = file_get_contents($url);
        $finfo = new finfo(FILEINFO_MIME_TYPE);
        return $finfo->buffer($buffer);
    }
}