Top HP】    
初心者のためのCGI設置
確認準備】【プログラム変更】【改行コード変更】【ファイル転送】【TelnetとUNIX】【エラーが起きたら

■ はじめに..
 CGIにつてい記述されたホームページ(以下 HP)は、ネット上に沢山有りますがほとんどは、ある程度CGIについての知識を持っている人を対象にして書かれています。
サーバーコンピュータなんて見たことも触ったことも無いのに、その中にプログラムを置いて動かそうなんて、初心者にとっては雲をつかむ(実際私がそうでした)ような話です。
でも、基本とコツさえ覚えれば何とかなります、誰もが最初からエキスパートだったのでは無いのですから。
以下は、チャット等の設置で得た経験を元に記述してみました、ここに記述した方法が最善だとは思いませんので慣れてきたら自分で色々考えてみて下さい。
なお、WWWサーバーは「NCSA httpd」として記述しています。(ApacheやNetscape Commerce Sarverも「NCSA httpd」と同じです)
また、エキスパートの人が見て「記述におかしな所が有るな〜」って思ったら是非お知らせください。

■ 確認と準備
 自分のHPにCGIを設置するにはいくつか確認と用意をするものが有ります。 つぎのことを確認して下さい。

 1.自分の所属するプロバイダがCGIの使用を許可しているかどうか。

 CGIの使用が許可されていなければどうしようも有りません、自分のサイトでCGIを使うのは不可能ですが、無料でCGIを貸してくれる所が有るので、そちらを利用して下さい。
 2.使用が許可されていても、それが特定名のデレクトリィだけか、まったくの自由か。
 特定のデレクトリィ名のみ使用可能の場合は、その使用出来るデレクトリィ名を確認しておくこと、ほとんどの場合は「cgi-bin」だと思いますが。
 3.CGIの取り付けは自分でするのか、プロバイダの管理者が取り付けてくれるのか。
 プロバイダの管理者が取り付けてくれるのならほとんど問題有りませんが、自分のHP用にプログラムの一部を書き替えることは必要です。

 よって、以下からはCGIの使用が自由(特定名のデレクトリィのみも含めて)で、自分で取り付けを行う場合について記述します。

 次に、用意をするものですが、以下のものが必要です。

 1.ファイルを自分のデレクトリィに転送させるためのFTPソフト。

 HP用のHTMLファイルを自分で転送して設置している人は、必需品なのですでに使用していると思いますが、使用していない人はおまけCDかネット上から仕入れて下さい。  私は、「CuteFTP」と言うソフトを利用してます。 
 2.シェルモードで作業を行うためのTelnetソフト。
 これも自分でHP用のディレクトリ(フォルダ)を作った人は使用していると思いますが、FTPソフトでもディレクトリは作成出来るので、持っていない人は手に入れておいて下さい。 私が使用しているのは「秀Term」です。
 3.プログラムの書き替えを行うためのエディタ。
 これはWin95に付属の「メモ帳」で十分です。でも、他のエディタを使用している人は、もちろん使い慣れたそのエディタで結構です。
 4.Winでの改行コードをUNIXでの改行コードに変換させるためのソフト。
 Winで使われている改行コードとUNIXで使われている改行コードは違うものなので、そのままではUNIX上でエラーになってしまいます。 よって、このソフトで改行コードを変更してからFTPで転送します。 私は「ページブラウザ」と言うソフトを使用していますが、このソフトにはエディタ機能は付いていませんので、改行コードの変更も自由に出来るエディタ、「秀丸エディタ」なども便利です。
 5.自分のHPに設置したいチャットや伝言板のプログラム。
 自分でプログラムが作れれば問題ないのですが、初心者にはちょっと無理なのでネット上で配布されているプログラムを使用することにします。CGI用のプログラムはほとんどがPerl(パールと読みます)と言う言語で作られており、かならず自分のサイトの環境に合わせて書き替える部分が有ります。

 下記のサイトでプログラムがダウンロード出来ます。

特報!倶楽部 http://www.big.or.jp/~talk/t-club/
ネットサーフレスキュー http://www.rescue.ne.jp/
Try The Home Page
http://www2q.biglobe.ne.jp/~terra/cgi/
The Sunnyside of the Street http://village.infoweb.ne.jp/
MASHI's PLACE http://village.infoweb.ne.jp/~mashi/

