如何获得mime类型的blob数据?

时间:2012-12-11 11:27:05

标签: php mysql blob

我有一个MySQL表,其中一些数据blob数据存储在一个单元格中。

我试图回应它。

但我不知道该数据的mime类型。如何根据给定的blob数据确定mime类型?

我尝试了这段代码,但不知道mb类型的blob:

<?php

    mysql_connect("localhost","root","");
    mysql_select_db("contents");
    $sql="SELECT * FROM `contents` limit 1";
    $result=mysql_query($sql);
    $row=mysql_fetch_assoc($result);
    echo $row['html']

?>

4 个答案:

答案 0 :(得分:4)

你必须在db中添加插入“blob”的mime,如果你强行,你可以这样选择:

if (!function_exists('mime_content_type ')) {
    function mime_content_type($filename) {
        $finfo    = finfo_open(FILEINFO_MIME);
        $mimetype = finfo_file($finfo, $filename);
        finfo_close($finfo);
        return $mimetype;
    }
}

$filename = tempnam('/tmp', 'cre');
$fp = fopen($filename, 'w'); 
fwrite($fp, $row['html']);
fclose($fp); 

$ctype = mime_content_type($filename) ;


header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".'samename'."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename)); 
unlink($filename);
echo $row['html'];

这种方式并不好,因为有很多用法,但是有可能。 我提供更新表并添加mime-type并按顶部代码编辑所有记录...

你有第二种方式并使用:

  header("Content-type: application/force-download");

这是强制下载标题,可以将文件保存在用户的PC中。

答案 1 :(得分:2)

您应该在插入数据库中将MIME类型存储为数据库中的单独列。

缺乏这一点,你可以尝试猜测,模块MIME_Type可能会有帮助。

答案 2 :(得分:0)

这样做会产生巨大的开销。您应该像其他用户建议的那样将MIME类型存储在插入中。

不要使用从表单上传中收到的MIME类型,因为这不能被信任(它很容易被客户端伪造),但是在上传文件后自己计算。

如果你已经有一个BLOB中没有MIME类型的表,但是你知道你会经常引用这些文件,我建议你添加MIME列并编写一个脚本来填充所有的MIME字段循环遍历现有记录并添加此值。

因此,请参阅类型的MIME字段,而不是将所有BLOB加载到内存中以解析MIME类型。

答案 3 :(得分:0)

这是一个老问题,但它是搜索结果中的第一个

要获取二进制字符串的mime类型,您可以使用finfo_buffer(或finfo类)http://php.net/manual/fr/function.finfo-buffer.php

// Object oriented style
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->buffer($buffer);

// Procedural style
$finfo = finfo_open(FILEINFO_MIME);
$mime = finfo_buffer($finfo, $buffer)