最近、Perlを初めたのですが、
CGIがうまく動作しません。

他のCGIは動作しているので
CGIは動作する環境だと思います。

http://からフルパスでCGIを実行しても、
以下のエラーがでます。
-------------------------------------
 500 InInternalServerError
 サーバーエラーです。
 以下の理由が考えられます。

 パーミッション等の設定が
 間違っている可能性があります。
 サイト管理者にお問い合わせ下さい。
-------------------------------------

ちなみに以下のような簡単なCGIも同様です。

=====================================
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
print "<html><head>\n";
print "<meta http-equiv=Content-Type content=text/html; charset=x-sjis>\n";
print "<title>StartCGI</title></head>\n";
print "<body>\n";
print "<p align=center><font size=4>初めて書いたCGI</font></p>\n";
print "</body></html>\n";
exit;
===================================== 

なぜなんでしょう。
困ってます。

ご教授の程、宜しくお願い致します。

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

A 回答 (8件)

結局、動かないのはサンプルで質問に書いていただいたコードなのでしょうか?



だとしたら#5さんの回答を参照してもらうとして、ローカルで動かす方法をご紹介します。

1. 参考URLから、ActivePerlをダウンロードします。

2. インストールして、コマンドラインから、「perl (ファイル名)」とやるだけです。

コードに間違いが無ければ、

Content-type: text/html
<html><head>


のように表示されます。エラーがあれば、行番号とともに表示されますのでそちらを参考にデバッグしてみて下さい。

Windows でPerlを動作させるための詳細は以下のサイトなどをご覧下さい。
http://www.harukaze.net/~mishima/perl/win/winper …

参考URL:http://www.activestate.com/Products/Download/Get …
    • good
    • 0

動作しているCGIとテストしようとしているCGIのディレクトリは一緒ですか?実行を許可されていないディレクトリではエラーになります。

    • good
    • 0
この回答へのお礼

ありがとうございました。
無事に解決致しました。
理由はよくわからないのですが、
そのフォルダがよくなかったみたいで
新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。
他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。
沢山の皆様にご回答を頂き感謝しております。
ありがとうございました。

お礼日時:2002/01/06 11:35

再度。



結構思い当たりそうなフシがなさそうですね...。
私が時々やる悪あがき(笑)をお試しください。

print "Content-type: text/html\n\n";
print "<html><head>\n";

print "Content-type: text/html\n\n";

print "<html><head>\n";
のようにコードで改行を出すだけではなく、実際の改行を入れる。


#!/usr/local/bin/perl

#!/usr/local/bin/perl -w
を付けて動かしてみる。

なぜかこれで動いたことがあります。
サーバのエラーログが見られれば、もうちょっと原因がつかめるんですが...。
    • good
    • 0

私が思い当たるのは改行コードと拡張子の問題くらいです。



yu-ji さんはWindowsでソースコードを書いておられることと思います。WindowsはCR+LFを改行コードとしていますがUNIX系OSではLFだけで改行コードとしています。
そこでサーバーマシンがLinuxなどUNIX系OSを使っている場合、改行コードをUNIX用に合わせてやらないとエラーになることがあります。サーバーの設定によってはWindowsの改行コードのままでも読んでくれるのかも知れませんが、私の環境ではWindowsで書いたCGIスクリプトはやはり改行コードを変換しないとエラーになります。
Windowsでの改行コード変換ソフトは知りませんが多分いくらでもあると思います。また大抵のエディターには機能として附属していると思いますので調べてみて下さい。

あとはスクリプトファイルの拡張子が.plになっていないでしょうか。これもサーバーの設定によっては拡張子が.cgiでないとCGIスクリプトとして認識してくれない場合があります。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事に解決致しました。
理由はよくわからないのですが、
そのフォルダがよくなかったみたいで
新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。
他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。
沢山の皆様にご回答を頂き感謝しております。
ありがとうございました。

お礼日時:2002/01/06 11:35

もう一つ思い当たる節を...。



改行コードを確認して見て下さい。

BINARYモードでアップされているのであれば、
サーバーに上げる時に、ASCIIで送ると正しく変換されると思います。