などですが、他にも配布してくれている場所が沢山有りますから探してみて下さい。

■ 使用プログラムの変更          【TOP
 ダウンロードしてきたプログラムはそのままでは使えません、自分のHPを設置しているサーバーの環境に合わせて書き替える必要が有ります。
その手順ですが、まずはダウンロードしてきたプログラムの拡張子が「.pl」か「.cgi」で無かった場合は拡張子を「.pl」か「.cgi」(自分のサーバーでCGIプログラムとして認識してくれる拡張子)に変更しておいて下さい。
また、落としてきたプログラムの改行コードはUNIX用の改行コードになっていると思うので、「ページブラウザ」等を使用して改行コードをWin用に変えて下さい。
そうしておけば、「メモ帳」で開いたり書き替えたりすることが出来ますから。
もちろん、「秀丸エディタ」などのコード変換とエディタを兼ねそなえたソフトを使うときは必要有りません。
さて、いよいよプログラムの書き替え個所ですが、基本の個所はそんなに多くは有りません。

 下記は実際に配布されているPerlで書かれた訪問者リストプログラムの一部です、これを使って書き替えの手順を説明します。

  #!/usr/bin/perl                                                   ← @ 
  #       ↑あなたが加入しているプロバイダの「perl」言語が使用できる   ← A 
  #         パスを指定します。一般的に「#!/usr/local/bin/perl」で大丈夫

  #日本語コード変換モジュール
  require '../jcode.pl';      ← B 

  #このプログラムを設置するURLを設定
  #コメント送信後、リロードしますので必ず指定
  $reload = 'http://www.inh.co.jp/~pachi/cgi-bin/guest/personalguest.cgi';  ← C 

  #ホームページのアドレス
  $homepage = 'http://www.inh.co.jp/~pachi/cgi-bin/';  ← D 
 
  #バックグランドカラー
  $bg_color = '#000000';         ← E 
  #文字色
  $text_color = '#FFFFFF';
  #リンクカラー
  $link_color = '#FFFFAE';
  #Vリンクカラー
  $vlink_color = '#FFFFAE'; 

  #アイコンファイル(入力フォームの左に表示)
  $icon = 'personalguest.gif';          ← F 

  #管理者削除モードのパスワード
  $password = '77777777';
  #====================================================================
  #           初期設定が必要なのはここまでです。        ← G 
  #====================================================================
  $file = 'personalguest.txt';                       ← H 
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); ← I 
	if ($year < 10) { $year = "0$year"; }
	if ($sec < 10) { $sec = "0$sec"; }
 @ パス
 このプログラムはPerlで書かれているため、一行目にこのプログラムを置くサーバー(あなたの所属しているプロバイダ)のPerlまでのパスを記述します。
普通は「#!/usr/local/bin/perl」で良いと思いますが、サーバーによって多少違いますので、パスが解らない場合は、Telnet(後述)のコマンドラインから「which perl」と打ち込んで見てください、perlまでのパスが表示されます、私の所のサーバーは「#!/usr/bin/perl」になっています。
それと、この最初の一行より前に「空行」や「空白」などが存在していてはいけません、空行や空白が存在するとエラーになります。
 A プログラム中の記述
 Perlのプログラム中で「#」で始まる行は注釈分です、プログラムを変更するときに直接関係の有る所では有りませんし、プログラムが実行されるときもこの部分は実行されません。
しかし、この部分はダウンロードして使用する人が自分用に書き替える時、解りやすいようにと作者が書き加えてくれたものですから、書き替えを行う前にしっかり目を通しておきましょう。
また、書き替えについての手順を記述したファイルが添付されているときは、そちらも目を通しておきましょう。
 B 日本語コード変換モジュール
 サーバーコンピューターに接続して来るパソコンで使われている日本語コードは何種類か有るため、その違うコードを一つのコードに変換させるために「jcode.pl」と言うフリーソフトが配布されています。
