CJ Club TOP/FAQ/サーバエラーってなんですか?


疑問ねこ Q/ サーバエラーってなんですか?
ねこくん A/ 汎用的なエラーメッセージ。以下を参考に▽

サーバエラーになってしまうのはなぜ? それはプログラム中に記述の間違いがあるから、というのが一般的。

まずはダウンロードしたままアップしてみよう(特に禁止文字列を初期状態に戻してみよう)。
「ダウンロードしたままアップしたのに、エラーになる」という人はココを読んでみてくれたまえ。

1.Perlパス (#!/usr/local/bin/perlなど) が間違っている。

Perlパスは、それぞれのサーバによって違う場合もあるが、ほとんどが[ #!/usr/local/bin/perl ]。
これがあっていないと、絶対にCGIは作動しないので注意しよう。

起動しない其の一(数字は行数)
  ↓ここに空白があるからCGIは動作しない
01: #!/usr/local/bin/perl
02:
03:require './jcode.pl';
04:#--------------------------------------------------
05:# I-BOARD Ver1.2 (アイコン式掲示板)
 :
この場合動かない原因はPerlパスの前に空白があること。
Perlパスの前に空白があると動作しない。


起動しない其の二(数字は行数です)
↓一行目にパスが書かれてないのでCGIは動作しない
01:
02:#!/usr/local/bin/perl
03:
04:require './jcode.pl';
05:#--------------------------------------------------
06:# I-BOARD Ver1.2 (アイコン式掲示板)
 :
この場合動かない原因はPerlパスが一行目にないこと。
Perlパスが一行目に無いとCGIは動作しない。


起動する其の一(数字は行数です)
     ↓ココに半角の空白があってもCGIは動作する
01:#! /usr/local/bin/perl
02:
03:require './jcode.pl';
04:#--------------------------------------------------
05:# I-BOARD Ver1.2 (アイコン式掲示板)
 :
! /までのところに半角の空白があっても一応CGIは動作するが、
全角の空白だと動作しない。


2.require文までのパスが間違っている

掲示板などの投稿を処理するスクリプトまでのパスが間違っているとサーバエラーになる。
ほとんどのCGIスクリプトは初期設定が同じディレクトリになっているので、同じディレクトリにいれれば問題ない。

      require './jcode.pl'; #同じディレクトリ設定
      require 'jcode.pl';   #これも同じディレクトリ設定
      また、このファイルは別のCGIと共有可能。

3.転送モードが間違っている

 サーバにファイルを送る際、転送モードが2つ、[ テキスト (ASCII) モード ]と[ バイナリー (RAW)モード ]がある。
 CGIスクリプトのファイルはテキストモードで送らなければならない。C言語で書かれたCGIはバイナリーモードで送る。

      一般的な転送モード
      ファイル モード
      HTMLファイル テキストモード
      GIF・JPEGファイル バイナリーモード
      CGI関連ファイル( .dat/.log/.pl/.txt/なども) テキストモード
      C言語で書かれたCGI バイナリーモード


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

だいたいのサーバではパーミッションが間違っている場合[ 403 Forbidden ]と出るが、サーバエラーと出すところもある。

      一般的なパーミッション設定
      ファイル パーミッション
      CGI実行ファイル( .cgi など) 755/705 等
      CGI記録ファイル( .dat/.log/.txt) 666/606 等
      CGI処理ファイル( .pl など) 755/644 等


5.設定時に文法的に間違っている

これは、いちばんよくあるエラーだろう。

エラー其の一(数字は行数です)
  ↓コメントの前に#がないのでエラーになる
13:----------------------------------------------------------------
14:# 初期設定など
15:#----------------------------------------------------------------
16:$met   = "POST";		# データ受け渡し方法(POST or GET)
17:$backurl="../index.html";	# 戻るURL(http://〜でOK)
18:$pass  = "7777";		# 管理用のパスワード
 :
(#)は、CGIでコメントを書く際に用いられるが、
それがないと、プログラムの一部と処理してしまいエラーになってしまう。

エラー其の二(数字は行数です)
16:$met   = "POST";		# データ受け渡し方法(POST or GET)
17:$backurl="../index.html";	# 戻るURL(http://〜でOK)
18:$pass  = "7777";		# 管理用のパスワード
19:
               ↓"..."の中に"を使っているのでエラーになる
20:$title = "I-"BOARD"";		# タイトル
 :
"..."の中に(")(ダブルクォーテーションマーク)を使うには注意が必要。
正しく使うには、
20:$title = "I-\"BOARD\"";		# タイトル
と(")の前に(\)を付ければ、エラーにはならない。

エラー其の三(数字は行数です)
13:#----------------------------------------------------------------
14:# 初期設定など
15:#----------------------------------------------------------------
                 ↓;がないのでエラーになる
16:$met   = "POST"		# データ受け渡し方法(POST or GET)
17:$backurl="../index.html";	# 戻るURL(http://〜でOK)
18:$pass  = "7777";		# 管理用のパスワード
 :
行の最後に(;)が無いのでエラーになる(この場合#以降のコメントの最後ではない)


BACK