CGIは素人です。商品の申込みフォームでCGIを使おうとしています。
マニュアルどおりにすすめていますが、サーバーへ送って、送信ボタンを押すとエラー画面になってしまいます。Perlパスにも書き換えていて、アスキーで送っています。ヒントになるご回答おまちしています。

A 回答 (2件)

お答えは、anglyさんのテスト環境では上手く動いていて、


サーバー上ではエラーになってしまう・・・と言う事で良いのでしょうか?
又、CGIはご自身で用意されたものと言う事で良いですね。

上記の点を前提としてお答えすると、エラーの原因として考えられるのは、以下の点です。

1.そのCGIが読み書きしている、ファイルのパーミッションが間違っている。

CGIで書き込みをしている、ファイルは無いですか?
あったら、そのファイルのパーミッションは666、ディレクトリは777にしてみてください。

2.Perlのパスが間違っている。

これは、今回はクリアされていると思います。

3.sendmailのパス、もしくは構文エラー

もし、angelyさんがWindows環境で開発されたものならば、sendmailはサーバーに送って初めて稼動する部分だと思います。
良くあるのは、sendmailのパスの記述ミス。
そして、メールヘッダーと、本文との間に空行を開けて居ない場合等です。

多分、商品の申込みフォームと言う事ですから、オーダーをメールで送信する様な仕様になっていると思います。
良くチェックしてみてください。


他にもエラーを起こす要因はありますが、今の情報だけだと、この辺りからチェックしてみるのが良いと思います。

今までの開発経緯など、もう少し詳しい情報を頂けたら、
エラー原因を特定できると思います。

この回答への補足

早速お答えいただいて嬉しいです。もう少しというかだいぶ詳しく説明いたします。orderというフォルダの中にordersheet.cgi(パーミッション755←サーバーの指示)ordersheet.htm(パーミッション604)cgi-lib.pl(パーミッション404)jcode.pl(パーミッション404)ordersheet.dat(パーミッション606)でこれをFTPでアップロードしました。755以外のパーミッションは本を見ながらしました。cgiスクリプトで送信ボタン後の部分は以下のようになっています。お答えいただいた、sendmailというのが何かわからなかったのですが・・・。私が作っているこのCGIには必要なものですか?

# -----ここから出力-----
print "Content-type:text/htm\n\n";

print <<END_OF_HTML";

<html>
<head><title>申込み</title></head>
<body>ありがとうございました。早速商品をお送りします。</body>
</html>
END_OF_HTML

補足日時:2001/08/01 22:43
    • good
    • 0

・最初に「Content-type: なんとかかんとか」 と、


 空行を1行Printするようにしましたか?
 http://tohoho.wakusei.ne.jp/wwwcgi.htm
・このサイトを参考にしてみてはどうですか。

参考URL:http://tohoho.wakusei.ne.jp/wwwcgi7.htm,http://w …
    • good
    • 0

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

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

QCGIをアスキー転送モードでアップすると「Internal Server Error」となります。

CGIをダウンロードして、サーバーにアップロードしたのですが、
CGIが作動せず、「Internal Server Error」となってしまいます。
KENTのフリーCGIほか、いろいろなCGIで試してみても同様です。
転送モードやパーミッション等の基本的な設定は間違っておりません。
他のサーバーであれば、問題なく動きました。

いろいろと試したところ、どうやら改行コードの問題のようだったため、
ダウンロードしたCGIファイルを、エディタにてLFに変換して保存し、
バイナリ転送モードにてアップロードしたところ、作動しました。

通常であれば、このようなことをしなくても、ダウンロードしたCGIファイルを
アスキー転送モード(もしくは自動)でアップロードすれば
作動すると思うのですが、この原因は何なのでしょう?
サーバー側の設定の問題なのでしょうか?

どなたかもし分かりましたら、ご教授お願いいたします。

Aベストアンサー

他のサーバで問題がなく特定のサーバのみダメなのは、ftp サーバの設定が原因だと思います。
CGI の1行目は #!/usr/bin/perl (または #!/usr/local/bin/perl) になっているかと思いますがが、
末尾の改行を変換していないと、Unix のシェルは #!/usr/bin/perl(CR)(LF) から (LF) のみを除去して、
/usr/bin ディレクトリに perl(CR) というファイルを探しに行き失敗します。

#!/usr/bin/perl を #!/usr/bin/perl -- のように変更すると、アスキーモードでもうまく行くかもしれません。

QCGI(Perl)とHTMLについて

CGI初心者です、Perlの知識は皆無です。
質問は2つあるのですが・・・

