• ベストアンサー

なんでサーバーエラー??

CGIをはじめて、まだまだ初心者です。 プログラムは、MS-DOSで構文チェックして、 OKとでるのに、サーバーエラーっておかしくないですか? もちろん、サーバは、自分のパソコンに アパッチいれて、Perlいれて確認するんですが、 何がエラーなんでしょう・・・? まだ、高級なCGIなど作れないので、 フリーのスクリプトをDLしてきました。 まず、構文チェックOK。 そして、Perl開いたまま、 ブラウザにアクセスします。 そうしたら、サーバーエラーとなるのです。 何を変えていったらいいのか教えて下さい。 (自分で作った簡単なアンケートフォーム とかは成功しました)

  • CGI
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • nak205
  • ベストアンサー率60% (40/66)
回答No.5

>プログラムは、MS-DOSで構文チェックして、 >OKとでるのに、サーバーエラーっておかしくないですか? いえ、いろんなところでエラーはでます。何らかの原因でスクリプトがとまってしまい、ブラウザに十分なヘッダーが送れなかったときにInternal Server Errorがでます。 エラーの特定にはApacheのエラーログも参考になります。が、Premature End of Scriptだと、特定は難しいです。 フリーのスクリプトをお使いとの事なので、多分ディレクトリやファイルの読み書き時のエラーには対処していると思います。この場合経験上多いのが、requireしているスクリプトが見つからないとかではないでしょうか? 何かrequireしているスクリプトがありますか?その時はまた補足でお知らせください。 #*********私の使うエラー箇所を見つける最後の手段************ print "Content-type: text/html\n\n"; print "ここまでOK"; exit; #*********************************************************** この3行をスクリプトの頭の方に置いて(もちろん#!/bin/perlの宣言文のあと)スクリプトをブラウザからたたき、ブラウザに“ここまでOK”が表示されたら、少し下の行間に挿入してたたき、またOKだったらまたずらしてたたき、というような地道な作業で見つけることはできます。慣れたら一番怪しいところから確認したり、スクリプトの後ろから始めたりもできます。 あまりにも地道なため、自分ではほんとに最後の手段にしてますが、これでエラーが見つからなかったことはありません。 いざとなったら、どうぞ。

peter8
質問者

お礼

お返事非常に遅くなってしまい、申し訳ありません。 しばらく、パソコンから遠ざかっていました。 CGIは、ややこしい。 結局、初歩的なミスなんですが、 スクリプトによっては、cgi-binに入れなくても動く ものや動かないものがあったのです。 これにはまいりました。 無精者ですが、これからもよろしくお願いします。

その他の回答 (4)

noname#225520
noname#225520
回答No.4

そのスクリプトが、書き込みをしくじったときのフォローをしているかどうかでしょう。スクリプトはロックディレクトリが無ければ作り、有れば何回かループして止まるはずです。作れなかったときのフォローができていなければサーバーエラーが出てもおかしくはないでしょう。そこいらをコメントアウトしてみてはいかが?

peter8
質問者

お礼

お返事非常に遅くなってしまい、申し訳ありません。 しばらく、パソコンから遠ざかっていました。 CGIは、ややこしい。 結局、初歩的なミスなんですが、 スクリプトによっては、cgi-binに入れなくても動く ものや動かないものがあったのです。 これにはまいりました。 無精者ですが、これからもよろしくお願いします。

noname#225520
noname#225520
回答No.3

File Not FoundでもPermissionでもなければスクリプト・エラーでしょう。怪しい部分をコメントアウトしてみるのがいいでしょう。"@"にエスケープが必要だったりとか。(\@になる)あとはロックディレクトリの書き込みエラー、データファイルのパーミッションかも知れません。 いずれにせよ、ソースを見なければ何とも言えません。

peter8
質問者

補足

ロックディレクトリの書き込みエラーも 普通にサーバーエラーとなるのですか? 本には、windowsでは、ロックはだめとありました。 ロックしたままってことですよね。 エラーと言うことは? すなわち、サーバーエラーはひっくるめて 表示されるってことでしょうか?

  • Lio
  • ベストアンサー率44% (13/29)
回答No.2

サーバーエラーとは、Internal server Errorですよね。 構文も正しいとすれば、最初の一行目を確認してみてください。 大体は、 #!/usr/bin/perl #!/usr/local/bin/perl だと思いますが、公開するHPスペースのサーバー注意事項などに記載されていると思いますので、確認してみてください。

参考URL:
 
peter8
質問者

お礼

