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と関連する良く見られている質問

Q404ERROR の 意味の統一はいつからですか?

こんばんは~! ネットワークのカテゴリーのエキスパートな方々!回答宜しく~^^

質問はタイトルの通りなのですが、『404 ERROR』はいつ頃から共通に利用されてるのですか?
仮に最初に統一した人がいるのなら、使用許諾や使用に当っての利点若しくは、お金が来てるの?

Aベストアンサー

HTTPエラーコード404。
Not Found:要求されたURIに対するマッチする情報が見つからない(RFC1945)
通信規約上の約束です。

RFC(Request For Comment:ご意見お待ちしてます)はインターネット標準案と標準規約を記述したメモで、誰でも参照して利用することが出来ます。

いつから?と問われればRFC1945に制定されたメモが発表された1996年からです。

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 = "すべての項目に回答して下さい");」を実行する際になんらかのエラーが発生したと思われます。

Q404 Error Not Found と出てしまします

初めてホームページを作ろうとしている者なので、専門用語ではなく、わかりやすく教えて下さいませm(__)m
「HETEMULU」を使って、ホームページを作り、半年かけて、やっと完成しました^^;
そして、無料だと聞いたので、「忍者ホームページ」サイトで、
「NINJA TOOLS」?という所で、IDやパスワードを取得し、なんとか出来たと思ったのですが、

登録されているあなたのURL

とい所をクリックすると、

404 Error Not Found と出てしまします。

何故ですか??

色々触ってみたけど、わかりません^^;

もう一つ質問ですが、無料素材屋さんから、画像をダウンロードして、
「名前をつけて保存」と書いてあったので、例えば「鉢植え」と保存しました。「HETEMULU」で画像の挿入をクリックすると、「鉢植え」の後ろに.gifと付き、問題ないように思っているのですが、日本語で保存しているから、404 Error Not Found と出てしまうのでしょうか?それともそれはまったく関係ないのでしょうか?
慣れていらっしゃる方にはおバカな質問かもしれませんが、どうかどなたか教えて下さい!説明が足りなければ補足しますので、どうかよろしくお願いします!!!

初めてホームページを作ろうとしている者なので、専門用語ではなく、わかりやすく教えて下さいませm(__)m
「HETEMULU」を使って、ホームページを作り、半年かけて、やっと完成しました^^;
そして、無料だと聞いたので、「忍者ホームページ」サイトで、
「NINJA TOOLS」?という所で、IDやパスワードを取得し、なんとか出来たと思ったのですが、

登録されているあなたのURL

とい所をクリックすると、

404 Error Not Found と出てしまします。

何故ですか??

色々触ってみたけど、わか...続きを読む

Aベストアンサー

作成したHTMLファイルをサーバーにアップロード(転送)済みで
しょうか?
トップページは必ず「index.html」または「index.htm」である
必要があります。
「index.htm」にする場合は、元からある「index.html」を削除
(※下記ページ参照)
http://www.ninja.co.jp/faq/a/37/

おすすめのFTPソフト
「FFFTP」
http://www2.biglobe.ne.jp/~sota/

日本語ファイルは表示されない場合もあるので、英数字のファイル名
が推奨されています。
http://www.ninja.co.jp/faq/a/79/

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.}...続きを読む

Q教えて下さい!なぜ【WebApp: Error 404】のページが出る?

JDK + apache + mod_webapp.so + tomcat + PostgreSQLをインストール・設定しました。

JDK     j2sdk-1_3_1_11-linux-i586
apache    apache1.3.31
mod_webapp.so
tomcat    jakarta-tomcat-4.1.30
PostgreSQL    postgresql-7.2.3

(1)
http://localhost:8080/index.jsp
【tomcat】のページが出ます。

(2)
http://localhost/
【あなたの予想に反して、このページが見えているでしょうか?】のページが出ます。

(3)
http://localhost:8080/examples/jsp/index.html
【JSP Samples】のページが出ます。

(4 問題点)
http://localhost/examples/jsp/index.html
【WebApp: Error 404】のページが出ます。
希望 → (3)と同じページが出る。

起動は tomcat → apache の順です。

なぜ【WebApp: Error 404】のページが出るのでしょうか?
教えて下さい。
お願いします。
(初心者なので出来ればわかりやすくお願いします)

JDK + apache + mod_webapp.so + tomcat + PostgreSQLをインストール・設定しました。

JDK     j2sdk-1_3_1_11-linux-i586
apache    apache1.3.31
mod_webapp.so
tomcat    jakarta-tomcat-4.1.30
PostgreSQL    postgresql-7.2.3

(1)
http://localhost:8080/index.jsp
【tomcat】のページが出ます。

(2)
http://localhost/
【あなたの予想に反して、このページが見えているでしょうか?】のページが出ます。

(3)
http://localhost:...続きを読む

Aベストアンサー

設定内容が書いていないので
いかんともあれなんですが。。。(^^;
以下の手順をご確認下さい。

1.mod_webapp.soをapacheのlibexecに配置している。

2.apacheのhttpd.confに以下を記述している。
------------------------------------------------------
LoadModule webapp_module libexec/mod_webapp.so
AddModule mod_webapp.c

<IfModule mod_webapp.c>
WebAppConnection warpConnection warp localhost:8008
WebAppDeploy examples warpConnection /examples
WebAppInfo info
</IfModule>
------------------------------------------------------

3.tomcatのserver.xmlに以下を記述している。
------------------------------------------------------
<Service name="Tomcat-Apache">

<Connector className="org.apache.catalina.connector.warp.WarpConnector"
port="8008" minProcessors="5" maxProcessors="75"
enableLookups="true" appBase="webapps"
acceptCount="10" debug="0"/>

<Engine className="org.apache.catalina.connector.warp.WarpEngine"
name="Apache" debug="0">

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="apache_log." suffix=".txt"
timestamp="true"/>

<Realm className="org.apache.catalina.realm.MemoryRealm" />

</Engine>

</Service>
------------------------------------------------------

4.tomcat、apacheの順で再起動

どう?

設定内容が書いていないので
いかんともあれなんですが。。。(^^;
以下の手順をご確認下さい。

1.mod_webapp.soをapacheのlibexecに配置している。

2.apacheのhttpd.confに以下を記述している。
------------------------------------------------------
LoadModule webapp_module libexec/mod_webapp.so
AddModule mod_webapp.c

<IfModule mod_webapp.c>
WebAppConnection warpConnection warp localhost:8008
WebAppDeploy examples warpConnection /examples
WebAppInfo info
</IfModule...続きを読む

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'}"
#======================================...続きを読む

QError!! HTTP status code=404

Error!! HTTP status code=404

いつもお知恵拝借、ありがとうございますm(_ _)m

さて、最近当社で中古XP (prof.)パソコンを2台導入しました。sp3にupしております。

取引先のサイトにアクセスし、IDとpasswordでログインして「取引明細」をダウンロードしようとしましたが、ファイルのアイコンをクリックしたら上記のようなエラーメッセージが出ます。

2台とも同じエラーが出ます。

「教えてgoo」や他のサイトで検索してもなかなか、コレというページが見あたりません。

以前からあるもう一台のXPからはアクセスでき、見ること・プリントすることが出来ます。

アクセスしようとしたファイルは拡張子が".ilf"で、検索の結果どうやら電子帳票のファイルのようです。

このようなトラブルは初体験なので、皆さんのお知恵を是非拝借したいと思います。どうかよろしくお願いいたしますm(_ _)m

Aベストアンサー

ILFのことについてはわかりませんが、単純にHTTP のエラーコード404は、
Not Foundですね。

要するに、指定のページやファイルが見当たらないということ。

先方のシステム内で、指定されたファイルがないということではないですか?
それを先方のWEBサーバーと連携したILFのシステムが応えていると・・・

先方の担当者に聞いた方がいいと思いますが。
特定のシステム内のことですので、担当者以外は本当のことはわかりません。

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オプションを付けてください。
そうすればエラーにならなくなります。

QHTTP 404 error

Vine Linux,Tomcat5で
(1)webapps/conf/server.xml
...
<HOST>
<Context path="/apress" docBase="apress" debug="0" reloadable="true" />
...
(2)webbapps/apress/login.jsp
...
<table width="500" border="0" cellspacing="0" cellpadding="0">
<form name="loginForm" method="post" action="servlet/chapter2.login">
<tr><td width="402"><div align="right">User Name: </div></td>
<td width="399"><input type="text" name="username"></td>
</tr>
...
(3)webapps/apress/WEB-INF/web.xml
...
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>chapter2.login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
...
(4)webapps/apress/WEB-INF/classes/chapter2/login.java
package chapter2;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class login extends HttpServlet {
private String target = "/welcome.jsp";
private String getUser(String username, String password) {
// Just return a statice name
// If this was reality, we would perform a SQL lookup
return "Bob";
}
....
(4)現象:
http://xxx.xxx.xxx.xxxx:8080/apress/login.jsp
でsubmit action 後、次のエラーが出てきました:
HTTP 404 error,
The requested resource (/apress/servlet/chapter2.login) is not available.

この問題はどこにあるでしょうか教えてください。

Vine Linux,Tomcat5で
(1)webapps/conf/server.xml
...
<HOST>
<Context path="/apress" docBase="apress" debug="0" reloadable="true" />
...
(2)webbapps/apress/login.jsp
...
<table width="500" border="0" cellspacing="0" cellpadding="0">
<form name="loginForm" method="post" action="servlet/chapter2.login">
<tr><td width="402"><div align="right">User Name: </div></td>
<td width="399"><input type="text" name="username"></td>
</tr>
...
(3)webapps/apress/WEB-INF/web....続きを読む

Aベストアンサー

パスの指定が間違ってるからだと思いますが。

/apress/servlet/chapter2.login

このパスにちゃんと存在してますか?

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ランキング