質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

3回答

2049閲覧

PHP+mysqlでの画像出力について

kans00229

総合スコア28

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2016/09/01 05:49

PHPバージョン5.6
MySQLバージョン情報: 4.5.1
XAMPPにてローカル環境

public_htmlディレクトリ階層に「upload」フォルダを作成してアップロードした画像は
「upload」に保存され、データベースにはファイル名が保存されるようにしております。

現在、下記の方法で画像を読みだして、ブラウザに表示しようとしておりますが
何度やってもうまくいかない為、お力をお貸し頂ければと思います。

データベースから呼び出した、画像名が$data["img"]に格納されるようになっております。
$tmpに直接画像名を(例えば1.jpg)記述した場合はうまく表示されますが、$data["img"]
でデータベースからのデータを入れるとうまく表示することができません。

また、thumbnailImageで画像を比率を保ったまま、縮小したいのですが、こちらも
上手く動いてくれなくて困っております。

//image.php <?php //ファイルを出力 header('Content-type: image/jpeg'); $tmp = $data["img"]; $imgurl = '../upload/' .$tmp; $img = readfile($imgurl); $image = new Imagick($img); $image->thumbnailImage(100, 0); echo $image; ?> 出力側は <img src="image.php"> で出力しております。

現在、header('Content-type: image/jpeg')でjpegの画像以外の場合
他の拡張子(gif)等に変更する良いロジックがございましたら、お知恵をお貸し下さいませ。

PHPの初心者ですので、わからないことが多く、質問ばかりとなりますが宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

Imagickではなく、GDを利用して同じ動きを実装することができました。
ご助言有難うございました。

投稿2016/09/29 01:01

kans00229

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2016/09/29 01:07

一般にGDよりImagickの方が画質が良いと言われることが多いので GDで妥協するなら念頭においておいてください
kans00229

2016/09/29 01:53

GDよりImagickの方が画質が良いのですね。今回はGDで妥協しましたが、今後はImagickに再チャレンジしようと思います。有難うございました。
guest

0

Imagickは使ったことないので勘でお答えします。

$tmpに直接画像名を入れた場合はOKということなので、$data["img"]に正しく値が取得できているかご確認ください。

thumbnailImageについては第三パラメーターをtrueにすると良さそうです。
$image->thumbnailImage(100, 100、true);

投稿2016/09/01 06:26

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kans00229

2016/09/01 06:32

ご回答有難うございます。 $data["img"]にはデータベースからの値が取得できているようです。 Imagickについては、参考にしたソースが使用していた為、使用しております。 他に、良い表示方法がございましたら、お教え頂けますと幸いです。 お願い致します。
ttyp03

2016/09/01 06:37

いや、よくわからないのですが、$tmpに直接入れた場合はOK、$data["img"]の場合はNG、ってことはどう考えても$data["img"]の値がおかしいですよね? 「取得できているようです」という曖昧な確認ではなく、きちんと確認をお願いします。 echoでもvar_dumpでもいいので、$data["img"]の値を提示してみてください。 それからthumbnailImageは第三パラメーターについては試していただけたのですか?
kans00229

2016/09/06 09:24

返信が遅くなりすみませんでした。 $data["img"]につきましては、image.phpで確認をしないと意味がないのに 出力側のファイルでvar_dumpで確認しておりました。 結果としては、$data["img"]が取得出来ておりませんでした。 曖昧なお答えと勘違いをしており、大変申し訳ございませんでした。 thumbnailImageは第三パラメーターについては、試させて頂き表示できました 誠にありがとうございます。 現状として、image.phpの中で if(isset($_GET['id'])){ //ここでデータベースの情報を取ってくる。 $stmt_id = $pdo->prepare(" SELECT img FROM setting WHERE id = :id ;"); $stmt_id->bindValue(':id', $_GET['id'], PDO::PARAM_INT); $stmt_id->execute(); $data = $stmt_id->fetch(PDO::FETCH_ASSOC); } ※データベース内のi㎎にはリネームした画像名で保存しております。 $_GETでidを取得してデータベースから画像名を引っ張ってきたいのですが image.phpは出力したいファイルにて<img src="image.php">という形で 使用しています。 この際、出力したいファイルの$_GETの情報をimage.phpへと受け渡す 方法がわからない状況です。 public_htmlディレクトリ階層にリネームした、画像が保存されるため 画像の保存されているディレクトリをソースに表示しない方向で考えて います。 ご質問ばかりで大変申し訳ございませんが、是非お知恵をお貸し頂ければ と思います。 宜しくお願い致します。
ttyp03

2016/09/06 09:48

これじゃダメですか? <img src="image.php?id=xxx">
kans00229

2016/09/07 05:33

idを受け渡す処理ついては、実装できました。 有難うございます。 しかし、データベースから取ってきた、リネームした画像名を image.phpで表示することができません。 現在、SHA-1ハッシュと現在の時刻から、画像名をリネームして 画像名をデータベースに格納しております。 画像ファイルについては、move_uploaded_fileで 画像ファイルをuploadフォルダに移動させております。 uploadフォルダの画像名を直接 $tmp = ”uploadフォルダの画像名”; $imgurl = '../upload/' .$tmp; のようにすると画像が表示されますが $tmp = $data["img"]; $imgurl = '../upload/' .$tmp; ※$data["img"]の値は受け取れています。 の場合は画像が表示されません。 また、直接phpMyadminの該当テーブルの 画像名をコピーして $tmp = ”コピペして画像名を貼り付け”; とした時も画像が表示されません。 何か出力をさせる際に、特別な処理が必要なのか解らない のが現状です。 この部分が解決できなく困っております。 何卒お力をお貸しくださいませ。
ttyp03

2016/09/07 06:28

テーブルの値が怪しいように思うので、試しにtrimしたらどうなりますかね。 $imgurl = '../upload/' .trim($tmp);
kans00229

2016/09/07 07:59

いろいろご指導頂きありがとうございます。 trimをしてみましたが、表示されませんでした。 どこか根本的な部分が間違っている可能性も あるかもしれないですね。もう一度、確認してみます。 別の表示方法も視野に入れることも考えたいと思います。 他に、良い表示方法等がございましたら、お教え頂けますと幸いです。
ttyp03

2016/09/07 08:00

あと考えられそうなのは、文字コードが違うとかでしょうか。
guest

0

ファイルのアップロードはフォームからやっていますか?
そうなら$_FILESでファイル名などの他にtypeがわたされるので
あわせてdbに登録しておけばtypeにあわせたheaderを出力すればいいでしょう
そうでないなら拡張子で判断することです。

ちなみに$data["img"]が唐突にでてきますが
これは$_GET["img"]などではないのでしょうか?
<img src="image.php?img=xxx.jpg">などでデータ渡しして
file_exists()で存在確認をしたほうがよいでしょう。
また不正なフォルダを参照されないようになんらかのセキュリティチェックをしてください

なお、ファイル名をそのままサーバーにデータをおくと
ファイル名が競合すると上書きされたりしますので
任意にファイル名は付け直して、ファイル名自体はDB側で持つほうがよいでしょう

投稿2016/09/01 06:23

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kans00229

2016/09/01 06:38

ご回答有難うございます。 ご説明が足りなくて申し訳ございません。ファイル名につきましては、 つけなおして保存しております。 ファイル保存とデータベースへの登録は、問題なくできている思います。 出力の方法として、Imagickを使用しておりますが、参考にしたソースが使用していた為、使用しているのが現状です。 他に、良い表示方法がございましたら、お教え頂けますと幸いです。 宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問