トップ>FAQ>FAQ内容
FAQ


1-1. 「500 Internal Server Error」と言われる
これは汎用的なエラーメッセージで、極端に言うとCGIの記述ミスは全てこのエラーが出ます。
「何も設定・改造していない」という条件の時に考えられるエラーを紹介します。

perlのパスのミス
スクリプトの一行目にある 「#!/usr/local/bin/perl」という所です。
これはプロバイダによって異なります。
大抵はプロバイダのホームページに書いてあります。
書いていなければ、メールなどで問い合わせてください。

FTPの転送ミス
通常のFTPには「テキストモード」と「バイナリモード」があります。
ここで配布されているCGIは、全てテキストモードで転送してください。

ファイルのアップロードミス
これは 拡張子 .pl のファイルについてです。
ほとんどのスクリプトは jcode.pl(歌代氏開発)を使用しています。
これをアップしていないと、このエラーが出ます。
また、パス設定を間違っている場合も同様です。


1-2. 「403 Forbidden」と言われる
直訳すると「禁じられた」ですかね。
要はパーミッションのミスです。
CGIのパーミッションは 755 になっていますか?

ちなみに 705 でも動く場合が多いです。
サーバによっては 001 とかでも動く、と聞いたことがあります(眉ツバもの?)。

もしくは、CGIが使えないディレクトリにアップロードしたりすると、
このエラーが出る事があります。


1-3. 「404 File Not Found」と言われる
これはそのままです。「ファイルがありません。」
URLの入力や設定を間違っているだけです。


2-1. " または ' で囲んである文字の設定
例をだして説明します。

" (ダブルクォート)の場合、「BBS for "XX" homepage」と指定したい時 。

×$bbstitle = "BBS for "XX" homepage";
○$bbstitle = "BBS for \"XX\" homepage";

上では動きません。
文字列全体を " で囲んでやらないといけないのに、
途中で " が入ってしまい、どこまでが文字列か分からなくなってしまいます。
その場合は、下の例のように、 " を \" と書いてやることで回避できます。

' (シングルクォート)の場合も同じです。
×$bbstitle = ' XX'S BBS';
○$bbstitle = ' XX\'S BBS';


最後にもう1つ。 例えば、
$xx = "予約可能";

これは動きません。
文字化けの話と関連してきますが、「能」の文字が化けてしまい、
その影響が出てしまいます。
これを回避するには、化ける文字の後に \ マークをつけます。

$xx = "予約可能\";
こんな感じですね。


2-2. 文字化けしてしまう
これは Shift_jis特有のものです。
理論は省略して、対処方法を。

「パソコン」「表示」などは化けます。実際は、中の「ソ」「表」の文字です。
これは、「パソ\コン」「表\示」のように、
化ける文字の後に \ マークをいれてあげると、化けずにしっかり表示されます。
他にも、申・十・圭・予・貼…などいくつかの文字が化けてしまいます。


2-3. @ マークなどの特殊記号
質問多いです。はい。
特に大きめのスクリプトに多いですね。Ranking Linkとか。
メールアドレスを書く必要のあるスクリプトです。

×$xx = "xxx@yyy.zzz";
○$xx = 'xxx@yyy.zzz';

シングルクォートで囲んであるものは大丈夫ですが、それ以外は通りません。
この場合は、特殊記号の前に \ マークを付けます。

$xx = "xxx\@yyy.zzz";
これでOKです。
別に @ だけとは限りませんのでご注意下さい。


2-4. 画像が出ない
画像のアップミスか、CGI内での画像の位置の記述ミスが考えられます。
または、画像が見られない場所にアップしている、というのもあります。
CGIディレクトリにHTMLが置けない、という環境の方は、
画像も置けないことがほとんどです。


2-5. メールが送信されない
まずはsendmailのパスがちゃんと設定できているか確認しましょう。
これは、perlのパスと同様に、プロバイダのホームページに書いてあると思います。
また、送信者名の設定で、日本語を使用すると送信できない場合があります。


2-6.「他ページからの投稿は禁止されています」と言われる
CGIで自動的にスクリプトの場所を取得し、1つ前に見ていたページを確認して、
それを比較してチェックをしています。

しかし、場所の取得が出来ない場合があります。
その場合にこのエラーが出ます。
CGI内で、別ページ投稿を許可することが出来ますので、
それを設定してください。


2-7.エラーチェックの方法
Internal Server Error といわれても、何がなんだかわかりません。
サーバ内部のエラーといってもいっぱいありますし。

そこで、このエラーが出たときは、perlのパス指定の次の行(2行目以降)に次のものを加えてください。

BEGIN{
$| = 1;
print "Content-type: text/html\n\n";
open(STDERR, ">&STDOUT;");
}

これでエラーメッセージが表示されます。
英語ですが、理解できなくてもなんとかなります。

Can't modify subroutine entry in substitution 
 at C:\cgitest\dev\linebbs\linebbs.cgi line 292, near "s/[\t\a]//g;"

こんな風に言われます。
最後の line 292, near "s/[\t\a]//g;" だけ見てください。
つまり292行目の s/[\t\a]//g; の近くにエラーがあるということです。
示された部分をチェックして見ましょう。


戻る