ロト君のサイト by lotokunn

L'sCore ロト君のサイトへようこそ!

  1. TOP
  2. パソコン
  3. PHP 画像のバイナリ化

PHP 画像のバイナリ化

皆さんこんにちは!今晩は!!ロト君です。
今回は、DB(データベース)に画像を保存する方法を考えましたので、記載します。

1.なぜ画像をDBに保存するのか??
ではなぜ?DBに画像を保存するのでしょうか?
それは、セキュリティの為です。

今までは、単純にファイルをサーバ上に置いて管理していましたが、セキュリティ上良くありませんでした。
簡単に言うと、URLを叩くと出力が容易に出来てしまうからです。
誰でも簡単に表示出来る事は良いのですが、仕事上で扱うWebアプリは、そうではありません。

決まった、『ユーザ』『パスワード』でログインした時のみ、表示または書き換え出来る様にしないといけません。

2.やり方
基本的なやり方は、下記の通りです。

画像データをWebに上げ、そのデータをバイナリ化した後にDBへ保存します。
又、画像を表示させる時は、その保存したバイナリデータを画像化します。

3.実際のコード
コードはこんな感じです。
全てPHPですね。
pdo.php

<?php
$dsn='mysql:dbname=test;host=localhost;charset=utf8';
$user='root';
$password='';

$dbh=new PDO($dsn,$user,$password);

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
?>

insert.php

<?php
// 画像と拡張子を取得
$img_path = 'test.jpg';
$img = file_get_contents($img_path);
$ext = pathinfo($img_path, PATHINFO_EXTENSION);
// データベースから対象のデータを取得
try{
//データベースへ接続
include("pdo.php"); //データベース接続用
$sql = "INSERT INTO t_img(
ext,
contents
)
VALUES(?,?)
";
$stmt = $dbh -> prepare($sql);
$data[] = $ext;
$data[] = $img;

$stmt->execute($data);
$data = array();
//データベース切断
$dbh = null;
}
catch(Exception$e){print'<p>ただいま障害により大変ご迷惑をお掛けしております。</p>';exit();}
?>

img.php

<?php
// クエリの取得
if (preg_match('/^[0-9]+$/', $_GET['key'])) {
$id = $_GET['key'];
} else {
throw new Exception('エラー');
}
// データベースから対象のデータを取得
try{
//データベースへ接続
include("pdo.php"); //データベース接続用
$sql = "SELECT ext, contents FROM t_img
WHERE id = '$id'
";
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
//データベース切断
$dbh = null;
}
catch(Exception$e){print'<p>ただいま障害により大変ご迷惑をお掛けしております。</p>';exit();}
// Content-typeテーブル
$contents_type = array(
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
);

// 出力
$img = $stmt->fetchObject();
header('Content-type: ' . $contents_type[$img->ext]);
echo $img->contents;
?>

4.まとめ
各、出力は$_GETを使って表示させています。コードをうまく変更すれば、src=”URL”でも表示できると思います。

PHPは割かし色々出来るので本当に便利ですね!!では、今回はここまで(・ω・)ノシ


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA



Hello!!

皆さんこんにちは!こんばんは!!ロト君です。

このサイトは私が興味を持ったモノやコトについて掲載をしていくサイトです。

主にパソコン関係やアニメ・ゲーム等について掲載すたいと思いますので、 どうぞ宜しくお願い致します!

コメント等はTwitter等を活用して頂けると有り難いです!!

Twitter: ロト君@lotokunn