perl localhostでgifを表示するには

このQ&Aのポイント
  • 超初心者が1週間でプログラムを学び、perlを使用していますが、localhostでgif画像が表示されません。
  • ブラウザはfirefoxとsafariで試しましたが、両方ともgif画像を認識しません。
  • テキストファイルを確認しているため、perl自体の動作とアクセスログは正常です。
回答を見る
  • ベストアンサー

perl localhostでgifを表示するには

超初心者からプログラムを初めて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 自体の活動と、アクセスのログ?自体は正常に動いているみたいです。 お願いします。 助けてください!

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

これは、サーバーの設定の関係ですね。 そのGIFファイルをCGIと同じディレクトリに置いていませんか? httpサーバーの設定によっては、URL上では一緒に見える CGIのディレクトリと 静的なファイルのディレクトリとが違います。Macのサーバーの初期設定では、まさにそのようになっているようです。 そのGIFファイルを WebServer > Documents に入れてみてください。 まとめると localhost/~.cgi はCGIのアクセスと解釈され、CGI-Executables にあるファイルが実行される。 その結果の出力として出てきた locahost/~.gif は静的なファイルなので Documents にファイルを探しにいく。

dummyplugineva
質問者

お礼

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

その他の回答 (2)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

具体的に、カウンタ画像はどこに置いてあるのでしょうか? それに合わせて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\">";」のようになります)

dummyplugineva
質問者

お礼

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

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

まず、現状どう表示されるのですか? このスクリプトをCGIとして実行するように、HTTPサーバーは設定できていますか? 単にfirefoxやSafariの「開く」でPerlのスクリプトを開いても、そのスクリプトがそのまま表示されるだけだと思いますが。

dummyplugineva
質問者

お礼

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

dummyplugineva
質問者

補足

ご回答ありがとう御座います。 現状は test --------------------------------------------------------------------------------------------------- □□□ と表示されます。 □にはブラウザ毎の画像が表示できないアイコンが出てます。 素人すぎて恥ずかしい話ですが、 「このスクリプトをCGIとして実行するように、 HTTPサーバーは設定できていますか?」 については、お話しされている内容がよくわかりません。ごめんなさい。 状況としては、まだ、オンライン上にはあげておらず、 自分のパソコンの中で学習しているので、 サーバー等の知識は全然無いのです。 今は、パソコンの中のHD→ライブラリ→WebServer→CGI-Executablesに入れて 実験をしています。 開くためには http://localhost/cgi-bin/count.cgi と打ってsafariやfirefoxで表示させています。 以上、ご確認の上、更なるご助言をいただければと思います。

