CGIで動かしていた掲示板が突然利用できなくなって困ってます
CGIの中にスタイルシートを利用していました
そのスタイルシーをクリスマスっぽく変えようといじったのですが
動かなくなり、もとの通りに戻したのですが
動かなくなりましたパーミッションの設定も戻しています
サーバー内のファイルが壊れた可能性を疑ってきれいなものをアップしたのですがそれも動きません
CGIの利用できる無料サーバーなので、サーバーを疑って
別の(CGIカウンターやログ解析)CGIプログラムを動かしてみたら問題なく動きます

サーバーが吐き出すエラーメッセージは以下の通りです

-----------------------------------

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

-----------------------------------

自分でCGIを組んだことは無く
フリーのCGIプログラムを利用しています
このエラーメッセージは何を意味するのでしょうか?
また、動かない原因は何でしょうか?
よろしくお願いいたします。
CGIですので、PC環境には関係ないと思いますが
一応自分のPC環境を

CPU:P3-650Mhz
MEM:128MB-PC100 CL2
M/B:ASUS P3BF
HDD:ATA66-20GB+9GB
OS:Win98SE+IE5.5

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

A 回答 (9件)

もしかして


print "<BODY>";
ってトコに
print "<BODY BACKGROUND="hoge.jpg">";
ってやってませんか?
print文中で”を使う場合は直前に\を入れる必要があります。
ただ。print qq();でprintしている場合はこの限りではありません。

この回答への補足

おっしゃられるとおりにしてました・・・

$body = '<body BACKGROUND="./x-kay-r.gif" STYLE="font: 10pt ''"bgcolor="#004000" text="#FFFFFF" link="#FF0000" vlink="#FFFFFF" alink="#FFFFFF" leftmargin="5%" topmargin="5%">

';

こういう風に記述してました
ダブルクォーテーションじゃないとだめなのでしょうか?

補足日時:2000/12/09 11:44
    • good
    • 0

いっつもkondara MNU/Linux1.0のPerl5でしか確認していないので、Windows版Perlだと出ないかも知れませんが、日本語文字列でエラーになることがあります。



S-JISでの日本語文字列を受け付けないサーバーの場合にあるのですが、この場合は文字コードをEUCに変更して下さい。

ちなみに私はいつもPerl -c hoge.cgiでしか確認していません。

あと、この際ですからPerlも勉強してはいかがでしょうか?今後もCGIをいじろうと思ったらやった方が良いですよ。

そういやInternal Server Errorとは何かを書いていないですね。これは、CGIが動かないとゆーだけのものです。

この回答への補足

仰られるとおりですね ^^;
CGIを設置するのならPerlの知識がないとダメですね
今回のことで自分が無責任だと思いました・・・
CGIを設置するならメンテナンスまで出来ないとマナー違反ですね

これを機会に勉強しようと思いました

補足日時:2000/12/06 11:06
    • good
    • 0
この回答へのお礼

回答有難うございます
原因はどうやら「掲示板(ツリー型)」に背景画像を入れようとしていたことが原因のようでした

お礼日時:-0001/11/30 00:00

そのCGIは、動かないことが確認された時から一切動かなくなったのでしょうか?


確認された時以外の時間帯で、動作確認を行いましたか?
サーバが混んでいた可能性もあります。その時に、良くこのエラーを出します。

また、サーバの仕様変更で専用のアドレスでの呼び出しにしないと、CGIが使えなくなる時があります。
サービスを提供しているところの、お知らせ等を確認してみましたか?

この回答への補足

動かなくなってから一切動きません
あらゆる時間で試したのですがダメでした 

補足日時:2000/12/05 23:43
    • good
    • 0

Windows版のPerlは、下のURLからWin32 Binaryをダウンロードすれば使えます。