このソフトをPerlのプログラムに取り込む処理をする部分がこの行で、「jcode.pl」を置いてあるディリクトリを相対パスで指定します。
ここの記述は、「require '../jcode.pl';」ですので、一つ上のディレクトリに「jcode.pl」が置いて有ると言うことになります、もし同じディレクトリに置いてあるのなら、ここの記述は「require 'jcode.pl';」と言う記述になります。(サーバーによっては「'./jcode.pl'」にしないとエラーになる所も有るそうです。)
この「jcode.pl」はプログラムを配布してくれている所で一緒に配布しているはずですので、忘れずに落として来ましょう。
 C D 変数へURLの代入
 変数へCの場合はこのプログラム自身のURLを、Dの場合はこのプログラムが終了したときに飛ぶHPをURLで指定します。
ここの記述はどんなプログラムにも有り、URLで指定する場合、絶対パスや相対パスで指定する場合など色々有りますが、そのむね注釈文で(プログラムと一緒に添付されている「readme.txt」等に記載されているときも有ります。)指定してくれて有りますので、それに従って下さい。
 E 各部を自分のHP用に変更
 この部分はブラウザに表示されたときのバックカラーやテキスト色を変数に代入する個所です。
そのままの色使いで良いのなら書き替える必要は有りませんが、自分のHPのイメージに合わせて色使いを変更したいのなら書き替える必要が有ります。
このプログラムのように、最初に全ての色を変数に指定出来るようにしてある場合は良いのですが、プログラム本体の中で色使い等を指定しているプログラムも有ります。
慣れない内は、中々その場所を見つけ出して書き替えるのは難しいかも知れませんが、慣れてきたら是非挑戦してみて下さい。
 F その他の指定
 今まで記述してきた他にもそのプログラムにより特有の書き替え個所が存在するものが有ります。
このプログラムの場合は、gifファイルが張りつけられる場所が有り、その指定がこの個所です。
 G H 初期設定が必要なのはここまでです が...
 とりあえずここまでで自分のHPに取り付けるための設定は終了ですが、ほとんどのチャットや伝言板のプログラムは発言ログを記録しておくファイルが必要です。
当然そのファイルはプログラムが実行されるときに読み出されたり書き込まれたりするわけですので、プログラムがおいて有るディレクトリと同じ場所に無ければいけませんが、都合によっては別のディレクトリに存在していても差し支え有りません。
Hでは、そのファイル名を変数に代入していますが、この記述はそのプログラムが同一のディレクトリに存在しているときの記述です、もし、違うディレクトリに有るのならここの記述は変わって来ます。(日本語変換モジュールの時の記述と同じ)
 I ここからはプログラムの実行部分です
 ここから先はプログラムの実行部分なので、ほとんど書き替える必要は有りませんが、プログラムが解るようになったら書き替えてみるのも面白いかも知れません、しかし、プログラムの作者がそれを許している場合に限ります。
それと、書き替えたことによりプログラムがエラーをおこしサーバー機能をダウンさせてしまうことも有りますので、Perlに対する十分な知識と、プログラムに対する見極めが出来るようになってからにする方が安全です。
サーバーコンピュータは自分一人で使用しているのでは有りません、ダウンさせれば沢山の人に迷惑をかけることになりますので、そこの所を良く考えて行って下さい。
 ◎ その他の注意事項
 ネット上で配布されているフリーのプログラムは、誰でもが自由に使用することが出来ますが、そのプログラムの中に必ずその配布先(作者のHP)へのリンクと著作権の所在が記されています、ネット上のフリープログラムを使わせてもらうエチケットとして、その部分は絶対削除したりしないようにしましょう。
また、使用させてもらうお礼として自分のHPに配布先へのリンクを張ることをお忘れ無く。

 これでプログラムの書き替えは終了です、基本的にはどのプログラムも書き替え個所はほぼ同じですので、この書き替え手順を参考にして挑戦してみて下さい。

 プログラム言語のParlについてはここでは必要なこと以外は説明しませんので、本屋さんでPerlの本を仕入れるかネット上で勉強してください。

■ ページブラウザについて(改行コードの変更)          【TOP
 せっかく自分のHP用に書き替えたプログラムをそのままサーバーにFTPしても、改行コードがUNIX用になっていなければエラーになってしまいます。