1、CGIのページを例えば画像を呼び出すようにHTMLで指定できるのでしょうか?
画像であれば<img src=".../AAA.gif">ですが、こんな感じでCGIのページ自体をHTMLの指定した枠に呼び出すことはできるのでしょうか。

2、CGIページのカスタマイズ
現在、CGIレスキューさんからダウンロードしたファイルをカスタマイズしています。
条件指定ができる検索データベースです。
設置と動作確認はできたのですが、思うようにレイアウトできないでいます。
Perl記述中にテーブル(HTML)を挿入すると、プルダウンメニューから選択項目が飛び出してしまうのです。

(おおざっぱに記述すると)
print <<"---HTML---";

あいうえお<select name="aiueo" size=1>
---HTML---

forseach $i (@AIUEOs) { print "<option value=\$i\"$pref_selected{$i}>$i</option>\n";}

print <<"---HTML---";
</select>
<p>
(略)
---HTML---
こんな感じです、変数の部分は変えてます。

ずっと上の方で、
@AIUEOs = ("あああ", "いいい", "ううう", "えええ", "おおお");
と、変数が定義されてるようです。

名称かきく「プルダウンメニューA」
名称あいうえお「プルダウンメニューB」
要は、「 」の部分を揃えたい(縦に整列)のですが、うまくいきません。プルダウンメニューが飛び出してしまいます。
2段目のHTML記述部分がなぜ閉じタグから始まっているのかもよくわからないです。

端折ってますので、分かりにくいと思いますが、コメントいただける方、よろしくお願いします。

CGI初心者です、Perlの知識は皆無です。
質問は2つあるのですが・・・

1、CGIのページを例えば画像を呼び出すようにHTMLで指定できるのでしょうか?
画像であれば<img src=".../AAA.gif">ですが、こんな感じでCGIのページ自体をHTMLの指定した枠に呼び出すことはできるのでしょうか。

2、CGIページのカスタマイズ
現在、CGIレスキューさんからダウンロードしたファイルをカスタマイズしています。
条件指定ができる検索データベースです。
設置と動作確認はできたのですが、思うようにレイアウトで...続きを読む

Aベストアンサー

再び回答しにきました。
1. iframeについて
iframeタグにはそれ自身のサイズを指定するwidth(幅) と height(高さ)の属性があります。
また、スクロールに関しても、scrolling=noとすることでスクロールバーの表示もコントロールできます。
<iframe src="hoge.cgi" width="50%" height="200" scrolling=no></iframe>

2. select周りについて
ようやくお悩みの部分がわかってきました。
純粋なHTMLなら理解されているようですね。

ならば、「foreach $i (@PREFs) 以下の部分は selectタグのoption部分にあたる部分である」という風に考えてください。

<<"---HTML---"; 部分をまたがっても構わないのです。</select>の部分も含めてテーブルにしてしまってください。

要は、perlって言語を使ってはいますが、結局はHTMLを書いているのです。

今回のプログラムをブラウザで実行させて、
画面に出した状態でソースを表示してみると分かりますが、
perlはhtmlを動的に書き出しているのであって、
結局はprintなどで書き出されるhtmlがページのレイアウトを決めます。

したがって、<<"---HTML---"; 部分をまたがってても、最終的に出力されるhtmlが正しければよいのです。

再び回答しにきました。
1. iframeについて
iframeタグにはそれ自身のサイズを指定するwidth(幅) と height(高さ)の属性があります。
また、スクロールに関しても、scrolling=noとすることでスクロールバーの表示もコントロールできます。
<iframe src="hoge.cgi" width="50%" height="200" scrolling=no></iframe>

2. select周りについて
ようやくお悩みの部分がわかってきました。
純粋なHTMLなら理解されているようですね。

ならば、「foreach $i (@PREFs) 以下の部分は selectタグのoption部...続きを読む

Qcgi-perl の sendmail について

cgi-perlのsendmailを使ってWebサイトに問い合わせフォームを作っています。

2つのサイトを同じサーバーに持っているのですが、かたやきちんと送信できるのに、片方はメールが届きません。

メールが届かない方も送信ボタンを押すときちんと出るべき”メールが送信されました”というメッセージは出ます。

このような場合、どこをチェックしたらいいのでしょうか。
もう何度もcgiファイル、htmlファイルを確認して、属性なども確認しているつもりなのですが、きっとどこかが違っているのだと思います。

いっそエラーが出てくれれば、わかりやすいのですが、行き詰っています。
どうぞよろしくお願いいたします。

Aベストアンサー

