• 締切済み

perl構文チェックOKなのにCGIが作動しない

自分のパソコンでサーバーを(apache)を置いて、perlでCGIの勉強を始めたのですか、perlは -cw でOKが出ても、CGIを動かすと、サーバーエラーが出ます。どういった原因が考えられ、どう対処すればいいのか教えてください。htmlへのprint関数は表示されるのですが、time が出来ません。カウンターや掲示板も試すのですが、すべてエラーが出ます。また、一度出来た、入力文章を受けとるCGIもエラーがでます。perl初心者なのでいろいろ教えてくださるとうれしいです。

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

みんなの回答

  • dany
  • ベストアンサー率35% (27/77)
回答No.3

>kcatchについてもう少し詳しく教えてもらえませんか? 前に書いたやつをまず実際にやってみて、 それでもわからなかった質問してください。 エラーが出ればわかりますから。

  • dany
  • ベストアンサー率35% (27/77)
回答No.2

CGIのエラーを見るなら「KCatch」というモジュールがオススメです。 どの行でエラーになっているかなどをブラウザで確認できます。 CGIファイルと同じディレクトリにKCatch.pmを置いて、CGIの最初に #!/usr/local/bin/perl   ←環境によって違います BEGIN { use KCatch qw(source); } と記述するだけです。UNIX系OSの場合はファイルの大文字小文字を 判別するので必ず「KCatch.pm」にしてください。「kcatch.pm」 とかだとダメです。

参考URL:
http://www.kawa.net/works/perl/catch/KCatch-j.html
koujin
質問者

補足

返事が大変遅くなり申し訳ございませんでした。 アドバイスありがとうございました。 以前質問した内容はわかったのですが、kcatchについてもう少し詳しく教えてもらえませんか?参考URLだとそれが何物かわからなかったので。すみません。

  • cocky
  • ベストアンサー率57% (232/402)
回答No.1

文法的に問題がないのにエラーが出るということは、ファイルのopen/closeに失敗している可能性が一番高いですね。 プログラム中でファイルを操作する部分のディレクトリ指定が正しいかどうか確認してみるといいんじゃないでしょうか。 あとApache付属のサンプルCGIはちゃんと動いていますか? それが動いていないようであれば、Apacheのhttpd.confの設定が間違っているか、もしくはperlのパス指定が間違っている可能性を考えた方がいいですね。 最近のLinuxやFreeBSDだと、perlのデフォルトの場所が「/usr/local/bin/perl」ではなく「/usr/bin/perl」だったりして、「/usr/local/bin/perl」には全くファイルがなかったりすることもありますし。

koujin
質問者

お礼

大変お礼が遅くなりました。やっぱり分からなくて、ずっと考えていたのですが、やっとわかりました。ありがとうございました。

