PHPで教えてください。

やりたいことは、フォームで「文字列」「画像」をアップロードし、確認画面を出し、データベースに登録をするという感じです。
---form.html---
<input type="text" name="text1">
<input type="file" name="img1">
---------------
で送り、
---test.php---
$imgdata = $_POST["img1"];
##GDで色々加工##
ob_start();
imagejpeg($imgdata);
$outfile = ob_get_contents();
ob_end_clean();

##確認画面表示##
echo $_POST["text1"];
echo $outfile;
-------------
というような感じでやりたいのですが、echo $outfileが上手に表示できません。
画像だけなら、
header("Content-type: image/jpeg");
echo $outfile;
で表示できるのですが、HTML内の一部分に画像を表示する方法を教えてください。
お願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/05/15 21:31:34
  • 終了:2008/05/15 23:52:25

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/05/15 22:12:54

ポイント100pt

http通信では、1つのファイルに対し、1つのContent-typeしか付けることができません。

したがって、テキストを表示しているHTMLコンテンツの中で、img src で

header("Content-type: image/jpeg");
echo $outfile;

をハイパーリンクさせるのが普通です。


なお、「The "data" URL scheme」 によると、<img src="data:image/gif;base64,BASE64データ"> で画像を表示できるとされています。

ご質問の PHP スクリプトですと、$outfile を base64_encode 関数でエンコードしてやれば、HTML中に画像データを埋め込むことができます。

ただし、手元の Windows 環境で、この方式に対応しているブラウザは Firefox 2.0 だけでした。IE 6/7, Safari, Opera は表示できませんでした。


参考サイト

id:norif_h

ありがとうございます。

非常に助かります。別ファイルでheaderとimageを送るんですね。

なるほど。勉強になりました。

2008/05/15 23:46:08

その他の回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/05/15 22:12:54ここでベストアンサー

ポイント100pt

http通信では、1つのファイルに対し、1つのContent-typeしか付けることができません。

したがって、テキストを表示しているHTMLコンテンツの中で、img src で

header("Content-type: image/jpeg");
echo $outfile;

をハイパーリンクさせるのが普通です。


なお、「The "data" URL scheme」 によると、<img src="data:image/gif;base64,BASE64データ"> で画像を表示できるとされています。

ご質問の PHP スクリプトですと、$outfile を base64_encode 関数でエンコードしてやれば、HTML中に画像データを埋め込むことができます。

ただし、手元の Windows 環境で、この方式に対応しているブラウザは Firefox 2.0 だけでした。IE 6/7, Safari, Opera は表示できませんでした。


参考サイト

id:norif_h

ありがとうございます。

非常に助かります。別ファイルでheaderとimageを送るんですね。

なるほど。勉強になりました。

2008/05/15 23:46:08
id:GoldenDawn No.2

GoldenDawn回答回数426ベストアンサー獲得回数812008/05/15 22:28:50

ポイント50pt

強引にやるならこんな感じ。

echo '<img src="data:image/jpeg;base64,'.base64_encode($outfile).'" />' ;

ただし IE は標準では dataスキームに対応していないので、一旦ファイルに書き出す必要があるかと思います。

http://q.hatena.ne.jp

id:norif_h

ありがとうございます。

参考にさせていただきます。

2008/05/15 23:49:13
id:hirotow No.3

hirotow回答回数131ベストアンサー獲得回数102008/05/15 22:52:28

ポイント5pt

いったん画像を保存して、

この画像を参照するHTMLを出力するのが一般的な手法でしょうか。

古い画像は次回アクセス時に一定時間以上経過したものを削除します。

たとえばこの幕末古写真ジェネレータというのもこの方式でやっています。

http://labs.wanokoto.jp/olds

id:norif_h

ありがとうございます。

まあそうなんでしょうが、今回は「画像ファイル」を作りたくなかったもので。

「幕末古写真ジェネレータ」拝見させていただきました。

おもしろいですね。

2008/05/15 23:49:10
  • id:t_shiono
    回答できないので、コメントで。

    HTML中に画像データを埋め込むことはできません。
    お手軽に対処するとすると、

    test.php
    >|
    いろいろ処理

    $_SESSION['imagedata'] = $outfile;

    確認画面表示
    echo '<img src="img.php"/>';
    |<

    img.php
    >|
    header("Content-type: image/jpeg");
    echo $_SESSION['imagedata'];
    |<

    みたいな感じでどうでしょう。
    エラーチェックなどは省略してあります。
  • id:norif_h
    t_shiono様
    ありがとうございます。
    そうですね、SESSIONに入れると結構汎用かも。
    参考にさせていただきます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません