| ◆ FAQ | 1999/4/20 更新 |
| ◆ 動かないときにまずチェックすること |
※ 当ページは「プログラムの配布」を行っているだけです。「掲示板、投票等の貸し出し」は行っていませんのでご注意下さい。
[目次へ]
[目次へ]
#!/bin/perl
という表示があります。これはこのファイルがPerlスクリプトであることを教える為のもので、各プロバイダによって設定が違います。ここが違っているとPerlスクリプトとして認識されません。ここに何と記述するかは、ご自分のプロバイダのホームページのCGI関連のところを見れば大抵書いてあります。もし書いてない時は、サポートに直接メールを出して聞きましょう。
「CGIをPerlで書きたいのですが、Perlのパスを教えて下さい。」
と聞けばよいでしょう。
もし、あなたのプロバイダがtelnetを使用できるのでしたら、コマンドラインから、
% which perl
と打ち込めば、「/usr/bin/perl」という具合に表示されます。
[目次へ]
% chmod XXX <filename>
CGIファイルのパーミッションはプロバイダによって違います。各プロバイダの「ホームページの作成方法」に、どのファイルをどのパーミッションにすれば良いかが書いてあります。大抵は下記のようにすれば動きます。(プロバイダに指定されている場合はそっちを優先して下さい。)
(例)
[目次へ]
require './jcode.pl';
というふうに記述されているのがパスの指定部分です。この位置に jcode.pl がないと Server Error になります。上記の場合は .cgiファイルと同じディレクトリに置きます。もし違うディレクトリに置く場合はそのパスを、
require '/home/nishida/public_html/cgi-bin/jcode.pl';
という具合に指定します。相対パスでもOKです。
[目次へ]
$basedir=".";
と書きます。
しかしプロバイダによっては、.cgiファイルを置く場所には他のファイルを置いてはいけないことになっている場合もあります。この場合データファイルの位置をパスで指定します。パスは相対パスでも絶対パスでもOKです。
(例1:絶対パス) $basedir="/home/nishida/cgidata";
下記のように末尾に「/」をつけるとエラーになるので気をつけて下さい。
(誤例) $basedir="/home/nishida/cgidata/";
データファイルをHTML用ディレクトリに入れておくと、URLで直接指定されたときそのデータファイルの中身を見られてしまいます。例えば、クイズのデータファイルを直接URLで指定して、回答などを見ることもできてしまうのです。中身を直接のぞかれたくない場合は、データファイルはHTML用ディレクトリに入れないようにしましょう。
[目次へ]
[目次へ]
[目次へ]
[目次へ]
[目次へ]
[目次へ]
■ お使いのプロバイダはCGIを許可していますか?
CGIは普通のHTMLページと違って「プログラム」ですので、実行することによりサーバーに負荷がかかります。そのため、プロバイダによってはCGIプログラムを置くことを禁止している場合もあります。ご自分のプロバイダのホームページを見れば、CGIを許可しているかしていないかはすぐに分かると思います。プロバイダ自体がCGIを禁止している場合、残念ですが当ページのCGIプログラムは使用できません。CGIを使用できるプロバイダかどうかを事前に調査して契約することをお勧めします。
■ FTPはアスキーモードにしましたか?
FTPの転送モードには「バイナリ」と「アスキー」の2種類があります。普通のHTMLデータを送る場合はどちらでも大丈夫ですが、CGIプログラムはアスキーモードで転送しないとサーバーエラーになります。どのFTPソフトにも必ず転送モードを切り替える機能がついています。.cgi という拡張子のファイルは、必ずアスキーモードにしてから転送してください。(転送モードの変更方法は、お使いのFTPソフトのヘルプなどを御覧下さい。)
■ Perlのパスはあってますか?
各.cgiファイルの一番上の行に、
表示されたパスの頭に「#!」を付けたものを各.cgiファイルの一番上に書いてください。
■ パーミッションは正しく設定されていますか?
普通のHTMLはただFTPで転送するだけで表示できますが、CGIプログラムはファイルのアクセス権(パーミッション)を適切に設定しないと動きません。各ファイルのパーミッションはFTPソフト又はtelnetによって変更します。FTPによる変更方法は各ソフトのヘルプをご覧下さい。telnetで変更する場合は、コマンドラインから以下の様に打ち込みます。(XXXのところには数字が入ります)
% chmod 755 vote.cgi
% chmod 666 data.txt
% chmod 777 lockdir
■ jcode.pl は正しい位置にありますか?
jcode.pl は、日本語処理に必要なライブラリです。掲示板、チャットなど、フォームに日本語を入力するCGIに必須です。jcode.pl を使うにはそのパスを指定しなければなりません。.cgiファイルの上部で、
■ $basedir のパスはあっていますか?
各.cgiファイルにある「$basedir」という変数は、データファイル(〜.txt等)が置いてある場所へのパスを示します。全てのデータファイルを.cgiファイルと同じ場所に置く場合は、
(例2:相対パス) $basedir="../cgidata/note";
■ ファイルが途中で切れていませんか?
サーバーの混雑等の理由により、プログラムが途中で途切れてることがあります。自分がダウンロードしたプログラムと、実際ページにおいてあるプログラムをもう一度よく見比べて見ましょう。
■ プログラムを自動巡回ソフトでダウンロードしていませんか?
当ページのCGIプログラムを自動巡回ソフト(WebAutoなど)でダウンロードすると、プログラム内部のパス記述等が勝手に書きかえられてしまい、正常に動かなくなることがあります。プログラムのダウンロードはブラウザからリンクを右クリックし「ファイルを保存する」を選択することによって行ってください。
■ ファイル名を間違えていませんか?
説明ページにおいてあるソースファイルは、ダウンロードできるように名前を変えています。CGIプログラムとして動作させるには説明どおりに名前を変更する必要があります。例えば、"xxx-cgi.txt"となっているファイルは"xxx.cgi"に変える訳ですが、その際にファイルの名前を下記間違える可能性があります。「File Not Found」というエラーが表示される場合は、ファイル名をもう一度チェックし直してください。
■ Perlのバージョンは最新ですか?
当ページのプログラムは一応全て Perl4 でも Perl5 でも動くように設計しているつもりです。ですが、Perl4 の中でも古いものだとかなりの確率で動かないことがあるようです。推奨は Perl5.000 以上、最低でも Perl4.035が必要です。もしこれより古いバージョンだった場合はプロバイダ若しくは管理者にメールを送ってPerlを最新のものに入れ替えてもらいましょう。
■ サーバーはUNIXではなくてNTですか?
最近サーバーをNT等のWindows系サーバーで運用しているプロバイダがあります。(自分のサーバーがNTをかどうかは、プロバイダのホームページ内を探すか、管理者にメールを出して聞くかして調べて下さい。)当ページのプログラムはWindows系のサーバーでも動作するように設計されていますが、そのままでは使用できません。具体的には、ファイルロックの方式を変える必要があります。.cgi ファイル中の下の方にある「symlinkが使えないサーバー用のファイルロック」の各行の頭の「#」を取り除き、今までのfile_lock関数は削除してください。
| ◆ CGI全般 |
[目次へ]
各プログラムの説明で「空ファイル」と書かれているものは全てこの方法で作成して下さい。改行一文字でも入っているとエラーになります。
[目次へ]
% ./tnote.cgi
と打ちこみます。正常に動く場合はHTMLのソースが吐き出されます。
▼ シェルテストの代表的なエラーメッセージ例
メッセージをよく読んで対処してください。
[目次へ]
lockdirの中にファイルが何もないのにまだ「ロック中」の場合は、lockdirのパーミッションが777になっていない可能性があります。 又、lockdirが存在しない場合や、位置が間違っている場合も「ロック中」は出っ放しになります。インストールの説明をもう一度よく読んで、ファイルのパーミッション、配置が正確かどうか確かめてください。
[目次へ]
もしどうしても分からなかったら、http://kingdom.biglobe.ne.jp/INFO/manual07f.html (Biglobe内)を参照してください。各FTPソフト別 (ftp.exe, CuteFTP, Fetch3.0) でのパーミッション変更方法が出ています。
[目次へ]
■ プログラムのダウンロードの仕方
各説明ページの上部にある「ファイル一覧」からファイルをダウンロードする方法は以下の通りです。(Netscape、Internet Explorer共通)
→ プログラムが表示される。
※ ダウンロードの都合で、元々のファイル名は正式なファイル名とは違うものになっています。
■ 空ファイルの作り方
当ページ内のCGIプログラムにおいて、データファイルとして空ファイル(中に何も入っていない、サイズが0のファイル)が必要な場合があります。サイズが0のファイルはブラウザを通してダウンロードできないので、各自で作成する必要があります。作り方は以下の通り。
● Windows 上で作って転送する場合
→「新規テキスト文書.txt」という空ファイルが作られる。
● サーバーにtelnetして作成する場合
と打ちこむ。
■ telnetでプログラムの動作テストをする方法
CGIプログラムが「Server Error」で動かないとき、telnet ができるプロバイダでは以下の方法でエラーの原因を詳しく探ることができます。これを「シェルテスト」といいます。例えば、tnote.cgi というCGIプログラムをテストしたい場合、tnote.cgi のあるディレクトリへ移動して、
プログラム中に何らかのエラーがある時は、その内容や行数がエラーメッセージとして表示されます。
→ tnote.cgi のパーミッションが755になっていない。
→ tnote.cgi の55行目の "if" という文字の側に文法的な間違いがある。
■ ファイルロックが解けないときの対処方法
「ファイルロック」とは、データファイルが同時アクセスによって消滅することを防ぐための仕組みです。当ページ内のプログラムは必要な部分には全てファイルロック機能をつけています。これがあるとファイルの消滅を防ぐことはできるのですが、時々サーバーの不具合などでファイルロックがかかりっぱなしになることがあります。その場合、telnet 又は FTP で lockdir の中にある "〜.lock" というファイルを削除してください。
■ FTPでのパーミッションの変更方法
telnet が許されていないサーバーでは、パーミッションの変更は FTP で行なうことになります。具体的な方法は、FTP ソフトのヘルプに書いてあります。
[CGI-BIN Tools Top]