書き替えに使用したエディタがどちらのコードでも自由に指定出来るタイプであるのなら、改めて改行コードを変更する必要は無いのですが、その機能の無いエディタを使用して書き替えを行った場合は必ず改行コードをUNIXのコードに変更して下さい。
ページブラウザはエディタの機能はついていません、改行コードの変更と日本語コードの変更のみを行うソフトです。
改行コードはWin用とUNIX用のどちらへも自由に変更出来、漢字コードもWin用のシフトJISとUNIX用のEUCを自由に変更出来ます。

 使い方は、プルダウンメニューの「ファィル」「開く」をクリックし、目的のファィルを表示して、同じ「ファィル」の「変換して保存」を選択します。
保存ウインドウが開きますので、右下の「テキスト形式」からWin用かUNIX用を選び、「OK」をクリックして下さい。
これで書き替えたプログラムは選択した改行コードに変換され保存されました、使用漢字コードはシフトJISのままで変更する必要は有りません。

■ ファィルの転送(FTP)          【TOP
 プログラムの書き替えも終わり、改行コードも変更したら、いよいよ自分の所属するプロバイダのサーバーにファィルをFTPソフトで転送するのですがその転送先には、そのプログラムを置くディレクトリが必要です。
プログラムを置くためのディレクトリが存在していない場合は、ディレクトリを作成しなけれはばなりません、方法は2つ有ります。
一つは使用しているFTPソフトにディレクトリ作成機能が有る場合は、転送に先立ってそのFTPソフトで作成します。
もう一つの方法は、Telnetでシェルモードに入り(後述)、コマンドラインからディレクトリを作成する方法です。
CGIプログラムを置くディレクトリ名はほとんどの場合「cgi-bin」ですが、プロバイダが指定する特定のディレクトリ名でないといけない場合も有りますし、そのプログラムの作者がディレクトリ名を指定している場合も有ります。

 ディレクトリが作成出来たら、FTPでそのディレクトリに接続しファィルを転送します。
ほとんどのFTPソフトは、接続すると左右2つに別れたウインドウが表示されます、通常左が自分のPCのディレクトリ、右はサーバーに有る自分のHPのディレクトリです、ソフトの上部に現在接続されているサーバー上のディレクトリのアドレスが表示されていますので確認して、転送先のディレクトリに間違いが無ければ転送を開始します。
ファィル転送のしかたですが、左側の自分のディレクトリに有る転送したいファィルをマウスで、右側のウインドウへドロップするだけです。
転送時のオプションが指定出来るタイプのFTPの場合はバイナリーモ−ドで転送して下さい。

■ TelnetとUNIXコマンド          【TOP
 これでプログラムは貴方のPCを離れてサーバーに転送されましたが、まだこのままでは動きません。
ここから先はTelnetソフトを使ってサーバーのプログラムを転送してあるディレクトリに入り各設定を行わなければなりません、以下にその手順を記述します。

 まずは、貴方のサーバーにTelnetで接続してください、サーバーに接続されると

  login:

と表示され入力待ちになりますので、貴方のログイン名(私の場合は、”pachi”です。 ←半角で入力)を入力して下さい。続いて

  Password:

と表示され入力待ちになりますので、貴方のパスワードを入力して下さい。(入力されたパスワードは、画面には表示されません。)

 パスワードが正しく入力されればサーバーにログインし、私の所は「ns: {1}」とプロンプトが表示され(プロンプトは「%」や「$」などサーバーの設定によって違いが有りますが、通常は「%」が多いようです)、コマンド入力待ちになります。

 ログインした所がホームディレクトリ(この時点でのカレントディレクトリ)になりますので、ファイルを転送してあるディレクトリへ移動します。

 FTPでディレクトリが作成出来なかった人のために、ディレクトリを作成するもう一つの方法を記述しておきます、以下の方法で作成して下さい。
コマンドラインから、下記のようにタイプして下さい。

  mkdir cgi-bin   (必ずしもこの名前のディレクトリ名とは限りません。)

 これでディレクトリ「public_html」の下に「cgi-bin」と言う名前のディレクトリが作成されました。
もう一度FTPに戻りこのディレクトリにファィルを転送しておいて下さい。

ファィルを転送してあるディレクトリが、ホームディレクトリのすぐ下、ディレクトリ名「cgi-bin」の場合はコマンドラインから

  cd public_html/cgi-bin

