【问题标题】:Determine an image's MIME type from BLOB?从 BLOB 确定图像的 MIME 类型?
【发布时间】:2017-02-23 18:05:58
【问题描述】:

我将数千张图片以二进制格式存储在数据库中。我想用 PHP GD 确定 MIME 类型,而不是使用表中的另一列。

不读取和写入临时图像文件的最佳方法是什么?

【问题讨论】:

  • 如果有临时文件,请显示代码。

标签: php mysql sql gd mime-types


【解决方案1】:

您可以使用getimagesizefromstring

【讨论】:

  • 这么简单,但我在google 搜索时从来没有遇到过这个功能。非常感谢。
【解决方案2】:

我知道这有点老了,但我一直在寻找一种解决方案来从 mysql 的 BLOB 上解决这个问题,这对我来说是有效的方式。我希望它也对其他人有所帮助。我不知道哪种方式最适合性能,但值得测试。

$finfo    = new finfo(FILEINFO_MIME);
$mimeType = $finfo->buffer($myBlobHere);

【讨论】:

    【解决方案3】:

    OP 只询问图像类型。对于图像类型,getimagesizefromstring() 效果很好,但finfo 也适用于其他文件类型。不幸的是,finfo 并非在所有服务器上都可用。它自 PHP 5.3.0 起就包含在内,但通常在 Windows 系统上被禁用。因此,我选择首先使用getimagesizefromstring,如果它无法检测到mimetype,我检查finfo-class,如果它存在,我尝试finfo。

    这是组合解决方案:

    $imagesize = getimagesizefromstring($blobVal);
    if($imagesize!==false && isset($imagesize['mime']))
        $mimetype = $imagesize['mime'];
    elseif(class_exists('finfo'))
    {
        $finfo    = new finfo(FILEINFO_MIME);
        $mimetype = $finfo->buffer($blobVal);
    }
    else
        $mimetype = "application/octet-stream";
    

    在这里,我使用默认的 mimetype 作为后备,您可能需要调整它。

    注意:使用finfo,您可能需要FILEINFO_MIME_TYPE 而不是FILEINFO_MIME,因为后者也包含编码,而FILEINFO_MIME_TYPE 只返回mime-type。就我而言,我在 http 内容类型标头中使用 $mimetype,其中编码很有帮助。

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 2017-02-12
      • 2011-07-15
      • 2013-10-04
      • 2017-03-04
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多