インターネット活用塾 3.CGIのトラブル解決


CGIが動かない

 CGIが動作しない場合の原因はいろいろあります。
動かないという現象だけでは解決できませんので、なぜ動かないのかを分析したり、設定し直す必要があります。
1.エラーメッセージを確認する
 まず、ブラウザのエラーメッセージに着目します。
「ERR500」や「Internal Server Err」のような場合、CGIがエラーとなっており、動作していません。
「Not Found」や「file not found」、「ファイルが見つかりません」などのメッセージの場合、アクセスしたURLに誤りがあります。このメッセージの場合、CGIの動作とは無関係に表示されていますので、URLを入れなおしてCGIの動作を確認します。

 また、「E-mailが未入力です」や「入力出来ません」などのメッセージの場合、CGI自体は動作しているもののCGIのエラーチェックによりエラーメッセージが表示されています。この場合、CGIは動作していますので、CGIの設定や入力データに問題があるなど、CGI個別の使用方法の問題と考えられます。

 エラーの原因が分からない場合、サーバーのエラーログを見るとエラーの原因が記述されている場合があります。
例えば「aaaa.csv Can Not Open」のように記述されていれば「aaa.csv」のファイルがエラーとなっている事が分かります。

2.CGIが動作しない例(原因)
CGIが動作しない場合の多くの原因と解決法は以下のとおりです。

(1)CGIが動作するディレクトリ内に設置されていない
独自CGIを動作させることができるサーバーと出来ないサーバーがあり、CGIを動作させることが出来るディレクトリも予めサーバーで設定されています。
CGIを実行することが出来ないディレクトリにCGIファイルを設置しても動作させることは出来ません。

◆対応
独自CGIが動作し、CGIを動作させることが出来るディレクトリにFTPで転送します。

(2)Perlへのパスに誤りがある
各CGIファイルの1行目にPerlへのパスが記述されています。
このPerlへのパス「#!/usr/bin/perl」などはサーバーによって決まっていますので、サーバー管理者から指定されたパス以外では動作しません。

◆対応
動作しなかったCGIファイルをWindowsのメモ帳で開き、Perlのパスを確認します。
パスの誤りを修正し、上書き、FTPでサーバーに転送します。

(3)パーミッション(アクセス権)の設定に誤りがある
アクセス権はサーバー環境とCGIの動作によって異なります。
CGI配布サイトやサーバーの説明ページなどにアクセス権が書かれていますが、必ずしもそのアクセス権で動作するものではございません。

また、CGIはデータファイルへ書き込む場合が多く、データファイルやディレクトリのアクセス権にも注意が必要です。ディレクトリは、CGIが使用しているディレクトリとCGI全体が入っているディレクトリの設定がありますので、全体のディレクトリにもご注意願います。

◆対応
通常、以下のアクセス権で動作しますので、アクセス権を変更して動作を確認します。
CGIファイル(拡張子が「.cgi」のファイル)・・・700、755
データファイル(拡張子「.dat」「.csv」など)・・・600、644、646
ディレクトリ(サーバー内のフォルダ)・・・755、757、777

(4)ディレクトリ構造に誤りがある
CGIファイルやデータファイルのディレクトリ構造に誤りがある場合、CGIファイルはデータファイルが読めなくなり、エラーになります。

◆対応
CGIの作者が指定したディレクトリ構造に合わせて設置します。

(5)FTPの転送モード
CGIやデータファイルはテキストモード(アスキーモード)で、GIFやJPEGなどの画像ファイルはバイナリモードで転送する必要があります。
FTPソフトには自動判定の機能が付いている場合、自動で転送すれば問題ありませんが、「バイナリモードで転送」などのボタンを押して転送した場合、CGIファイルがバイナリモードで送信され、実行出来なくなってしまいます。

(6)その他
その他、さまざまな原因で動作しなくなる場合があります。
弊社で設定・設置を行った際に、下記のような内容が原因で動作しなかった場合がありました。
●アクセス権を「777」に設定した。(CGI、フォルダ、データファイルなどのいずれかのアクセス権を777に設定すると動作しないサーバーがあります)
●実在しないメールアドレス宛てにメールを配信しようとした(正しいアドレスに修正して対応)
●CGI内のデータファイル等のパスに誤りがあり、データファイルにアクセス出来ない(相対パスが使用出来ないサーバーもあります)
●CGIの設定、カスタマイズ等のためにスクリプトを編集する時に文字コードを誤ったり、スペースなど不要な文字が混入した
●自宅サーバーのため、FTPで転送しなかったため、スクリプトの改行コードが変換されず、実行出来ないスクリプトになっていた。
●広告等の自動挿入が設定されており、出力部分のHTMLタグが破損した状態で出力され、CGIの出力結果を見ることが出来ない

などなど、さまざまな原因で動作しない場合がありました。


3.特定のCGIのみ動作しない場合
複数のCGIファイルから構成されている場合で、特定のCGIのみ動作しない場合の原因と解決法です。

(1)ファイルの書込みが出来ない
データファイル又はディレクトリのアクセス権に問題があり、書込みが出来なくなっています。
CGI全体が入っているディレクトリのアクセス権が原因の場合も多いので注意が必要です。

◆対応
データファイルやディレクトリに書き込み権を与えます
(2)モジュールやライブラリが無い(sendmailが使用できない)
CGIが使用するモジュールがインストールされていなかった場合やCGIが使用するライブラリが無かった場合にはエラーになります。
また、sendmailが使用出来ないのにCGIがsendmailへ書き込みを行った場合にも同じようにエラーになります。
ライブラリは作成者の許可があれば、サーバーに転送するだけで対応可能ですが、sendmailやモジュールはサーバー管理者にインストールして頂く必要があり、レンタルサーバーの大半では対応出来ません。

◆対応
ライブラリが無い場合・・・ライブラリをFTPで転送する
モジュールが無い場合・・・モジュールをインストールする(インストールできなければ使用不可)
sendmailが無い場合・・・sendmailをインストールする(インストールできなければ使用不可)




© Copy Right 2001 Chama.ne.jp