• 締切済み

Content-type: を切り替える方法

cgi で、 print "Content-type: text/html\n\n"; で、テキストやINPUT タグ等を表示した後、  print "Content-type: image/jpg\n\n"; で、Content-type を切り替えて画像を表示させ たいのですが、画像イメージがどうもテキストと 認識されるらしく、文字化けのテキストがずらずらっと表示されます。  上の順序を逆にすると今度は画像は表示されるものの、テキスト、タグが表示されなくなります。 どう書けば、両方の表示に対応できるようになるでしょうか。

  • yoin
  • お礼率87% (210/241)
  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • betagamma
  • ベストアンサー率34% (195/558)
回答No.1

もしかして、Content-typeの意味を間違えてませんか? クライアント(ブラウザ)から、要求があった後、その返答の種別を書くのがContent-typeです。 一回Content-typeを出したら、それ以後の返答は、すべて、そのContent-typeの内容だと受け取られるようになっています。 yoinさんがなさりたいのは、おそらく、ホームページの画像を定期的に切り替える、とかその類のことではないでしょうか?であれば、普通のHTMLに、 <img src="http://xxx.yyy.com/cgi-bin/asdf.cgi?"> とcgiのアドレスを画像のソースとして組み込み、asdf.cgiの中で、 print "Content-type:image/jpg\n\n"; とすれば、HTMLとは別件でブラウザの方が自動的にasdf.cgiの方にアクセスしてきてくれるので、うまくいきます。

yoin
質問者

お礼

ありがとうございます。 よくわかりました。