sendmailのログはroot権限を使えないと見れないとは思います。
一般的には/var/log/の下にあると思いますが、なければお使いのMTAの起動スクリプトや設定ファイルを見ればどこにログを出しているか調べは付くはずです。

察するにcgiスクリプトがsendmailに渡すまでは正常に動いている可能性が高いので、sendmailがリレーする際にエラーが出ていないか調べた方がよいと思います。

QCGI(perl)って・・・

どんな感じで使ってます?
あれはプログラム言語として使ってます?

あの分かりにくい記号を覚えて使うものなんですか?
今まで(と言うか今も)COBOLとJAVAを
使ってきたんですが、なんかパズルのように組み合わせる
パールのCGIになじめないっす・・・

どんな感じで使ってるか教えてください!
やっぱ(命令文みたいなの、笑)覚えて作ってます?

それとサンプルを埋め込んで使うんですか?

だれでも良いんで参考までに
教えてぇぇぇぇ!同業者でCGI詳しい人もヨロシク☆

Aベストアンサー

そうですねぇ、私も初めて見たときびっくりしました。
私はVB→ノンVisualなC++→Perlの順で来たので、独特な記述の多さにとまどいました。

Perlは暗黙の了解が多いです。
最初に私のPerlのプログラムを前進させたのは $_ 変数の理解ですね。
変数をしているすべきところを省略すると、$_ が暗黙に使われることが多いってところです。
それを覚えたら、暗号のような文がそれなりに分かるようになりました。
あとは正規表現です。
これは覚えるとおもしろいです。
周りのもの全部正規表現で表現したくなります(ウソ。

私は、どのプログラム言語でもそうですが、他人のプログラムを読む力があまりないので、どれも、ほとんど1から書き始めています。
分からないことがあったら、本じゃなくて他人に聞く(滅。
だって、他人のソースはわかんないから。

あとは、慣れてくるとサブルーチンにして使い回しです。
この辺は他の言語と同じかな。
サブルーチンにしてから、全く他のところで出てこないような知識は凍結してるものもありますが。

Cに似てるって言ったら、JAVAのほうが似てると思うけど・・・。
っていうか、PerlはUNIXが初なので、UNIX自体Cシェルというもので動いているくらいですから、Cに似てるって言っても当たり前と言えば当たり前ですが。

CGIのほかにも、ファイル整理とかにも訳に立ったりして。
ちょっとしたスクリプトを組んで、ファイルの名前を一気に変えたり、同じ内容のファイルがあったら消したりとか。
とにかく、UNIXの自動化の思想も含まれてるし、それがWindowsで使えるってのも嬉しいです。

PHPに挑むんだったら、JSPは~?

そうですねぇ、私も初めて見たときびっくりしました。
私はVB→ノンVisualなC++→Perlの順で来たので、独特な記述の多さにとまどいました。

Perlは暗黙の了解が多いです。
最初に私のPerlのプログラムを前進させたのは $_ 変数の理解ですね。
変数をしているすべきところを省略すると、$_ が暗黙に使われることが多いってところです。
それを覚えたら、暗号のような文がそれなりに分かるようになりました。
あとは正規表現です。
これは覚えるとおもしろいです。
周りのもの全部正規表現で表現したくなり...続きを読む

Qperl niftyについて。use CGI;

画像アップロードのスクリプトを作ろうと思っているのですが、

use CGI;
という記述をすると、ここでエラーに引っかかります。
下はperl checkerでのエラー表示です

Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/sun4-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 .) at a.cgi line 10.
BEGIN failed--compilation aborted at a.cgi line 10.

参考URLはここ
http://www.topstudio.co.jp/~kmuto/html/node38.html

niftyでは使えないようになってしまっているのでしょうか?

また、CGI.pmを使わないファイルアップロードの仕組みを解説しているサイトを知っている方がいたら、教えてくださいませ。

画像アップロードのスクリプトを作ろうと思っているのですが、

use CGI;
という記述をすると、ここでエラーに引っかかります。
下はperl checkerでのエラー表示です

Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.00503/sun4-solaris /usr/local/lib/perl5/5.00503 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 .) at a.cgi line 10.
BEGIN failed--compilation aborted at a.cgi line 10.

参考URLはここ
http://www.topst...続きを読む

Aベストアンサー

 cgi-lib.pl というモジュールを使うのが一般的です。
 この "cgi-lib.pl" という文字列をキーワードに検索すると、たくさん出てきますよ。

 自分だけで使う場合はともかく、フリーソフトとして公表するときは CGI.pm がないプロバイダの場合に困るので、あんまり使わないんですよ。


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

おすすめ情報