PHP+MySQLで、画像(jpg)の保存、表示を試みていますが、
どうもうまくいかないので、お知恵をお貸しください。
MySQLのMEDIUMBLOBに画像を保存すること自体はうまく行っているように見えるのですが、
取り出して表示をする際に、画像の一部が崩れてしまいます。
<環境>
MySQL4.0.26
PHP 5.0.4
500バイト程度の小さな画像だと崩れませんが、
大きな画像(1.6k程度)だと、
画像が崩れます。
コードを記述したいのですが、文字数制限があるので、
一部省略/抜粋で掲載します
<アップロード/保存>
$fp = fopen($_FILES["file"]["tmp_name"],"rb");
$imgdat = fread($fp,filesize($_FILES["file"]["tmp_name"]));
fclose($fp);
$imgdat = base64_encode($imgdat);
$imgdat = addslashes($imgdat);
//$imgdat = mysql_escape_string($imgdat);
$sql = "insert into test_img(imgfile)values('".$imgdat."')";
(以下略)
<表示>
$sql = "select * from test_img order by no desc limit 1";
$result = mysql_query($sql,$dbid);
$rows = mysql_fetch_array($result);
$imgdat = stripslashes($imgdat);
$imgdat = base64_decode($rows["imgfile"]);
header('Content-Type: image/jpeg');
echo stripslashes($imgdat);
(以下略)
保存時にaddslashes
復帰時にstripslashes
してもうまくいきませんでした。
他の掲示板で調べた、base64エンコード/デコードを試みましたが、
これも結果は同じです。
どうかよろしくお願い申し上げます。
No.1ベストアンサー
- 回答日時:
画像の一部が表示される、と言う事は、ネット端末側まで全てのデータが届いていない、と言う事ですよね。
ネット上のデータはパケットに分けられて送信されてきますが、それが途中までしか届いていないと言う事ですよね(ネット端末側で諦めたか、httpd、apache側で諦めたかは分かりません)。
通常、デフォルトではダラダラ出力される(適当なパケットに区切られ、順次配信)と思いますが、出力制御関数(ob_start、ob_end_flash等)でバッファをメモリにためておいてから一気に出力した方が良いかもしれません。
http://jp.php.net/manual/ja/ref.outcontrol.php
以下蛇足です。
個人的意見としてはあまり大きなデータをDB登録するべきではないと思います。通常のファイルシステムより少なくともサーバ負荷がかかりパフォーマンスが低下するはずです。私の場合はファイル自体をDB登録ではなく、ファイルの名前を付け替えて一般ユーザにはアクセス出来ない場所に保管し、名前と属性等だけをDB管理しています。
参考まで。
ありがとうございます。
先ほど解決しました。
単なるケアレスミスでした。
質問の書き込みにも、ミスが含まれていました。
何のことは無い、
「出力時に二度stripslashesをしてしまっている」
のでした。
どうも、お騒がせしました。
それとは別に、
「大きなデータをDB登録するべきではない」
というアドバイスをありがとうございます。
私も重々承知していますが、
今回は
・件数が限られていること
・バナー程度の軽量画像であること
もう一点、
削除時にデータと画像を両方消すのが煩雑なので、
SQL一発で削除できるよう、DBに埋め込む方法を採用した次第です。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP 掲示板を資料を参考にして開発中ですが、画像がアップされません? 1 2022/11/21 06:44
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの「MsgBox」について
-
VBAでJPGサイズ変更
-
PHPで吐き出した画像にリンクを...
-
画像リストを作りたい
-
透過PNGが透過されない!!
-
OpenGLで描いて画像ファイル出力
-
MySQLへの画像の保存→表示で画...
-
C# Excelファイルへの画像挿入。
-
GDI+を使ったビット数とDPIの扱い
-
imageCreate関数を使用せずに...
-
アップロード画像数でCSSを分け...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
「@$変数」の「@の意味は?」
-
apache・phpが起動しない・・・
-
PHPの設定で、 エラーが発生し...
-
.phpと.incファイルの違いはな...
-
別ファイルの変数を呼び出した...
-
CFileDialogの最初のディレクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
透過PNGが透過されない!!
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
C# Excelファイルへの画像挿入。
-
VBAでJPGサイズ変更
-
SQLiteに画像を格納したい
-
iphoneで虫眼鏡の作り方
-
PHP MySQLに画像を直接保存
-
Illustratorで文字と画像を流し...
-
openCVの超解像処理
-
PHPで吐き出した画像にリンクを...
-
ChatGPTに作らせたい Excel VBA
-
PHPによる画像の生成による色の...
-
pictureboxに表示した画像のフ...
-
GDI+を使ったビット数とDPIの扱い
-
ウィンドウサイズを取得して、p...
-
ビットマップ画像を読み込むプ...
-
BLOBデーターの画像の表示方法...
-
OpenGLで描いて画像ファイル出力
-
ImageTTFTextで保存すると文字...
おすすめ情報