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

何を変えていったらいいのか教えて下さい。
(自分で作った簡単なアンケートフォーム
とかは成功しました)

このQ&Aに関連する最新のQ&A

A 回答 (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だったらまたずらしてたたき、というような地道な作業で見つけることはできます。慣れたら一番怪しいところから確認したり、スクリプトの後ろから始めたりもできます。
あまりにも地道なため、自分ではほんとに最後の手段にしてますが、これでエラーが見つからなかったことはありません。
いざとなったら、どうぞ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/06/19 14:15

そのスクリプトが、書き込みをしくじったときのフォローをしているかどうかでしょう。

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

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

お礼日時:2002/06/19 14:15

File Not FoundでもPermissionでもなければスクリプト・エラーでしょう。

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

この回答への補足

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

補足日時:2002/03/05 18:03
    • good
    • 0

サーバーエラーとは、Internal server Errorですよね。


構文も正しいとすれば、最初の一行目を確認してみてください。
大体は、
#!/usr/bin/perl
#!/usr/local/bin/perl
だと思いますが、公開するHPスペースのサーバー注意事項などに記載されていると思いますので、確認してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/06/19 14:14

自作はOKということは、フリースクリプトの実行の仕方に問題があると言うことだと思います。


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

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

お礼日時:2002/06/19 14:14

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCGIでチェックボックスのエラーチェック

下記のような感じで
チェックボックスをいくつか配置し、CGIで動かしています。
それぞれの質問に関して未選択がある場合、
メッセージボックスで「未選択があります」と表示させたいです。
できればjavascriptでなくCGIでやりたいです。
どのようにコードを書けばいいですか?

ためしに以下のように書いてみましたがだめでした。

・・・
elsif ($q1 eq "" && $q2 eq "") {
&error($error = "すべての項目に回答して下さい");
}
・・・

お願いいたします!

<form name="q1" action="test.cgi" method="POST">

Q1
<input type="radio" name="q1" value="q1_a"> A
<input type="radio" name="q1" value="q1_b"> B
<input type="radio" name="q1" value="q1_c"> C

Q2
<input type="radio" name="q2" value="q2_a"> D
<input type="radio" name="q2" value="q2_b"> E
<input type="radio" name="q2" value="q2_c"> F

</form>

下記のような感じで
チェックボックスをいくつか配置し、CGIで動かしています。
それぞれの質問に関して未選択がある場合、
メッセージボックスで「未選択があります」と表示させたいです。
できればjavascriptでなくCGIでやりたいです。
どのようにコードを書けばいいですか?

ためしに以下のように書いてみましたがだめでした。

・・・
elsif ($q1 eq "" && $q2 eq "") {
&error($error = "すべての項目に回答して下さい");
}
・・・

お願いいたします!

<form name="q1" action="test.cgi" method="POST">
...続きを読む

Aベストアンサー

エラーログを読むとか、CGI::Carpを使うとかして、エラーの内容を確認してください。
http://perldoc.jp/docs/modules/CGI-2.89/CGI/Carp.pod


おそらく
elsif ($q1 eq "" || $q2 eq "") {
&error($error = "すべての項目に回答して下さい");
}
のelsifが成立して、「&error($error = "すべての項目に回答して下さい");」を実行する際になんらかのエラーが発生したと思われます。

QCGI/Perlという本はありますがCGI/PHPという本はないのはなぜですか?

アマゾンで調べると表題でCGI/Perlという本はありますがCGI/PHPという本はないのはなぜですか?

Aベストアンサー

なぜそのような書籍が無いのか結論から申し上げると「需要が無い」からです。
その理由はPHPとCGIの動作に起因し、PHP利用の最大のメリット(?なのでしょうか?)であるHTML組み込みなど利用できなくなるからです。

動作の概略(あくまで概略なので細かくするとキリがありません)を示しますと(右に長いのでテキストエディタなどにコピペしてみていただくと見やすいかと思います)

CGIの動作
 ブラウザ-[INTERNET]->Webサーバー -[CGI]-> システム:処理言語{Perl/C/Ruby...etc.}+プログラム:処理結果 -[CGI]-> Webサーバー -[INTERNET]->ブラウザ

PHPの動作
 ブラウザ-[INTERNET]->Webサーバー:PHP:処理結果 -[INTERNET]->ブラウザ

PHPを単体で処理できるようにインストール設定すればPHPをCGIとして利用することも可能です。当然、利用範囲がCGIの域を出なくなり、PHPとしてのメリットがなくなってしまいます。
そのような非効率的な運用利用をする方はほとんどいないので書籍にしても需要が無いと思います(何らかの事情で必要な方なら、WebサーバとCGIがしっかり理解できていれば簡単に実現できるかと思います)。

ちなみに、代表的なWebサーバApacheは外部組み込み機能を使ってPerlを「PHPの動作」と同じ動きをさせることができます。
そちらは「CGI」の範疇ではなく「Webサーバー構築」の分野ですのでそういった書籍を参考にしてください。

なぜそのような書籍が無いのか結論から申し上げると「需要が無い」からです。
その理由はPHPとCGIの動作に起因し、PHP利用の最大のメリット(?なのでしょうか?)であるHTML組み込みなど利用できなくなるからです。

動作の概略(あくまで概略なので細かくするとキリがありません)を示しますと(右に長いのでテキストエディタなどにコピペしてみていただくと見やすいかと思います)

CGIの動作
 ブラウザ-[INTERNET]->Webサーバー -[CGI]-> システム:処理言語{Perl/C/Ruby...etc.}...続きを読む

QCGI(Perl)内での必須項目チェック

CGI(Perl)内で必須項目のチェックを行うところで
書き方が分からず困っています。

フォームページHTMLファイルにラジオボタンで選択ボタンが2つとテキストエリアが3つあります。
ラジオボタンのnameは、携帯電話。
valueの1つ目は "1"、2つ目は ""(空白)。

テキストエリアの
1つ目のnameは、"携帯1"。2つ目のnameは、"携帯2"。3つ目のnameは、"携帯3"。

ラジオボタンのvalueが"1"の場合は、テキストエリア全てに項目が入っていないとエラーメッセージが出るチェックを作りたいのです。

説明が分かりづらいかもしれないのですが、お力をお貸しください。
宜しくお願いします。

Aベストアンサー

milktea_ さん、

ということは、ひょっとして、確認画面の表示は以下のようなコードになっているのでしょうか。

* name を項目名としてそのまま使用
#================================================
print "$name : $in{$name}"
#================================================

もしそうであれば、以下のように書き換えてあげるのでは駄目ですか?
#================================================
print "携帯電話番号1 : $in{'celler1'}"
#================================================

どうしてもコードを書き換えたくないのであれば、name を「携帯電話番号1」のように元に戻してください。
とりあえず「携帯電話番号」には、文字化け等の問題を起こしそうな文字は含まれていないので。。。

milktea_ さん、

ということは、ひょっとして、確認画面の表示は以下のようなコードになっているのでしょうか。

* name を項目名としてそのまま使用
#================================================
print "$name : $in{$name}"
#================================================

もしそうであれば、以下のように書き換えてあげるのでは駄目ですか?
#================================================
print "携帯電話番号1 : $in{'celler1'}"
#======================================...続きを読む

Qperlのcgiで-wTを記述するとエラーに

http://oshiete.goo.ne.jp/qa/7451675.html

まだcgiについてわからないことが多く、
色々質問させてもらっているのですが、致命的な?問題がわかりました。

perlにてcgiを作成し、ローカルPCにてコードのチェックのため、

コマンドプロンプトにてC:\adress\test>perl -c encoding

とするとエラーが出ます。
ソースを下の行から順にコメントアウトして調べたところ、
一番最初の行の

#!/usr/bin/perl -wT

で、エラーが出ているということらしいです。
"-T" is on the #! line, it must also be used on the command line at enncoding.cg
i line 1.
この1文が出てしまいます。

-wTを消すとエラーが出なくなります。

エラーを見つけるための-wT記述だと思っていたのですが、-wT自体がエラーになっているということは、一体どういうことなのでしょうか?
書き方が違うのでしょうか?

詳しく教えて頂きたいです。

http://oshiete.goo.ne.jp/qa/7451675.html

まだcgiについてわからないことが多く、
色々質問させてもらっているのですが、致命的な?問題がわかりました。

perlにてcgiを作成し、ローカルPCにてコードのチェックのため、

コマンドプロンプトにてC:\adress\test>perl -c encoding

とするとエラーが出ます。
ソースを下の行から順にコメントアウトして調べたところ、
一番最初の行の

#!/usr/bin/perl -wT

で、エラーが出ているということらしいです。
"-T" is on the #! line, it must also be used on the c...続きを読む

Aベストアンサー

#!で始まる行は、そのファイルを単独で実行するときの引数指定です。

「perl -c encoding.cgi」というように、明示的にperlインタプリタを起動してファイル指定した場合は、#!の行は基本的に意味を持ちません。

その上で、perlインタプリタが「#!行では -T オプション付になっているのに、-Tオプションなしで実行しようとしている」ということでエラーにしているのです。

チェックの時も、「perl -cwT encoding.cgi」のように、-Tオプションを付けてください。
そうすればエラーにならなくなります。

QCGIから別サーバーのCGIの呼び出し

以下の二つのサーバーでCGIを動作させようと考えています。

 サーバーA:ユーザーからアクセスできる。
 サーバーB:サーバーAからアクセスでき、ユーザーからはアクセスできない。

この環境で

(1)サーバーAでリクエストを受け、簡単な処理をする。
(2)サーバーA上のCGIからサーバーB上のCGIを呼び出す。
(3)サーバーB上で処理(etc. メールの送信)を行い、処理結果をサーバーAのCGIに返す。
(4)サーバーA上で簡単な処理を行い、結果をユーザーに表示する

というような処理を考えています。
perlでは、このような処理を実装することは可能でしょうか?

サーバーAからサーバーBにあるスクリプトファイルを読み込んで、サーバーAで実行するということはできそうなのですが、サーバーB上のCGIはサーバーBで実行するというようなことができるのかがわかりません。

初心者的な質問で申し訳ありませんが、よろしくお願いします。

Aベストアンサー

 無理やり実装することは可能ですけど、面倒ですよ?
 自分でソケットを開いてHTTPで通信するんです。


このカテゴリの人気Q&Aランキング

おすすめ情報