あと、近くのCPAN(ftp://ring.omp.ad.jp 等)から入手できます。
 Windowsでのデバックにはまずこれが第一でしょう。 ただ、Perlの知識が必要となるのでちょっと難しいかも。
まぁ、まずPerlを入手して、-wc オプションをつけて試してみてください。その後のエラーを見て考えましょう。
 

参考URL:http://www.perl.com/pub/language/info/software.h …
    • good
    • 0

あらら?


転送モードのエラーじゃなかったのかな?

解決手段そのものではなくアドバイスですが、
意味のわからないエラーメッセージではなく、
意味のわかるエラーメッセージを出す方法があります。

それは、自分のパソコンにWWWサーバを作ることです。
そして自分のパソコンでcgiを動かしてみることです。
僕は参考URLの「自宅マシンWWWサーバ化計画」
というところを読んで、やってみたのですが、
この場合意味のわかるエラーが表示されるので
大変デバッグがしやすかったです。

一度お試しになると良いですよ。

参考URL:http://www.kent-web.com/

この回答への補足

有力な情報をアリガトウございます
ローカルでApacheを動かせるのは知りませんでした
大変勉強になりそうです。
出先からなので自宅に帰ってじっくりイジってみたいと思います
アリガトウございました

*自宅マシンでApacheを利用してCGIを動かす場合に
注意点などありました、ご指導をお願いしたいのですが
(例えば無限ループになったときの対処の方法など)
宜しくお願いいたします

補足日時:2000/12/04 11:31
    • good
    • 0
この回答へのお礼

有難うございました
これを機会にもう少し深く勉強しようと思っています

お礼日時:-0001/11/30 00:00

可能性から言えば改行コードのミスですね。



CGIの書き換えに利用しているのは、メモ帳ですよね?
Windowsの改行コードはCR+LFとなり
サーバーに使われているOSは大抵UNIX系でUNIX系の改行コードはLFのみです。

要はCRが入っていると、それも文字と認識して、文法がおかしくなるわけです。

解決方法は、callhiroさんの言うとおり、バイナリモードではなく、アスキーモードで転送することです。アスキーモードで転送すると、CR+LFがLFに変換されます。FTPソフトによっては、テキストモードと書いてあるかも知れません。

アスキーモードで転送する方法はFTPソフトに依存するのでそのソフトのマニュアルを確認して下さい。ホームページビルダーやDreamweaverなどのFTPは使わずにFTPのみのソフトを利用する方が安全かと思います。

私はFFFTPを利用しています。

この回答への補足

CGIの記述はHTMLエディター(CGI対応)を使っているので
改行コードは大丈夫だと思います。(一応確認してみます)
転送モードはASCIIです。

補足日時:2000/12/04 10:33
    • good
    • 0

下のURLからdebug.cgiを入手して、同じフォルダにアップロードして実行して見てください。


(詳しくはリンク先の説明参照)

詳しいエラーメッセージが表示されるはずです。

参考URL:http://hp.vector.co.jp/authors/VA020958/cgiwork/ …

この回答への補足

アリガトウございます
今、チョット出先からなので自宅に帰ったら
試させて頂きます

補足日時:2000/12/04 10:28
    • good
    • 0

僕は良く自分のホームページのcgiを改造したりするのですが、


過去に、突然cgiが動かなくなり、
改造した部分をすべてなくしても、
元々あった機能を少しずつ減らしても
全然動かなくなったという経験があります。

その際の解決手段はズバリ転送モードでした。
間違えてバイナリーモードで転送している可能性があります。
アスキーモードになっているかどうか確かめてみてくださいな。

今試してみましたが、同じ様なエラーが出ましたよ。

この回答への補足

回答アリガトウございます
ASCIIモードで転送しているのですが、やはりダメでした

補足日時:2000/12/04 10:16
    • good
    • 0

 CGIファイルの中身が間違っていますね。

きっと。
 エラーの内容は、「そのプログラム(掲示板)を実行
したらエラーがでたよ」という無いようですが、何が
原因かまでは教えてくれません。Telnetが許されてい
るのならば
perl -wc プログラム名
を直接実行してみてください。大抵のエラーはここで出
ます。
 もし、そうでないなら。。。
 Windows版のPerlで試してみてください。

この回答への補足

アリガトウございます
残念ながら、CGI利用可能なフリーレンタルサーバーなので
Telnet接続は出来ないようです
Windows版のPerlですが、Windows上で擬似的にCGIを
走らせることが出来るソフトでしょうか?
マイクロソフトからリリースされているのでしょうか?

補足日時:2000/12/04 10:18
    • good
    • 0
この回答へのお礼

いろいろ有難うございました
ツリー表示型の掲示板だったのですが、背景画像の挿入がうまくいってなかったようです・・・
300行くらいあるロジックを1行づつチェックしてみました
初歩的なミスでした・・・・

お礼日時:-0001/11/30 00:00

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

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

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

Q買い物カゴのCGI エラーInternal Server Error どうすればいいのでしょう

iMac DV SE(G3, 500MHz) OS 9.2.2 です。
買い物カゴをもう数年前から何回も設置してうまくいっていたのですが、今回改訂したら動かなくなってしまいました。cart.html(買い物で商品の個数を入れるページ)から、「買い物カゴに入れる」ボタンをクリックすると、次のエラーが出てしまいます。この時のアドレスは、http://www.*******.com/acart/setcook.cgi です。setcook.cgiは間違いなくここにありますし、パーミッションも点検しています。何か問題が考えられることがあるでしょうか。
-------------------------------------------------

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@*******.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Apache/1.3.33 Server at www.*******.com Port 80

-------------------------------------------------
*****は伏せ字にしました。

iMac DV SE(G3, 500MHz) OS 9.2.2 です。
買い物カゴをもう数年前から何回も設置してうまくいっていたのですが、今回改訂したら動かなくなってしまいました。cart.html(買い物で商品の個数を入れるページ)から、「買い物カゴに入れる」ボタンをクリックすると、次のエラーが出てしまいます。この時のアドレスは、http://www.*******.com/acart/setcook.cgi です。setcook.cgiは間違いなくここにありますし、パーミッションも点検しています。何か問題が考えられることがあるでしょうか。
----------------...続きを読む

Aベストアンサー

下記のQ&Aは読まれましたか?
一番下に、最後に注文するとサーバーエラーが起きる原因が書かれています

参考URL:http://anglers-net.com/book/booksupport.html

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 -- のように変更すると、アスキーモードでもうまく行くかもしれません。

QInternal Server Error になってしまいます。

とある書籍を元にperlを学んでいます。まだ初心者で少々わかりずらい質問になってしまっているかもしれませんが、よろしくお願いします。
下記のコードがある事で Internal Server Error になってしまいます。

open(FILE,">>$logfile") or die("エラー:ログファイルが開けませんでした。");

$logfileの変数値には本日の日付 + .dat が入ります。
自分なりにいろいろ原因を探してみて、$logfileの変数値と同名のファイルをあらかじめ用意してやればエラーにはならない事がわかりました。
それから >> と書けば「対象ファイルが存在しない場合は新規作成される」と書籍には説明があるのですが、新規ファイルは作成されていませんが、>>はそのような動作にはならないものなのでしょうか?
それから、or die 以降を削除してしまえば エラーは起きませんでした。

上記コードがあるとなぜ Internal Server Error になってしまうのでしょうか?
アドバイスやご教授をよろしくお願いします。

とある書籍を元にperlを学んでいます。まだ初心者で少々わかりずらい質問になってしまっているかもしれませんが、よろしくお願いします。
下記のコードがある事で Internal Server Error になってしまいます。

open(FILE,">>$logfile") or die("エラー:ログファイルが開けませんでした。");

$logfileの変数値には本日の日付 + .dat が入ります。
自分なりにいろいろ原因を探してみて、$logfileの変数値と同名のファイルをあらかじめ用意してやればエラーにはならない事がわかりました。
それから >> と書...続きを読む

Aベストアンサー

ディレクトリィには書き込み権限と言うのがあります。
書き込み権限には、owner、group、otherがあり
otherに書き込み権限が無いとWebから実行しても
ファイルは作成出来ない場合があります。

”同名のファイルをあらかじめ用意”とありますが
これの書き込み権限には、otherに書き込み権限があったんでは
ないのでしょうか?

Qメールフォーム作成でInternal server errorと出ます。

皆様こんばんは。メールフォーム作成で困っております。
練習中なのでありますがホームページビルダー11に付いていました
メールフォームCGIを利用しレンタルサーバーへUPしてみましたが
Internal server error500と出てしまいます。

レンタルサーバーはPerlとsendmailはOKです。
ファイル構成です。
index.html
kansou.htm
kansou.cgi 
jcode.pl です。同じディレクトリです。FFFTでパーミッションは755にしてあります。アスキーモード利用

kansou.cgiの最初のあたり
------------------------------------
#!/usr/bin/perl
#
# (C) COPYRIGHT International Business Machines Corp. 1999
# All Rights Reserved
#

#------ sendmailパスの指定 -------------------------------------
# 以下の、$mailprogに、サーバー上にある"sendmail"コマンドをフルパスで
# 記入します。詳しくは、プロバイダのガイドに従ってください。
# (例) $mailprog = '/usr/lib/sendmail';
$sendmail = '/usr/sbin/sendmail';
$mailto = 'aaa@aaaa.co.jp';
#---------------------------------------------------------------
require 'jcode.pl';
ここまで。

-------------------------------------
kansou.htmの最初あたりのHTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>感想ページ</TITLE>
</HEAD>
<BODY bgcolor="#ffffff">
<H2 align="center"><I>お問い合わせフォーム<BR>
<BR>
下記に必要事項をご記入の上、送信ボタンを押して下さい。</I></H2>
<HR>
<FORM action="kansou.cgi" method="POST"><INPUT type="hidden" name="to" value="aaa@aaaa.co.jp">
<CENTER>

このあたりまで記載します。
どこが悪いのか何度試してもよく分りません。
どなたかアドバイスして頂けないでしょうか。

皆様こんばんは。メールフォーム作成で困っております。
練習中なのでありますがホームページビルダー11に付いていました
メールフォームCGIを利用しレンタルサーバーへUPしてみましたが
Internal server error500と出てしまいます。

レンタルサーバーはPerlとsendmailはOKです。
ファイル構成です。
index.html
kansou.htm
kansou.cgi 
jcode.pl です。同じディレクトリです。FFFTでパーミッションは755にしてあります。アスキーモード利用

kansou.cgiの最初のあたり
-------------------------...続きを読む

Aベストアンサー

> $sendmail = '/usr/sbin/sendmail';
↑↑↑↑↑
sendmailパスの変数は、$mailprog ではないのですか?
$mailprog = '/usr/sbin/sendmail';

QWindows2000サーバーでは動いていたCGIがWindowsサーバー2003で動きません

ファイルのアップロードをするCGIです。
Windows2000サーバーでは問題なく動いていました。
先日Windows2003に乗り換えたとたん、動かなくなりました。
色々調べて、とりあえずエラーにはならなくなったのですが、正常に実行されないのです。
あやしいところは・・・

binmode(STDIN);
while($remain){$remain-=sysread(STDIN,$buf,$remain);$read_data.=$buf;}
$pos1=$pos2=$pos3=0;
$delimiter="";
$max_count=0;
$sendfilecnt=0;
while(1){
$pos2=index($read_data,"\r\n\r\n",$pos1)+4;
@headers=split("\r\n",substr($read_data,$pos1,$pos2-$pos1));
$filename='';
$name='';
foreach(@headers){
if($delimiter eq''){
$delimiter=$_;
}elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"; filename="([^;]*)"/i){
if($3){
$filename=$3;
if($filename=~/([^\\\/]+$)/){$filename=$1;}
}
}elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"/i){$name=$2;}
}

このへんです。
どうも、$filenameが''(ヌル)のままなので、この後正常にファイルのアップが動かないようなのです。
どなたか詳しい方、ぜひ教えてください。

ファイルのアップロードをするCGIです。
Windows2000サーバーでは問題なく動いていました。
先日Windows2003に乗り換えたとたん、動かなくなりました。
色々調べて、とりあえずエラーにはならなくなったのですが、正常に実行されないのです。
あやしいところは・・・

binmode(STDIN);
while($remain){$remain-=sysread(STDIN,$buf,$remain);$read_data.=$buf;}
$pos1=$pos2=$pos3=0;
$delimiter="";
$max_count=0;
$sendfilecnt=0;
while(1){
$pos2=index($read_data,"\r\n\r\n",$pos1)+4;
@header...続きを読む

Aベストアンサー

#1です。

微妙に間違えました。失礼!

Content-Disposition:.*? name="([^;]*)"; filename="([^;]*)"

ですね。ちょっと試してみてください。ちなみに、()1つなくしちゃったので、1つずれて、$2は$1、$3とかは $2になりますよね。それがめんどうなら、

Content-Disposition:(.*?) name="([^;]*)"; filename="([^;]*)"

でもいいとおもいます。これなら他の変更は不要!


おすすめ情報