[PHP+SQL]バイナリデータから画像を出力する方法2種

色々あるんですよ。

最低限の格納データ

BLOBで保存する場合、BLOB自体とファイル形式があればいい。

1つ目(そのまま使う)

こんな感じでいける。

<?php
$id = $_GET['id'];

$pdo = new PDO( 'mysql:host=***;dbname=***;', '***', '***', [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]);
$stmt = $pdo->prepare("SELECT * FROM *** WHERE id IN ($id)");
$stmt->execute();
$row = $stmt->fetch();

header('Content-type: ' . $row['image1_genre']);
echo $row['image1'];
exit();
?>

出力はこうなる。

<a href="https://~/image1.php?id=***"><img src="https://~/image1.php?id=***"></a>

phpファイルを画像ファイルとして扱うことになる。

表示したいだけだったらこっちが楽。

2つ目(base64でやる)

こう。

<?php
$id = $_GET['id'];

$pdo = new PDO( 'mysql:host=***;dbname=***;', '***', '***', [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]);
$stmt = $pdo->prepare("SELECT * FROM *** WHERE id IN ($id)");
$stmt->execute();
$row = $stmt->fetch();

$img = base64_encode($row['image1']);
$image_url = 'data:'.$row['image1_genre'].';base64,'.$img;
?>

<img src="<?php echo $image_url; ?>">

一般的なのは多分こっち。よく見る。

それぞれに用途があるので両方知っておいたほうが便利かも。

コメント

タイトルとURLをコピーしました