この回答への補足

アスキーモードで転送しております。
その正常に動作するCGIも同じようにサーバにアップしておりますので間違いないと思います。

補足日時:2001/12/27 23:04
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事に解決致しました。
理由はよくわからないのですが、
そのフォルダがよくなかったみたいで
新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。
他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。
沢山の皆様にご回答を頂き感謝しております。
ありがとうございました。

お礼日時:2002/01/06 11:34

質問に書かれているサンプルが動作しないのだとしたら、原因はあと2つしか思いつきません。



1. コードに使用できない文字が含まれている。

ファイル内に全角スペースなどが紛れ込んでいませんか?
*ローカルで動作するのであればこれは当てはまりません。

2. サーバーに障害が発生している。

*同じサーバー上で別のCGIが動作しているのであればこれは当てはまりません。

このどちらでもないとしたら、ローカルの環境で動作するかどうかと、逆に動作しているコードを見せていただきたいところです。

この回答への補足

1.コードに使用できない文字ですか・・・
  全角スペースの他にどんな文字があるのでしょう?
  コメント、文字列としては全角はOKですよね。
2.他のCGIは正常に動作しておりますのでサーバの問題ではなさそうです。

ローカルで、動作させる方法がわからないのですが。
それと、正常に動作しているコードは結構長いので
ここにのせるのはちょっと無理ですね。
著作権の問題もあるかもしれないので。

補足日時:2001/12/27 22:58
    • good
    • 0

とりあえず2つ。



1. パーミッションの設定が間違っている

このファイルのパーミッションを、「755」などにしてみて下さい。

2. Perlへのパスが通っていない

#!/usr/local/bin/perl
を、他の動いているCGIと同じかどうか確認してください。
例えば、「#!/usr/bin/perl」にする必要がある場合があります。

この回答への補足

1.パーミッションは755にしております。
  ちなみに777でも試してみましたが駄目でした。
2.Perlへのパスは他のCGIと同じです。
  「#!/usr/bin/perl」もすでに試しておりますが、駄目でした。

補足日時:2001/12/27 21:07
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事に解決致しました。
理由はよくわからないのですが、
そのフォルダがよくなかったみたいで
新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。
他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。
沢山の皆様にご回答を頂き感謝しております。
ありがとうございました。

お礼日時:2002/01/06 11:33

こんばんは。



エラーメッセージが指していることは確認されましたか?
パーミッションは755になっていますか??

この回答への補足

パーミッションは755にしております。
フォルダも同様です。
777でも試してみましたがだめでした。

補足日時:2001/12/27 21:02
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事に解決致しました。
理由はよくわからないのですが、
そのフォルダがよくなかったみたいで
新しいフォルダをそのフォルダの下に作って実行したら、うまく動作致しました。
他のCGIはそのフォルダでも動作していたのでなぜ私が作ったCGIだけがうまく動かなかったのかわかりません。
沢山の皆様にご回答を頂き感謝しております。
ありがとうございました。

お礼日時:2002/01/06 11:32

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

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

Aベストアンサー

>画像ヘッダとはどういうものでしょうか?

Content-type: image/gif
Content-type: image/png
Content-type: image/jpeg

など、画像タイプごとに決まっています。
<img>タグに普通の画像ファイルが指定されている場合は
Webサーバが画像ファイルの拡張子から判断して返してくれ
ますが、CGIから返されるデータの種類は拡張子からは判断
できないのでCGI内部からヘッダを返す必要があります。


●CGIがPerlの場合で、GIF画像をCGIから返す例
#!/path/to/perl
print "Content-type: image/gif\n\n";
open(GIF, "file.gif");
binmode(GIF); binmode(STDOUT);
print <GIF>; close(GIF);

もちろん、CGIからは画像フォーマットを返せばいいので、
ファイルから読まずにあらかじめCGIソース内に画像データ
を持っておいて出力する方法も可能です。


ちなみに、多くのCGIではHTMLコンテンツを返す場合が多い
ので、ヘッダは以下のようになります。

print "Content-type: text/html\n\n";

>画像ヘッダとはどういうものでしょうか?

