dポイントプレゼントキャンペーン実施中!

超初心者からプログラムを初めて1週間、
プログラム言語にはperlを使用しています。
mac os x です。
perlの教科書読みながら、アクセスカウンタを作ろうとした所、
何故かgif画像が表示されません。
ネットの素材置き場からとってきましたが、パソコン自身、gif自体は認識してくれてます。
ただ、それをperlに組み込んで使おうとすると、表示されません。
ブラウザはfirefoxとsafariで試しましたが、両方認識してくれませんでした。
ちなみにソースは

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>アクセスカウンタ2</TITLE></HEAD>\n";
print " <BODY>\n";

print "<H1>test</H1><HR>\n";

if ( open ( FH , "count.txt")){
$cnt = <FH>;
close( FH );

$cnt++;

print"<CENTER>\n";
foreach $fld (split (// , $cnt)){
print "<IMG SRC=\"${fld}.gif\">";
}
print"</CENTER>\n";


if ( open(FH, ">count.txt" )){
print FH $cnt;
close(FH);
}

else {
print "ファイルの書き込みオープンに失敗しました。\n";
}
}

else {
print "ファイルの書き込みオープンに失敗しました。\n";
}



print "</BODY>\n";
print "</HTML>\n";
__END__

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

です。

テキストファイルを確認しているので、
perl 自体の活動と、アクセスのログ?自体は正常に動いているみたいです。

お願いします。
助けてください!

A 回答 (3件)

これは、サーバーの設定の関係ですね。


そのGIFファイルをCGIと同じディレクトリに置いていませんか?

httpサーバーの設定によっては、URL上では一緒に見える CGIのディレクトリと 静的なファイルのディレクトリとが違います。Macのサーバーの初期設定では、まさにそのようになっているようです。

そのGIFファイルを WebServer > Documents に入れてみてください。


まとめると
localhost/~.cgi はCGIのアクセスと解釈され、CGI-Executables にあるファイルが実行される。
その結果の出力として出てきた locahost/~.gif は静的なファイルなので Documents にファイルを探しにいく。
    • good
    • 0
この回答へのお礼

ありがとう御座います!
結果としては出力を変更して、
print "<IMG SRC=\"../${fld}.gif\">"; にして
ファイルをDocmentsというフォルダに入れることで作動しました!

設定でのご意見、誠にありがとう御座います!

お礼日時:2011/02/09 09:44

具体的に、カウンタ画像はどこに置いてあるのでしょうか?


それに合わせてHTML出力を設定してください。

CGIは、単に「HTMLをプログラムで生成する」ものにすぎません。
その出力をHTMLとして正しいものにするのは、CGIの問題ではなく HTMLの「Webデザイン」的な話になります。

質問者さんのコードでは、
「<IMG SRC="0.gif">」のようなHTMLデータを出力しています。
このCGIが「http://localhost/cgi-bin/count.cgi」に置いてあるのですから、
画像も同じディレクトリである「http://localhost/cgi-bin/0.gif」などでアクセスできるようにしておかないと、画像を表示できないことになります。

画像が別のフォルダに置いてあるのなら、
・画像もcgi-binフォルダに入れる

・画像の置き場所に合わせてHTML出力を変える
か、どちらかが必要です。

(後者は、例えば(「http://localhost/XXX/0.cgi」で画像が表示できるのなら、
HTMLデータとして「<IMG SRC="/XXX/0.gif">」とすればいいわけですから、
プログラムは「print "<IMG SRC=\"/XXX/${fld}.gif\">";」のようになります)
    • good
    • 0
この回答へのお礼

ありがとう御座います!
結果としては出力を変更して、
print "<IMG SRC=\"../${fld}.gif\">"; にして
ファイルをDocmentsというフォルダに入れることで作動しました!

置き場所でのご意見、誠にありがとう御座います!

お礼日時:2011/02/10 23:36

まず、現状どう表示されるのですか?


このスクリプトをCGIとして実行するように、HTTPサーバーは設定できていますか?

単にfirefoxやSafariの「開く」でPerlのスクリプトを開いても、そのスクリプトがそのまま表示されるだけだと思いますが。

この回答への補足

ご回答ありがとう御座います。

現状は

test
---------------------------------------------------------------------------------------------------
□□□


と表示されます。
□にはブラウザ毎の画像が表示できないアイコンが出てます。

素人すぎて恥ずかしい話ですが、

「このスクリプトをCGIとして実行するように、
HTTPサーバーは設定できていますか?」

については、お話しされている内容がよくわかりません。ごめんなさい。

状況としては、まだ、オンライン上にはあげておらず、
自分のパソコンの中で学習しているので、
サーバー等の知識は全然無いのです。

今は、パソコンの中のHD→ライブラリ→WebServer→CGI-Executablesに入れて
実験をしています。

開くためには http://localhost/cgi-bin/count.cgi と打ってsafariやfirefoxで表示させています。

以上、ご確認の上、更なるご助言をいただければと思います。

補足日時:2011/02/08 23:16
    • good
    • 0
この回答へのお礼

解決しました!ありがとう御座います!

お礼日時:2011/02/10 23:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!