CGIでgifファイルを表示するには?

[上に] [前に] [次に]
tak [E-Mail] 1999/09/09(木) 17:43:02
初歩的な質問ですみません。私の使っているサーバーは
exec命令が使えないのでアクセスログをつるためにCGIを
IMG SRC=""で呼び出しています。その場所に画像を表示さ
せたいのですが、そのためにはPerl文中にどのように書けば
よいでしょうか?画像表示に必要な部分だけでいいので
どなたか教えていただけないでしょうか?

B-Cus 1999/09/09(木) 18:23:04
print "Content-type: image/gif\n\n";
open(IN,"hoge.gif");
print <IN>;
close(IN);

B-Cus 1999/09/09(木) 18:27:52
Content-length を出した方がいいかなぁ。
> print "Content-type: image/gif\n\n";
print "Content-type: image/gif\n";
print "Content-length: ",-s "hoge.gif","\n\n";

たこすけ 1999/09/09(木) 18:30:53
--A--
print "Location: hoge.gif\n\n";
--B--
print "Content-type: image/gif\n\n";
open IN, "hoge.gif";
print <IN>;
close IN;
----

ウチではA,Bどちらでも出来たけど
正しい方法かどうかは知りません。(←オイオイ)

Bの場合、Windowsだとbinmodeとか必要なのかなぁ?

たこすけ 1999/09/09(木) 18:32:22
あ、遅かった。

B-Cus 1999/09/09(木) 18:39:23
> Bの場合、Windowsだとbinmodeとか必要なのかなぁ?
そうです。binmode(IN)

ふじ 1999/09/09(木) 18:49:56
サーバが NT だったときのために、
open(IN,"hoge.gif");
の後に
binmode IN;
としておく方が安全かも。

seea 1999/09/10(金) 08:05:07
>たこすけさん

環境に大きく左右されるので一概には区別できませんが、
Aはクライアントのキャッシュに入らないことが多いです。
Bは(Content-length が決まっていれば?)設定によっては、キャッシュ入りします。

この現象はMSIE5.0で確認しました。
ユーザ数を考慮すれば、アクセスログに違いが出てくるのではないでしょうか。

tak [E-Mail] 1999/09/10(金) 10:32:50
[[解決]]
沢山のみなさんに教えて頂いて本当に有難うございました。
お蔭様で見事に解決しました。(^o^) 次回(?)もよろしくお願いします。

たこすけ 1999/09/13(月) 16:22:45
既に解決されていますが・・・

>> Bの場合、Windowsだとbinmodeとか必要なのかなぁ?
> そうです。binmode(IN)
B-Cusさん、ご返答ありがとうございます。

> ユーザ数を考慮すれば、アクセスログに違いが出てくるのではないでしょうか。
seeaさん、これは
「キャッシュに入ると、CGIを呼ばずにキャッシュを読みに行くので
 正確なアクセスログが取れない」
という意味でしょうか?

だとしたらBを
print "Pragma: no-cache\n";
print "Content-type: image/gif\n";
print "Content-length: ",-s "hoge.gif","\n\n";
のようにすれば大丈夫・・・かな?
(ウチのNC4はこれでキャッシュ入りしませんでした)

発言の意味を取り違えていたら、すいません。

paraQ 1999/09/13(月) 17:55:30
ユーザーにとってはキャッシュに入ってくれた方が、表示速度の面では良いのではないでしょうか。

それで個人的には
> --A--
> print "Location: hoge.gif\n\n";
この方法でキャッシュに入る方法があればなあ。無いか……。

[上に] [前に] [次に]