とタイプして下さい、カレントディレクトリが「cgi-bin」に移ります。
ディレクトリを移動したら、コマンドラインから「ls」と入力してください、転送されたファィル名が表示されればそこが目的のディレクトリです。

 CGIの使用について、接続先のサーバーが自由に許可している所は必要無いと思いますが、「Addtype」を指定しないとCGIが使えないサーバーも有りますので、指定をしなければならないかどうかは、サーバーの管理者に確認して下さい。
「Addtype」の指定が必要な場合は以下のようにして下さい。

 メモ帳などのエディタを開き、次の2行を記述して下さい。

  AddType application/x-httpd-cgi .cgi
  AddType application/x-httpd-cgi .pl

 記述したらエディタの「名前を付けて保存」を選び次のファィル名で保存して下さい。

  .htaccess

 エディタによっては、このままでは保存することが出来ず「.htaccess.txt」のように拡張子が付いてしまうかも知れませんが、その場合はそれで良いです。
保存出来たら、「ページブラウザ」等で改行コードをUNIXのコードに変更し、FTPでCGIプログラムが置いてあるディレクトリに転送すればOKです。
ファィルに拡張子が付いているファィルは、転送後Telnetでディレクトリにログインし、次のようにタイプして下さい。

  mv .htaccess.txt .htaccess    (パーミッションは644 たぶんそのままでOKです。)

 これでCGIが使用できるはずです。

 また、チャットや伝言板プログラムなどは、発言ログを格納しておくファィルが必要ですが、元々最初は空のファィルなので自分で作らなくてはなりません。
簡単に作るには、「メモ帳」で何も書かれていないまま、「ファィル」の「名前を付けて保存」を実行すれば空のファィルが出来ます、これをFTPでサーバーに転送すればOKです。
また、シェルモードから「ijkl.txt」を作成する場合は、次のようにコマンドラインからタイプします。

  touch ijkl.txt

どちらの方法でも、ファィルサイズ「0」のファィルが作成出来ます。

 UNIXの動いているサーバーコンピュータは、複数の人が同時に使用することを前提にシステムが設定されているため、自分のファィルを他人に見られたり、書き替えられたりする可能性が有ります。
そのため、UNIXのファィルには保護をかけることが出来るようになっています、これが「パーミッション」です。
コマンドラインから先ほどの「ls」にオプションを付けて、「ls -l」と入力してみてください、下のように表示されたはずです。

  % ls -l
  total 36
  drwxr-xr-x  2 pachi  dialer    512 Nov 17 00:03 ./
  drwxrwxr-x  9 pachi  dialer    512 Nov 12 23:56 ../
  -rw-r--r--  1 pachi  dialer  13662 Nov 17 00:03 abcd.cgi  ┐
  -rw-r--r--  1 pachi  dialer  13662 Nov 17 00:03 efgh.cgi  │ ※ ファィル名は仮名です。
  -rw-r--r--  1 pachi  dialer   2117 Nov 17 00:03 ijkl.txt  │
  -rw-r--r--  1 pachi  dialer   2416 Nov 17 00:03 mnop.cgi  ┘
  %
 上の2行は(末尾に「./」「../」が有るやつ)ディレクトリを表していて、3行目からがファィルの詳細な情報です。
左側に表示されている「rw-r--r--」がファィルのパーミッション(一番左端「-」はファィルを意味している)で、最初の半角文字3文字「rw-」が自分に対する許可、次の「r--」がグループ(同じサーバーに所属する人)に対する許可、最後の「r--」が他人に対する許可となっています。
この半角3文字は、「rwx」からなっており、「r」は読み取り可、「w」は書き込み可、「x」は実行可の意味で、その各部分が「-」に成っている所は、それが不可の意味です。
よって、パーミッション「rw-r--r--」は、自分に対して読み書きは可でグループと他人には読む事のみ許可しているファィルの意味です。
パ−ミッションの変更には2種類の方法が有りますが、ここでは数値で指定する方法を説明します。
 変更するには、コマンドラインから

  chmod 755 abcd.cgi

