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