関連するQ&A

  • Content-type: text/htmlが表示されてしまう

    PerlでCGIを作成しております。 海外のサーバーでCGIをアップしたところなぜかすべてのCGIで Content-type: text/html がページ上部に表示されてしまいます。 そのファイルは日本のサーバーでは問題なく動作しております。 print "Content-type: text/html\n\n"; print "<html><head><title>$site_title</title></head>\n"; 上のようにプログラムは書いております。 これは言語に依存するのですか? ご教示お願いします。

  • "Content-type:text/html;charset=shift_JIS\n\n" がテキスト表示されてしまう。

    CGIで print "Content-type:text/html;charset=shift_JIS\n\n"; を出力すると その文字列がそのままブラウザにテキスト表示され、その後ろの操作、 例えば、 print "Status: 301 Move Permanent\n"; print "Location: http://localhost/file/data-1.lzh\n\n"; も、単純に文字列として表示されてしまいます。 ところが、print "Content-type:text/html;charset=shift_JIS\n\n"; の行を削除すると、 もともとの目的の動作(上記の例ではファイルのダウンロード画面ポップアップ)になります。 このように、print "Content-type:text/html;charset=shift_JIS\n\n";を書かなくて済む (あるいは書かない方が良い場合)というのは、なぜでしょうか。 サーバによっては動作が変わるのでしょうか。 ※そのCGI内で、print "Content-type:text/html;charset=shift_JIS\n\n"; を2行書いてあるというようなことはありません。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • HTMLのファイルにCGI処理結果を表示する

    まずトップページはhtmlで作ります。 そのトップページにいつも変化する所があるのでcgiで処理を施したものをhtmlに貼り付けたいと思っています。 その場合に例えば画像を出力させる場合は <IMG src="cgi-local/top.cgi"> で指定し、 #!/usr/local/bin/perl print "Content-type: image/jpeg\n\n"; open FH,"<../image.jpg"; binmode FH; binmode STDOUT; print while(<FH>); close FH; をやれば動かせますが、これを画像ではなくhtmlを表示させるためには print "Content-type: image/jpeg\n\n"; を print "Content-type: text/html\n\n"; に変更する事により可能だと思いやってみたのですが、うまく出力できませんでした。 cgi処理をうまくhtmlに貼り付ける方法があるのでしょうか。どうか教えて頂けないでしょうか?お願します。(涙)

    • ベストアンサー
    • CGI
  • print "Content-type: text/html\n"; の行方

    以下のようなスクリプトを作ってみました。 #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "<HTML>\n"; @week = ('Sunday','Monday','Tuesday','Wednesday','Thursday'); print $week[3],"\n"; print "</HTML>\n"; ------------------- 二つ疑問があります。 (1)ブラウザで表示されるページのソースを見ると、<HTML>から始まっています。 print "Content-type: text/html\n"; print "\n"; この部分はどこかにprintされているのでしょうか。 (2)Internet ExplorerとFirefoxでは表示されるのに、Lunascapeではエラーとなり表示されません。 どうしてそうなるのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • perl CGIでのhttpヘッダー出力 (Content-type:

    perl CGIでのhttpヘッダー出力 (Content-type: text/html\n\n) が不要な場合について perlでCGIを作成しています。 多くの場合は、httpのヘッダー出力(Content-type: text/html\n\)を行っています。 毎回ではないですが、HTTPヘッダーの出力が不要な場合が存在します。 (HTMLにContent-type: text/html\n\が出力され表示されます。) そこで、HTTPヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • content-typeについて

    こんにちは。 メール送信のcontent-typeについて質問があります。 content-type="text/plain"で設定し、 HTMLメールを送信すると受信側はどのように表示されるのでしょうか? また、その逆(content-type="text/htmlでテキストメール送信")はどうなるのでしょうか? 確認する環境がないので申し訳ありませんが、 ご存知の方宜しくお願い致します。

  • content-typeヘッダを先に出力してもいいでしょうか?

    SSIでCGIを呼び出し、ひととおりの処理をして最後にcontent-typeヘッダを出力しています。 アクセス解析用の環境変数を取得するだけで、ページ上には何も表示しない(ブラウザに何も返す必要がない)場合、  print "content-type: text/html\n\n";  print ""; としていますが、これを先に出力してもいいものでしょうか? ヘッダを先に出力してしまえば、その後スクリプトで時間がかかる処理をしても、ブラウザの「待ち時間」を最小にできるのではないかと思うのですが。

    • ベストアンサー
    • Perl
  • cgiで表示するhtmlページ内でバイナリ画像を出力したい

    cgiで表示するhtmlページ内でバイナリ画像を出力したい 「CGI 画像出力」でググったページで下記のコードがありました。 下記コードは、 Content-typeをimage/gif等にして バイナリを print すれば表示される という書き方になっていると思いますが、 content-typeがtext/html のページ内でバイナリをprintした場合 バイナリが文字列としてグシャァァァと表示されてしまいます。 ------- $view = 'aaa.jpg'; print "Content-type: image/jpeg\n\n"; #コンテンツタイプを指定する open IMGG,"$view"; #ファイルハンドル IMGGに画像ファイルを読み込む binmode (IMGG); #画像なのでバイナリモードに設定する print <IMGG>; #ファイルハンドルを画面に書き出す close (IMGG); #ファイルハンドルを閉じる exit; ------- content-typeがtext/htmlの状態でバイナリの画像を表示するには どうすればよいのでしょうか? cgiを2つ用意して、上記のコードを img src=~~.cgi という形で 呼び出すしかないのでしょうか?

    • ベストアンサー
    • Perl
  • htmlからテキストを返すperlを実行する方法

    アクセスカウンターの数字画像を出力するperlのcgiを、<img>タグで、 <img src="./counter.cgi"> と、呼び出す方法があると思いますが、これと同じように、画像ではなくテキストを出力するperlのcgiをhtml中に呼び出して、ブラウザに表示する方法はないでしょうか? 以下のような感じかと漠然と思ったのですが、やはり上手くいくはずはありませんでした。 ■cgiプログラム(test.cgi) #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "TEST TEXT"; exit 0; ■htmlファイル <html><head></head> <body> <br> <hr> <object data="./test.cgi" type="text/plain"></object> <hr> </body> </html> perlもhtmlも独学で学んだ基礎レベルだと自分で思っています。 どなたか突破口となるヒントをお願いします。

    • ベストアンサー
    • Perl
  • CGIで作ったHTMLの文字化けについて

    CGIのヘッダを "Content-type: text/html\n\n" として、HTMLをブラウザに出力するcgiを作っているのですが、 「表示」という文字が「侮ヲ」と文字化けしてしまいます。 HTMLの<head></head>内には print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift-jis\">"; と記述して日本語を指定しています。 文字化けの原因がまったくわかりません。 心当たりありませんでしょうか?

    • ベストアンサー
    • Perl