関連するQ&A

  • perl の printでのファイルへの指示にて

    独学でmacでパールを勉強しています。 始めてからまだ1週間くらい。 教科書みながら、print命令でファイルハンドルに指示を出してるのですが、 書き込めはできるのですが、 ファイルが無い場合、 新規に自動でファイルが作成されるはずとの記載があったのですが、 何故か、自動でファイルが生成されません。 調べても、設定が必要等言われてますが、 mac自体も初心者でほとんどわかりません。 どのような設定にすればいいのでしょうか? また、ソースに何か悪い所があるのでしょうか? お助けください。   ちなみに下記がソースです。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーー #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>アクセスカウンタ</TITLE></HEAD>\n"; print " <BODY>\n"; print "<H1>test</H1><HR>\n"; if ( open ( FH , "count.txt")){ $cnt = <FH>; close( FH ); $cnt++; print"<CENTER>あなたは${cnt}人目の訪問者です。</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
  • Perlでのファイル一括読み込み

    Perlにてファイルの一括読み込みを以下記述で実施しております。 実行環境はAIXです。 ------------------------------- #!/usr/bin/perl open(FH,"/tmp/filename1.txt"); @aaa=<FH>; close(FH); print "@aaa\n"; ------------------------------- 上記内容をWindows XPにて実行した場合、何も表示されません。 print文が動いていないのか、ファイルの読み込みができていないのか不明です。 ファイルのパスは以下のように変更しております。 ------------------------------- open(FH,"C:\filename1.txt"); @aaa=<FH>; close(FH); print "@aaa\n"; ------------------------------- Windowsにて動作するようにはどのようにすれば宜しいのでしょうか? 初歩的な質問かもしれませんが、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • perlのDigest::MD5;でのMD5算出が異なる

    perlのDigest::MD5;でのMD5算出が異なる 下記、スクリプトをレンタルサーバ上と、WindowsOS上で走らせてみたところ、おなじファイルにも関わらず、MD5が異なります。 何故でしょうか? #!/usr/local/bin/perl use strict; use warnings; use Digest::MD5; my $file = 'test.zip'; my $ctx = Digest::MD5->new; open my $fh, "<$file"; $ctx->addfile($fh); my $md5 = $ctx->hexdigest; close($fh); open my $fh2, ">>md5.txt"; print $fh2 "$file $md5\n"; print "$file $md5\n"; close $fh2;

    • ベストアンサー
    • Perl
  • flockが使えない場合のスクリプトを教えて下さい

    こんにちわ。私はwindows meなのですがflockが使えないようなのでその場合はどのようなスクリプトで表現したらよいのか方法があったら教えて下さい。このflockの部分に代わるものを教えて下さい、又他の方法があればアドバイス下さい。宜しくお願いします。 open(COUNT,"+<countdata.txt") || die "File'countdata.txt'Open Error\n"; #flock(COUNT,2); $counter=<COUNT>; $counter_new=$counter+1; print"$counter_new\n"; seek(COUNT,0,0); print COUNT"$counter_new\n"; close(COUNT); #flock(COUNT,8);

    • ベストアンサー
    • Perl
  • 巨大ファイルの行をを逆順に並べ替えたい>perl

    下記、perlスクリプトで通常は逆順に並べ替えることができると思うのですが、ファイルの行数が1000万行程度あり、実行すると、PCのメモリを食いつぶしてしまいまともに動作しません。 どのようにすればよいでしょうか? もしくは、これに相当するようなフリーソフトはありますか? ご存知の方教えてください。 宜しくお願い致します。 #!/usr/local/bin/perl open(OUT, "1all.txt"); open (FH , ">out_all.txt"); print FH foreach( reverse <OUT> ); close(FH); close(OUT);

    • ベストアンサー
    • Perl
  • @niftyホームページでのアクセスカウンタ(perl)

    すごく簡単なアクセスカウンタなのですが実行できません。 ちなみに、perlスクリプトは、count.plというファイルに、 #!/usr/local/bin/perl $countfile="count.dat"; open IN,"$countfile"; $count=<IN>; close IN; $count=$count+1; open OUT,">$countfile"; print OUT $count; close OUT; print $count; html内の記述は、 あなたは、<!--#exec cmd="http://hpcgi3.nifty.com/******/count.pl"-->人目 plファイルを置くディレクトリは間違っていないようです。 perl、@niftyに詳しい方回答お願い致します。

    • ベストアンサー
    • Perl
  • SSIの実行

    アクセスカウンタ作成についての質問です。 あるプロバイダが提供している領域を使い、 public_htmlフォルダ直下に count.cgi、count.shtmlというファイルを置き、 count.shtmlからcount.cgiを呼び出して、 自前のアクセスカウンタを実行しようとしましたが、 アクセス数の部分が表示されず困っています。 ("カウント数は"の後が空白で何も表示されません。 エラー表示等はありません) チェック方法項目等ありましたらお教え頂けません でしょうか。 よろしくお願い致します。 ※public_htmlフォルダ及び、対象2ファイルには  それぞれ755のパーミッションを設定しています。 以下、html文です。 ------------------------------ <html> <head><title>アクセスカウンタ</title></head> <body> カウント数は <!--#exec cgi="./count.cgi"--> </body> </html> 以下、CGIプログラムです。 ------------------------------ #! /usr/local/bin/perl $filename = "count.txt"; if (!open ( FP, "$filename")) { $no = 0; } else { $no = <FP>; close(FP); } $no++; print "$no" if (!open ( FP, ">$filename")) { print "ファイル $filename がオープンできませんでした ($!)\n"; } else { print FP $no; close(FP); }

    • 締切済み
    • CGI
  • perlで動画を表示させたい

    perlで動画を表示させたいのですがうまくいきません。 print "Content-type: video/mpeg\n\n"; open FH,"foo.mpg"; binmode FH; binmode STDOUT; while (<FH>) { print STDOUT; } close FH; exit; MIMEのタイプがちがうのですか? サーバーに設定されているMIMEタイプです。 video/mpeg mpeg mpg mpe video/quicktime qt mov video/x-msvideo avi video/x-sgi-movie movie

    • ベストアンサー
    • CGI
  • utf-8での日本語正規表現の書き方

    WindowsXPでPerlの正規表現の勉強をしています。 下記のスクリプトを作りテストしているのですが例1はマッチするのに例2はマッチしません($countが0のままです)。どうしてなのでしょうか?なおスクリプトファイルも、hoge.txtも共にUTF-8です。どなたかお教えいただけますでしょうか。どうぞよろしくお願いします。 use utf8; use encoding ("utf-8"); # 例1################################## $str1 = "そろそろ夏も終わりですね。"; $str2 = "夏"; if ($str1 =~ /夏/) { print "例1の答え: 含まれています \n"; } else { print "例1の答え: 含まれていません \n" } # 例2 ################################### $count = 0; open(FH, "C:\\temp\\hoge.txt"); while(<FH>) { if (/夏/) { $count++; } } print "$count \n";

    • ベストアンサー
    • Perl
  • どうしてもインターナルサーバーエラーになります

    #!/usr/bin/perl # アクセスカウンタ print "Content-type: text/html; charset=Shift_JIS\n\n"; # カウントファイルから読み込み open(IN, "counter.txt"); $count = <IN>; close(IN); # カウント増加 $count++; # カウントファイルに書き込み open(OUT, "> counter.txt"); print OUT $count; close(OUT); print <<EOL; <html> <body> <p>あなたは $count 人目のお客様です</p> </body> </html> EOL ------------------------------------------- ↑は、 http://ponk.jp/perl_bbs/index.php?page=2 このサイトからの引用なのですが、どう頑張っても このアクセスカウンターCGIにアクセスしてもインターナルサーバーエラーになってしまい助言お願いにきました。。 ちなみにこのアクセスカウンター編の前の「ブラウザに文字列を表示する」のところでは、しっかりCGIをサーバーにアップロードして ブラウザに表示させることができましたので、なぜアクセスカウンター は表示してくれないのか途方にくれています。 ・パスの確認 ・属性の確認 ・アスキーモードなどの送信形式の確認 等など、あやしいところは全てチェックしてみましたがダメでした・・・。 ブラウザに文字列を表示させるだけの事はできたのになぜ、アクセスカウンタは表示させれないのか全くわかりません。 どなたかわかる方いらっしゃいましたらすいませんがどうか教えてください。よろしくおねがいします。

専門家に質問してみよう