web-dev-qa-db-ja.com

PHP MySQLの画像BLOBを表示します

データベースのBLOB列に格納されている画像を表示しようとしています。

SELECTを使用してデータベースからデータをフェッチし、データの変換を実行せず、次のように表示します(出力のみが次のスクリプトから)。

header("Content-Type: image/jpeg");
echo $image;

chromeは、画像の正しいサイズおよび正しいMIMEタイプ(image/jpeg)としてコンテンツサイズを表示していることに注意してください。ヘッダーとデータベースのBLOBが正しいことを確認する前に、何もエコーされません。 <?php ?>タグの前後に末尾の空白もありません。

chrome/IEは画像アイコンを表示しますが、画像自体は表示しません。何か案は?

編集:画像はデータベースから取得されます:

$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$row = $sth->fetch();
$image = $row['image'];

var_dump($ image)の結果:

string 'ÿØÿà�JFIF��x�x��ÿá�ZExif��MM�*�����������J��������Q�������Q������tQ������t�����† ��±ÿÛ�C�       

ÿÛ�CÿÀ�_"�ÿÄ����������� 
ÿÄ�µ���}�!1AQa"q2‘¡#B±ÁRÑð$3br‚ 
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³    ´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ��������'... (length=60766)
39
user2732663

このようにしてみてください。

DBへの挿入用

$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$image = addslashes(file_get_contents($_FILES['images']['tmp_name']));
//you keep your column name setting for insertion. I keep image type Blob.
$query = "INSERT INTO products (id,image) VALUES('','$image')";  
$qry = mysqli_query($db, $query);

Blobから画像にアクセスする場合

$db = mysqli_connect("localhost","root","","DbName"); //keep your db name
$sql = "SELECT * FROM products WHERE id = $id";
$sth = $db->query($sql);
$result=mysqli_fetch_array($sth);
echo '<img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/>';

それがあなたを助けることを願っています。

ありがとう。

これは私がblobから画像を表示するために使用するものです:

echo '<img src="data:image/jpeg;base64,'.base64_encode($image->load()) .'" />';
12
Arian Faurtosh

さまざまな種類のコンテンツをblobフィールド/列に格納する必要があるため、次のようにコードを更新するとします。

echo "data: $mime" $result['$data']";

ここで、MIMEは、あらゆる種類の画像、テキスト、Word文書、テキスト文書、pdf文書、e.t.cなどです。データはblobの列コンテンツです

0
Nicholas