お返事非常に遅くなってしまい、申し訳ありません。 しばらく、パソコンから遠ざかっていました。 CGIは、ややこしい。 結局、初歩的なミスなんですが、 スクリプトによっては、cgi-binに入れなくても動く ものや動かないものがあったのです。 これにはまいりました。 無精者ですが、これからもよろしくお願いします。

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

自作はOKということは、フリースクリプトの実行の仕方に問題があると言うことだと思います。 ダウンロード元の注意書き等はきちんと読まれましたか? ブラウザからのアクセス時は「その他」からの実行になりますので、実行権のあたりが怪しいのではないかと思うのですが…。 またはログを書き込む様なスクリプトの場合はディレクトリの書き込み権限の可能性もあると思います。

peter8
質問者

お礼

お返事非常に遅くなってしまい、申し訳ありません。 しばらく、パソコンから遠ざかっていました。 CGIは、ややこしい。 結局、初歩的なミスなんですが、 スクリプトによっては、cgi-binに入れなくても動く ものや動かないものがあったのです。 これにはまいりました。 無精者ですが、これからもよろしくお願いします。

関連するQ&A

  • 500 Internal Server Error

    500 Internal Server Errorが出ます。 サーバ:CentOS6.4 サーバ側の文字コード:UTF-8 perlのパス:/usr/bin/perl index.cgiの文字コード:LF (サーバ上で直接作成) index.cgiのパーミッション:777 (パーミッションの問題を避けるためわざと、777に設定) ここで、サーバ上で直接実行 perl /var/www/html/index.cgi すると、正しく処理の結果が返ってきてエラーは出ません。 しかし、クライアントのブラウザでindex.cgiにアクセスすると、500 Internal Server Errorが出ます。 なお、index.cgiを設置するディレクトリはApacheで以下のように設定しcgiスクリプトを有効にしています。 <Directory “/var/www/html”> Options FollowSymLinks ExecCGI </Directory> AddHandler cgi-script .cgi .pl #AddDefaultCharset UTF-8 ******************************************************* 【/var/www/html/index.cgi】 #!/usr/bin/perl print "Content-type: text/html"; print "<html>"; print "<body>"; print "<p>"; print "CGI"; print "</p>"; print "</body>"; print "</html>"; スクリプトの文法に問題があれば、サーバ上で直接実行させた時点でエラーを吐きそうですし、 パーミッションは777にしていますし、Apacheの設定もcgiを有効にしているので 他に500 Internal Server Errorが出る原因が掴めません。 Apacheの設定で、#AddDefaultCharset UTF-8 として文字セットを無効にした場合は CGIスクリプトの方で何か追加してやらないと、文字化け以前の問題で必ず500 Internal Server Errorを吐くんですかね? ご指導のほどよろしくお願い致します。

    • ベストアンサー
    • CGI
  • 文法はあってるのにサーバーエラーが出る

    perlで構文チェックをしたところ、OKが出たので、 アパッチにて実行したところサーバエラーがでました。 調べたところ、以下のようなエラーが出ましたが、これは、サブルーチンや、ライブラリが呼出されていないのでしょうか?どのように対処すればいいか教えてください。 Premature end of script headers: c:/www/public_html/subsub.cgi Undefined subroutine &jcode::convent called at c:\WWW\PUBLIC~1\SUBSUB.CGI line 8. Premature end of script headers: c:/www/public_html/okikae.cgi Can't locate cgi-bin.pl in @INC (@INC contains: C:/usr/local/lib C:/usr/local/site/lib .) at c:\WWW\PUBLIC~1\OKIKAE.CGI line 3.

    • 締切済み
    • CGI
  • 500 Internal Server Err で困ってます

    私、CGI初心者なんですが、”500 Internal Server Err ”が出てしまい困ってます。 カウンターの設置し、きちんと動いているんですが、フォームを入力してもらい、ファイルに保存するCGI(Perl)です。このエラーはスクリプトにエラーがある時や、FTPで バイナリモードでスクリプトを送ってしまった時などに起こると本に書いてありました。なので、次の事を試してみたんですが・・・ ・TELNETでPERLの構文チェックと動作確認 ・FTPでアスキーで再度アップロード ・再度スクリプトを検証 ・念のため、ファイルの属性をチェック ・念のため、.htaccessをチェック(改行コードなど、・・でもカウンタプログラムが動いているから問題ないはずですよね??) 以上の事を試したんですがダメでした。 そこで、もっと簡単なスクリプト(簡単な標準出力だけを するもの)を動かしてみたんですが、やはりダメで、上記のチェックをやってみたんですが、ダメでした。 この簡単なスクリプトはCGIの本で一番最初に載っている ものでわずか10行のものです。 TELNETで動作も確認したんですが・・・ 何分、初心者なもので・・・考えられることがあったら 教えていただけると助かります。

    • ベストアンサー
    • CGI
  • Server error! Error 500

    RedHat7.3, apache-2でCGIが動くようにしたいのですが、 httpd.confをいじったりいろいろやってるのですが Server error! Premature end of script headers: tmp.cgi Error 500 と言われてしまいます。 Object not found!(Error404)ではないのでcgiファイルがあることは認識されてるようですが、 ”早すぎる終わり”をどうやったら回避できますか? 教えてください。

  • CGIのデバッグについて

    CGIを組み、自分のコンピューターでAPACHEを使ったテストでokなことを確認してからサーバーに上げてみたのですが、「500 Internal Server Error」が出てしまい動作しません。 サーバーへの転送時にアスキーモードで送る、文字コードはEUCである、属性は正しいか、Perlのパスは正しいか、必要なファイルは全てそろっているか、についてはチェックしてあるのですが動作しません。 もちろんPerlソフトを使っての構文チェックもしてあります。 これ以外になにか考えられることはあるでしょか。 あったら教えて下さい。よろしくお願いします。 ちなみに「CGIデバッグ」で検索した過去のQ&Aは全て参照しました。

    • ベストアンサー
    • CGI
  • C言語で作成したCGIにて「Internal Server Error」

    こんばんは。CGIについて質問させて下さい。 現象: C言語でCGIを作成し、ローカルで動作しているApacheで 動作確認をしようとしたところ、 「Internal Server Error」が出てしまいました。 質問: 上記の現象が起こったのですが、C言語でCGIを実行するには なにが足りないでしょうか? 環境: OS:WindowsXP Webサーバ:Apache 2.0.61 Cコンパイラ:gcc 3.4.4(cygwin) 状態: ○「http://localhost:8080/」にアクセスすると「あなたの予想に反して・・・」画面は見れます。 ○「http://localhost:8080/cgi-bin/test.cgi」にアクセスすると、「Internal Server Error」が表示されます。 ○httpd.confの設定値(デフォルトから修正した部分) ・ServerName 127.0.0.1:8080 ・<Directory "C:/Program Files/Apache Group/Apache2/cgi-bin">内 Options none → Options ExecCGI ・#AddHandler cgi-script .cgi → AddHandler cgi-script .cgi ○Apacheのerror.log ~[error] [client 127.0.0.1] Premature end of script headers: test.cgi ○test.cgiのコンパイル前ソース ---ここから #include <stdio.h> int main(void){  printf("Content-Type: text/html\n\n");  printf("<html><body>Hello, World!</body></html>");  return 0; } ---ここまで ○test.cgiはcygwinにて標準出力を確認済み。 ・・・ちなみにperlでCGIを作成すると表示されます。 (ActivePerlインストール済み) perl側のソース ---ここから #! c:/perl/bin/perl print "Content-Type: text/html\n\n"; print "<html><body>"; print "Hello, CGI!"; print "</body></html>" ---ここまで なにかおかしな点がございましたらご指摘をお願い致します。

    • ベストアンサー
    • CGI
  • Perlのエラーについて

    PerlでInternal Server Errorが表示します。 Perlのインストール、Apacheのインストール、Apacheの設定をしました。 Perlのバージョンは5.8.7.813です。 プロバイダはCGIのご利用に関する情報 Perl 利用できる(Ver5.10.1)です。 Perlをプロバイダのサーバーへアップロードするのですか? Internal Server Errorについてです。

    • ベストアンサー
    • Perl
  • Apacheのエラーログ

    500のインターネットサーバーエラーの有名なエラーですがはまっています。 Apacheのエラーログを見ているのですが、 Premature end of script headerというエラーがわからずに困っています。 何が悪いのでしょうか?OSはVine Linuxでサーバーを立てていて、 CGIはPerlです。 Perlは5.6.1 Apache 1.3.27 です。

  • 自宅サーバで

    初めまして、 Fedora7にApacheとPerlを入れたので UPローダやショッピングカート等の フリーのcgiを借りてApacheでcgiを動かしたいんですけど 如何すれば良いか全く分かりません。 ただ単にサーバのディレクトリに upload.cgi等を置いたんですけど当たり前のように Internal Server Errorって出ました。 やはりパーミッションの変更などをしないと駄目なんでしょうか? 如何すれアップローダやショッピングカートを 設置出来ますか? お詳しい方居ましたら教えて下さい。 宜しくお願いします。

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

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

専門家に質問してみよう