のように入力します。
最初の「chmod」はUNIXのコマンドで、ファィルの属性を変更するときに使うコマンドです。
その次の「755」がそのファィルへのパーミッションの指定で、2進数を8進数に置き換えて指定します。
2進数と8進数の関係は以下のようになっています。

パ−ミッション644 の場合666 の場合755 の場合777 の場合
モードrw−r−−r−−rw−rw−rw−rwxr−xr−xrwxrwxrwx
2進数110100100110110110111101101111111111
8進数 6  4  4 6  6  6 7  5  5 7  7  7

※ 2進数は「r.w.x」の表示で「可」すなわち「1」 「−」ならば「不可」すなわち「0」です。

 CGIプログラムは、自分のHPを訪れた不特定多数の人が実行する可能性が有るので、基本的には全ての人に対して実行パーミッションを立てておかなくてはならないのですが、使用プログラム配布先のHPに、ファィルごとのパーミッションが指定されているはずですので、その指定に従って変更して下さい、普通は「cgi」や「pl」拡張子が付いているファィルは「755」、「dat」や「txt」は「666」が多いようです。

 配布先の記述に従って、パーミッションの変更を行ったら、コマンドラインからもう一度「ls -l」とタイプしてみて下さい。

  % ls -l
  total 36
  drwxr-xr-x  2 pachi  dialer    512 Nov 17 00:03 ./
  drwxrwxr-x  9 pachi  dialer    512 Nov 12 23:56 ../
  -rwxr-xr-x  1 pachi  dialer  13662 Nov 17 00:03 abcd.cgi*
  -rwxr-xr-x  1 pachi  dialer  13662 Nov 17 00:03 efgh.cgi*
  -rw-rw-rw-  1 pachi  dialer   2117 Nov 17 00:03 ijkl.txt
  -rwxr-xr-x  1 pachi  dialer   2416 Nov 17 00:03 mnop.cgi*
  %

 パーミッションが変更されていることと、ファィルの末尾に「*」の付いているファィルが有ることに気づくと思います。
この「*」は、そのファィルに実行パーミッションが設定されているという意味です。

 これで全ての設定は終了です、後は貴方のHPからプログラムにリンクを張り動作確認をするだけなのですが、もしプログラムにエラーが有り、そのエラーがサーバーに決定的なダメージを与えた場合はサーバーがダウンしてしまいます。
ネット上で配布されているプログラムの場合は完成度の高いものばかりですので、配布者の指示どうりに書き替える程度では致命的なエラーを起こすことはまずあり得ないと思いますが、書き替えの時にミスっている可能性は有りますので、念のために文法のチェックくらいはしておきましょう。

 コマンドラインから以下のようにタイプしてみて下さい。

  perl -wc abcd.cgi  (もちろんチェックしたいCGIプログラムのファィル名です。)

 最終的に「abcd.cgi syntax OK」とメッセージが表示されればOKです。

■ エラーが起きたら          【TOP
 自分のHPにリンクを張ってブラウザから実行してみてください。
上手く表示されましたでしょか、手順通りに処理されていればエラーになることは無いと思いますが、もし、エラーになった場合は、下記の事をもう一度確認してみて下さい。

 1.本当にプロバイダがCGIを許可しているのか。 (←しつこい(^^;))
 2.許可されているとして、「Addtype」の指定は正しいか (上記参照)
 3.perlへのパスは正しいか。 (#!/usr/bin/perl のことです)
 4.perlへのパス記述以前にスペースや空行が入ってないか。
 5.改行コードはUNIXのものに正しく変換されているか。
 6.プログラム内に記述されている、他のプログラムへのリンクは正しいか。
 7.必要な全てのプログラムに実行パ−ミッションが付いているか。 (拡張子「cgi」や「pl」など)
 8.各ファィルのパ−ミッションは正しいか。
 9.「jcode.pl」が同一ディレクトリ内に存在しているか、パスの記述は間違いがないか。

もし、これでも上手く動かない場合はメールして下さいと言いたい所ですが、かく言う私もCGIは超初心者に毛が生えた程度ですので、的確にお答え出来るかどうか解りませんが、とにかくメールしてみてください。
何とかしてみますから。 (^^;)

それでは頑張って良いHPを作って下さい。


   17523
Visited since 1997.12.20
TOP HP   
pachi@inh.co.jp