CGI工房:TOPに戻る


CGIでエラーがでたら・・・





設置するプロバイダ(サーバー)はCGIを許可していますか?
以外と落とし穴になりやすいのが、実はCGIが使えないサーバーだったということです。CGIを使えばいろいろなことが出来ますが、反面、サーバーにとっていろいろなことが出来ることによる危険も生じることになります。こうしたことからCGIを禁止していたり、CGIを使用するために特別な設定をしてもらう必要のあるプロバイダがるので注意が必要です。



プロバイダ指定のディレクトリに入れていますか?
サーバーの設定によっては、CGIを設置するディレクトリが特定のディレクトリ(cgi-binなど)に限定されているところがあります。この場合、任意のディレクトリにCGIを設置しても実行されず、エラーがでたりソースがそのまま表示されてしまいます



.htaccessが必要ではないですか?
プロバイダによっては「.htaccess」という設定ファイルを設置しないとCGIが動作しないことがあります。CGIが許可されているはずなのにCGIがうまく動作しない場合などは、この設定が出来ていない事が原因として考えられます。

具体的には、以下のような内容のファイルを、.htaccessという名前で、CGIを設置するディレクトリか、それより上のディレクトリに設置します。(すでに設置している場合は、次の内容を追加します)

Options ExecCGI
AddType application/x-httpd-cgi .cgi


アスキーモードで転送しましたか?
一般に、みなさんのマシン(OS)環境はWindows系が多いかと思いますが、CGIを設置するサーバーはほとんどがUNIX系です。このとき、テキストファイルの改行コードの形式の違いから、CGI関連のファイルは必ずアスキーモードで転送する必要があります


パーミッションは正しく設定されていますか?
CGIでは、各ファイルのパーミッションを正しく設定する必要があります。一般には次のように設定するとよいでしょう。(カッコ内は設定可能なサーバーに限りますが、こちらの方がより安全な設定だそうです)

CGIスクリプト:755(705)
データファイル:666(606)
読み込み専用:644(604)


jcode.plは設置しましたか?
jcode.pl は、日本語処理に必要なライブラリです。掲示板など、フォームに日本語を入力するCGIで必須です。通常はCGIファイルを設置するディレクトリに jcode.pl も置きますが、別なディレクトリい置いているものを使用する場合、そのディレクトリパスをきちんと指定する必要があります。

スクリプトの先頭付近の require 'jcode.pl'; などと記述されている部分を、設置しているディレクトリのパスに書き換えます。



Perlのバージョンは 5 ですか?
CGI工房で公開しているスクリプトは、全てPerl5で開発・設計してます

Perl4 でも動作するものがあるかもしれませんが、原則としてPerl5が必要だと思って下さい。 また、プロバイダによっては古いPerl4のままでPerl5にバージョンアップしていない事があったり、Perl4とPerl5を別のディレクトリにおいている場合があるので注意が必要な場合もあります。



それでもエラーがでる・・・・
上記の項目を確認したが、それでもダメだ・・・という場合、もう一度確認して置いてほしい項目をつらつらと書き上げます。
  1. 行末のセミコロン(;)を付け忘れている。
  2. 対応するカッコの数が合わない。
  3. 文字列の中のダブルコーテーション(")にバックスラッシュ(\)をつけ忘れている
  4. サーバーのパスとかディレクトリ構造やURLを区別できていない。
  5. 一気に変更しすぎて、どこが問題なのかわかっていない。
最低限、telnetやPerl for Win32などを使ってでもいですから、エラーがでているCGIスクリプトの文法チェックは行ってみましょう。



質問するまえに
最低限、次のことは確認してから質問しましょう。

  1. PerlのパスやパーミッションなどCGIの基本はOKである。
  2. 簡単なCGIは動いている。
  3. ローカルテストはOKである。
  4. サーバーのパスとかディレクトリ構造やURLを区別できていない。
  5. 一気に変更しすぎて、どこが問題なのかわかっていない。
  6. こんなページあんなぺーじに目を通した
それから、私は改造などに関する質問には、ほとんどの場合直接的な回答は出しません。ヒントや情報源を提示するだけです。 たとえ初心者を名乗っていようとも、CGIを改造しようとするからにはそれなりの覚悟を持って行ってほしいしからです。 それに、ほとんどの場合少し考えたり、少し調べたりすれば解決するようなことが多いからなのです。




CGI工房 (99/08/30)