Content-type: image/gif
Content-type: image/png
Content-type: image/jpeg

など、画像タイプごとに決まっています。
<img>タグに普通の画像ファイルが指定されている場合は
Webサーバが画像ファイルの拡張子から判断して返してくれ
ますが、CGIから返されるデータの種類は拡張子からは判断
できないのでCGI内部からヘッダを返す必要があります。


●CGIがPerlの場合で、GIF画像をCGIから返す例
#!/path/to/perl
print "Content-type: image/gif\n\n...
続きを読む

Q
の場所は?

CGIでデータを受け渡しするアンケートを作っています。html中に書く<form method=post action="***.cgi">~</form>“~”の場所についてですが質問項目を全て挟まなくてはいけませんか?実は、チェックボックスの「最大2つまで回答可」という部分をJavascriptでチェック個数を超えてチェックした時点でアラートが出るようにしてます。その記述中にすでに<form>~</form>タグを制限をかけたい質問に置いているので、質問全体を<form method=post action="***.cgi">~</form>でくくると入れ子になってしまいます。大丈夫ですか?

Aベストアンサー

<form method=post action="***.cgi" name="form1">~</form>
にする。つまり「最大2つまで回答可」という部分だけをonclickでJavascriptを呼び出したらいいと思います。

Qperlで、[ \r\n , \n ]の意味は?

シンプルなCGI掲示板の勉強中ですが、

$message =~s/[ \r\n , \n ]/<br \/>/g; となっており、
これは改行文字を<br />に置き換えるのだそうですが、
[ \r\n , \n ]の部分というのはどういった意味でしょうか。

[ abc ]だと、a,b,cのうちどれか1文字は入っていれば良いですよね。
[ ]に「,」が入るとよく分からなくなります。

お分かりの方、教えてくださいませんか。
よろしくお願いいたします。

Aベストアンサー

サンプルは、
$message =~ s/\r\n/<br \/>/g;

$message =~ s/\n/<br \/>/g;
1行で済ませようとして間違ってしまったのでしょうか?

\r 復帰文字(return)

\n 改行(newline)

「,」カンマそのもの

\r 復帰文字 (return)
のいずれかを<br />に置き換える、という意味になってしまうでしょうね。
この目的のためには、

$message =~ s/\r\n/<br \/>/g;
$message =~ s/\r/<br \/>/g;
$message =~ s/\n/<br \/>/g;

と3行記述するのがいいのではないでしょうか?

参考サイトに私が勉強させてもらっているサイトを紹介しておきます。

参考URL:http://www.rfs.jp/sitebuilder/perl/04/07.html

Q[返信]

夜分にすみません。
[~]の鍵括弧はどういう言語なのでしょうか?
htmlの辞書に載っていませんでした・・。

Aベストアンサー

ブラウザで見ると
[返信]
って感じになり「返信」のトコだけ下線付きのリンクになります。
「[」と「]」は単なる文字ですよ(笑)

Q「<」や「>」を「&lt;」や「&gt;」に変換させなかったらどうなるのでしょうか?

今CGIをカスタマイズしています。
書き込みフォームでタグを使いたいのですが、タグをそのまま書き込むとHTML出力時に、&lt;や&gt;に変換されて表示されてしまいます。
なのでその変換する処理を無くしたいと思っているのですが、その処理を無くすとどういう不具合があるのでしょうか?無くそうと思っているのは下記のような箇所です。
~ s/</&lt;/g;
~ s/>/&gt;/g;
(わざと全角で書いてます)
書き込みデータにはdatファイルを使っています。

Aベストアンサー

念のため・・・
No.4は表示するときではなく、
>formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する
方法のつもりで書きました
※<>→&lt;&gt;変換処理の直後に入れる。

いちいち<font color="~">と記述するのは大変なので、
<色=red>赤文字</色>などと覚えやすいタグにするのも親切でいいかも

#<色=red>~</色>を<font color=red>~</font>に
=~ s/&lt;(色)(.*?)&gt;(.*?)&lt;\/\1&gt;/<font color$2>$3<\/font>/gi;


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

おすすめ情報