phpの初心者です。
このたびphpで画像をmysqlに保存して、そしてmysqlからデータを取得して表示させることに
チャレンジしてみることにしました。
以下のサイトを参考にさせていただきました。
http://www.kantenna.com/pg/2010/04/phpmysql.php
そしてmysqlでデータベースを作成してテーブルを作成しました。
CREATE DATABASE tada; CREATE TABLE images ( id int NOT NULL AUTO_INCREMENT, ext varchar(5), contents blob, PRIMARY KEY (id) );
insert.phpとimg.phpのファイルを作成しました。
insert.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title></title> </head> <body></body> </html><?php // 画像と拡張子を取得 $img_path = 'C:/Program Files/Apache Software Foundation/Apache2.2\htdocs/img/ApacheMonitor.jpg'; $img = file_get_contents($img_path); $ext = pathinfo($img_path, PATHINFO_EXTENSION); // データベースに保存 $pdo = new PDO('mysql:host=localhost; dbname=tada', 'root', 'pass''); $stmt = $pdo->prepare('INSERT INTO images VALUES(0, :ext, :img)'); $stmt->bindParam(':ext', $ext); $stmt->bindParam(':img', $img); $stmt->execute(); ?>
img.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title></title> </head> <body> <?php // クエリの取得 /* if (preg_match('/^[0-9]+$/', $_GET['key'])) { $id = $_GET['key']; } else { throw new Exception('エラー'); } */ $id = 1;</body> </html>// データベースから対象のデータを取得 $pdo = new PDO('mysql:host=localhost; dbname=tada', 'root', 'pass'); $stmt = $pdo->prepare('SELECT ext, contents FROM images WHERE id=:id'); $stmt->bindParam(':id', $id); $stmt->execute(); // 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; ?>
insert.phpを実行するとエラーなく実行されます。phpMyAdmin 3.4.9 で、画像のデータを
保存して、拡張子をjpgにするとまた、元の画像が表示されますので画像データは壊れ
ずにmysqlに格納されたであろうことがわかります。
しかし、img.phpを実行するとFirefoxブラウザ(バージョン39)では
「画像ファイル "http://localhost/musen/img.php"は壊れているため、表示できませんでした。」
と表示されます。IE(バージョン8)では画像ではなく、文字化けの文章が表示されてしま
います。Chrome(バージョン 44)でも、画像は表示されず、画像が壊れていることを示
すアイコンが表示されています。
http://dev.ontheroad.jp/archives/11970
↑でHTTP 通信の内容をChromeで確認できるとのことでさっそく試してみました。
以下にその時の通信内容をキャプチャした画像を添付します。
何が原因でmysqlに保存した画像データがブラウザに表示されないのでしょうか?
どなたかアドバイスをよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/13 15:30
2015/08/13 15:54