1

一部のデータ ブロブ データがセルに格納されている MySQL テーブルがあります。

響かせてみました。

しかし、そのデータの MIME タイプについてはわかりません。指定された BLOB データから MIME タイプを決定するにはどうすればよいですか?

このコードを試しましたが、BLOB の MIME タイプがわかりません:

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

4 に答える 4

4

強制する場合は、次の方法を選択できます:

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 タイプを追加し、すべてのレコードをトップ コードで編集することをお勧めします ...

そして、あなたには2番目の方法があり、次を使用します:

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

これは強制ダウンロード ヘッダーであり、ユーザーの PC にファイルを保存できます。

于 2012-12-11T12:05:24.363 に答える
2

挿入時にMIMEタイプをデータベースに別の列として保存する必要があります。

これがない場合は、推測してみてください。モジュールMIME_Typeが役立つ場合があります。

于 2012-12-11T11:31:56.843 に答える
0

これを行うと、膨大なオーバーヘッドが発生します。他のユーザーが提案したように、挿入時に MIME タイプを保存する必要があります。

フォームのアップロードから受け取った MIME タイプは信頼できないため (クライアントによって簡単に偽造されるため) 使用しないでください。ただし、ファイルのアップロード後に自分で計算してください。

BLOB のファイルでいっぱいで MIME タイプのないテーブルが既にあるが、これらを定期的に参照する必要があることがわかっている場合は、MIME 列を追加し、ループによってすべての値を MIME フィールドに入力するスクリプトを作成することをお勧めします。既存のレコードを介して、これを追加します。

したがって、すべての BLOB をメモリにロードして MIME タイプを解析するのではなく、タイプの MIME フィールドを参照してください。

于 2012-12-11T11:55:59.423 に答える