関連するQ&A

  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ApacheでCGIが正しく動かない。

    RedHatLinux8をインストールして、 Webサーバーを立てよう~と思い立ててみました。 Apache2.0.40です。 一応htmlファイルはのぞけるようになったんですが、 CGIがちょっとおかしくて・・・ #!/usr/bin/perl print "Content-type: text/html\r\n\r\n"; print "Hello, World."; ↑を書いたtest.plはHello, Worldとちゃんと表示されました。 しかし、掲示板・カウンターを開くと・・・ 「ログファイルを開くことができません」 という主旨のメッセージが表示され、正しく実行できません。 ./log.txt とちゃんと指定しているんですが・・・ そのログファイルを開くとサーバーがCGIをして認識しているらしく、 「InternetServerError」が出て開けない・・・。 CGIの属性は755 ログも緩くして755に設定しました。 それでも状況は変わりません。

  • PerlやCGIはそれほど進化していない?

    アクセスカウンターや解析、掲示板などを作りたくて、PerlとCGIを勉強しようと思っています。 これらの書籍を探していると、それほど数もなく、最新でも去年に出版されているものでした。 その前は2009年とかになってしまいます。 これは単純にPerlやCGIは、ここ数年でそれほど変わっていないということなんでしょうか? 古い書籍のもので勉強しても大丈夫でしょうか?

    • ベストアンサー
    • CGI
  • ApacheがPerlを作動してくれないのです。。。

    CGIテストのためにローカルにサーバーマシンを立てました。サーバーはApacheを使用しPHPとPerlをそれぞれインストールしました。 PHPは正常に動いてくれますがPerlだけが何回やってもyou dont have a permission ~~~と表示されます。 ためしにコマンドでperl -v と打ったら正常にPerlは作動していました。ちなみにPerlは C:Perl\bin\perlになっておりCGIスクリプトにも #!C:Perl\bin\perlと表示しています。又、confも各サイトを見てCGIが動くようにしっかり編集しました。 どうすれば動くようになるのでしょうか?

  • apache1.3とperlでCGI

    超初心者です。 windows XPでapache1.3 と active perl 5.1.2をインストールして、 CGIを動作させたいと考えています。 http://localhostを入力してapacheの起動画面は表示されていること を確認しました。 その後httpdconfに下記を追加しました。 AddHandler cgi-script .cgi .pl AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl <Directory "C:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> C:\Program Files\Apache Group\Apache\cgi-binに既存で存在する printenv.plを実行しようとするとファイルのダウンロードの画面が出てきて 実行されません。printenv.plは下記のようにperl.exeへのパスだけ変更しました。 #! C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } どうすればCGIが実行できるようになるのでしょうか? ご教授ください。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • Perl or PHP?

    最近はやり?の自宅サーバーを立てようかと思っているのですが、PerlかPHPどちらを使うか悩んでいます。 主に、掲示板やカウンター、できたらWikiのようなことをしたいと考えているのですが、PerlとPHPどちらを使ってプログラミングするべきでしょうか? それとも、どちらも使ったほうが、より効率的なプログラミングができるのでしょうか? PerlやPHPは個人的にですが、かじったことがあります。また、WebサーバーはApache、DBはMySQLでOSはFedoraCoreを予定しています。 Perlでも、PHPでも、CGIプログラムって作れますよね? どちらが利便性がよいのか、サーバーに負荷がかからないのか等、開発者側に立った意見をお待ちしています。

    • ベストアンサー
    • CGI
  • javaとperlのcgi

    掲示板やらなにやらを作って使うなら パールのCGIとサーブレットで作るのと どっちが良いですかねぇ? ちなみにどちらもPGなのでどっちも 使えますが、悩んでます 個人レベルのHPではないので サーバーを借りてるんですがどっちが良いですかね? (ちなみにどちらも動くです) サーブレットでのデメリットは何スカね? やっぱみんなcgiで作ってるからCGIのがめりっとあり? それともなんかあるんかな? あとトムキャットでもパールのcgi動きます? おしえてマンせー

    • ベストアンサー
    • Java
  • IISでCGIとしてのPerlが動かない

    Win2K ProにてIISでローカルサーバーでサーバーサイドスクリプトの勉強中です。 ASPは標準でついているので、PerlとPHPを組み込みました。 PHPは内部プロセス型ではなく、CGIバージョンですが、正常動作しました。 もちろんASPも。 それで問題なのですが、Perlがどうしても動きません。 PHPと同じように実行ファイルのパスや拡張子の設定はできているはずです。 しかし、いつまでたっても出力が出ず、2分くらいたってCGIタイムアウトとなってしまいます。 PerlにはActive PerlとCygwin付属のPerl両方試しましたが、タイムアウトです。 ファイルをコンソール上で実行してみましたが、Active PerlもCygwinのPerlも、期待通りの出力がなされています。 ちなみに、shファイルをCygwinのbashに関連付けて、実行させましたが、コンソール上での出力とはうらはらに、ブラウザ上ではやはりタイムアウトとなりました。 PerlのソースはいずれもほかのところのApacheでは動いているものです。 httpヘッダも正常です。 ソースの文字コードは英語のみ、EUC、改行コードcr+lf、lfのみなど、いろいろ試しましたがダメでした。 なにが原因なのでしょう。 IISを使っている方、アドバイスお願いします。

  • cgi(perl)でパラメータが渡せない

    以下のプログラムでnum=9が伝わらないので、ミスをご指摘ください。 グラフィカルなアクセスカウンタを表示させようとしていますが うまくいかないのでテキストモードでデバッグしています。 [ /usr/local/apache2/htdocs/gif-view.html ] <html> <head> <meta http-equiv="Content-type:" content="text/html; charset=UTF-8"> <title>gif-view</title> </head> <body> <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> <!-- <img src="/cgi-bin/gif-test.cgi?0" width=50 height=50> --> </body> </html> [ /usr/local/apache2/cgi-bin/gif-view.cgi ] permission は 755 にしています。 #!/usr/bin/perl print "Content-Type: text/plain;\n\n"; print "gif-test.cgi\n"; $prm0 = @ARGV[0]; if($prm0 = "") { print "Param is exist\n"; } else { print "Param is empty\n"; 実行結果として gif-test.cgi Param is empty となります。 httpd.conf で Script Alias /cgi-bin/ "/usr/local/apache2/cgi-bin/" を有効にしています。

    • ベストアンサー
    • Perl
  • windowsでperl

    perlに関する知識に乏しい者ですが質問です。 windowsserver2008にactiveperl5.8.9をインストールしました。 とあるperlプログラムをcgiで動かそうと、apacheもインストールしました。 ですが、サーバーにアクセスするとそのperlプログラム中のgetpwnamという 関数?が実装されていないとエラーがはかれていました。 getpwnamをググってみたのですが、 この関数はwindowsでは実装されてないようです。 なんとかgetpwnamのエラーを解決できないでしょうか? PPMで、必要なモジュールをインストールすれば解決できるレベルであれば、 どれをインストールすればよいのか教えていただけると幸いです。

    • ベストアンサー
    • Perl