BLOBでの画像表示について
BLOBでの画像表示について質問させてください。
元々ヘテムルのサーバーを利用していたのをここ最近さくらのVPSに移行しました。
するとヘテムルではBlob型の画像表示が正常に表示されていたものがサクラのVPSにて画像表示がされなくなってしまいました。
mysqlのバージョンやphpinfoの設定などを限りなくヘテムルに近づけたのですが正常に表示されないため詰まってしまいました。
各ブラウザで、以下のような状況です。
IE:表示されない
Chrome:表示されない
Firefox:画像ファイル"http://~/image.php?id=544"は壊れているため、表示できませんでした。
以下質問用にソースを書き換えたものですが、ご教授頂ければと思います。
質問用ソースで動作させて同じ様に画像が出ないことは確認しています。
質問用ソースの構造は以下の通りです。
form.html
↓ファイルをPOST
upload.php
↓データをINSERT
MySQLのthumbnailテーブル
↓データをSELECT
image.php
■form.html■
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
ファイル:<br />
<input type="file" name="upfile" size="30" /><br />
<br />
<input type="submit" value="アップロード" />
</form>
</body>
</html>
■upload.php■
<?php
include_once(dirname(__FILE__) . "/admin/common/functions.php");
include_once(dirname(__FILE__) . "/admin/common/db_functions.php");
// MySQL に接続し、データベースを選択します。
dbConnect();
global $_G_DbConnection;
$message = "ファイルが選択されていません。";
//サムネイル1
if (is_uploaded_file($_FILES["upfile"]["tmp_name"]) && !empty($_FILES["upfile"]["name"])){
$contents = file_get_contents($_FILES["upfile"]["tmp_name"]);
$contents = base64_encode($contents);
$contents = mysql_real_escape_string($contents,$_G_DbConnection);
$post_thumbnail1 = $contents;
$post_thumbnail1_name = $_FILES["upfile"]["name"];
}
mysql_query("SET AUTOCOMMIT=0");
mysql_query("BEGIN");
// サムネイル1
$post_thumbnail1_id = null;
if (!empty($post_thumbnail1_name)) {
$sql = "INSERT INTO `thumbnail` (";
$sql .= "`filename`,`thumbnail`)";
$sql .= " values('$post_thumbnail1_name', '{$post_thumbnail1}')";
if (!(mysql_query($sql))) {
mysql_query("ROLLBACK");
$message = "ファイルをアップロードできません。";
} else {
$post_thumbnail1_id = mysql_insert_id();
mysql_query("COMMIT");
$message = $post_thumbnail1_name . "をアップロードしました。";
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<p><?=$message; ?></p>
<img src="image.php?id=<?=$post_thumbnail1_id; ?>">
</body>
</html>
■image.php■
<?php
include_once(dirname(__FILE__) . "/admin/common/functions.php");
include_once(dirname(__FILE__) . "/admin/common/db_functions.php");
// MySQL に接続し、データベースを選択します。
dbConnect();
global $_G_DbConnection;
//ID
$get_id = null;
if (isset($_GET['id'])){
$get_id = $_GET['id'];
// MySQL 問い合わせテスト
$sql = "select * from `thumbnail`";
$con = " where id = " . $get_id;
if (!($rs = mysql_query($sql . $con))) {
echo "MySQL 問い合わせエラー";
echo $sql . $con;
die;
}
while ($row = mysql_fetch_array($rs)) {
// 出力
$ext = substr($row['filename'], strrpos($row['filename'], '.') + 1);
if (is_null(get_content_type($ext))) {
echo "ファイル取得エラー";
} else {
header('Content-type: ' .get_content_type($ext));
echo base64_decode($row['thumbnail']);
}
}
dbFreeResult($rs);
}
?>
■thumbnailテーブル■phpMyadminよりエクスポート
CREATE TABLE IF NOT EXISTS `thumbnail` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(255) DEFAULT NULL,
`thumbnail` longblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=545 ;
□中身のデータ□
INSERT INTO `thumbnail` (`id`, `filename`, `thumbnail`) VALUES
(544, 'SH3D0054.jpg', 0x2f~2f5a); ←[BLOB - 17.3 KiB]
INSERT INTO `thumbnail` (`id`, `filename`, `thumbnail`) VALUES
(543, 'ねむネコ.bmp', 0x51~413d); ← [BLOB - 234.9 KiB]
長くなってしまいましたが、ご教授お願い致します。
お礼
ありがとうございました、 Javaのアプリケーションで入れてみようと思います。
補足
パッケージDBMS_LOBをどのように使うのですか? 使用例を記述していただけると幸いです。 よろしくお願いします。