cgi はウェブサーバに置いて使うプログラムなので、サーバーにアップロードして使うのですが、もし、自分のコンピュータにウェブホストがあれば、それを利用して、実際のサーバーにアップロードしなくても自分のコンピュータで試運転できます。Linux なら実際に多くのサーバーで使われている Apache を使うことができます。Apache を組み込んでおくと、いろんな点で有利ですので、Linux をサーバに使うことがなくても、Linux でインターネットを使うなら Apache を使えるようにしておくよう、お勧めします。
Apache はもともと Vine Linux にも入っているのですが、新しいバージョンを入れるため、まずは、古いバージョンを取り除く作業からはじめます。
rpm -qa | grep apacheでインストールされている apache のバージョンを見つけ、
rpm -e apache-xx-xxで apache を削除します。後は解凍、設定、コンパイル、インストールとお決まりの手順を踏みます。
# tar zxvf apache_x.x.xx.tar.gz # cd apache_x.x.xx # ./configure --enable-module=so # make # make installconfigure のあとの --enable-module=so というのは、シェアド・オブジェクトを使うためのもので、私は、PHP もインストールつもりなので、こうしておきました。
Apache は /usr/local/apache にインストールされます。apache を動かすにはこのディレクトリにある /bin/apachectl に start という引数を与えてやります。終了は stop 再起動は restart です。いちいち /usr/local/apache/bin/apachectl start とするのも面倒ですので、私は /etc/rc.d/rc.local に
# http server startup /usr/local/apache/bin/apachectl startと記述して自動的に Apache が立ち上がるようにしました。あと、設定したのは、/usr/local/apache/conf/httpd.conf の ServerName を localhost に、ServerAdmin を penguin@localhost にしただけです。
自分のホームディレクトリに public_html というディレクトリを作り、そこに html コンテンツを置きます。私の場合は、/home/penguin/public_html に Penguin Club のコンテンツがみな入っていますが、http://localhost/~penguin/index.html とすれば、このホームページの表紙が現れるしかけになっています。(penguin の前に ~ をつけるのを忘れないように!)もちろん、こんな面倒なことをしなくても file:///home/penguin/public_html/index.html でコンテンツは表示できるのですが、これではローカルファイルを表示するだけで、CGI など使えないのです。
/home/penguin/public_html で CGI を使うため、/usr/local/apache/conf/httpd.conf の中に、次のように項目を加えました。
#
# CGI Setting
#
<Directory "/home/penguin/public_html">
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
次に CGI を表す拡張子を .cgi
にするために、以下の行をアンコメントしました。
AddHandler cgi-script .cgi
httpd.conf の設定を終えてから、ゲストブック guest.html、ゲストブックの CGI、guestadd.cgi と 補助プログラムの jcode.pl、それに guestsee.cgi を /home/penguin/public_html に置きました。
ブラウザに http://localhost/~penguin/ と入力して index.html を表示させ、guest.html へのリンクをクリックしました。さっそくゲストブックへの記入、書き込みをためしましたが「データファイルが見つかりません」とのエラーになりました。この CGI ではデータファイルがない場合、エラーを返すだけで、データファイルを新規作成はしてくれないのです。それで /home/penguin/public_html で xz guest.txt & として guest.txt をつくり、0 バイトのまま保存しました。
もういちど、ゲストブックの記入をこころみましたが、guest.txt があるのに同じエラーが出ます。ls -l guest.txt としてファイルの属性を調べたら、-rw-r--r-- となっており、一般ユーザからの書き込みができないようになっています。このファイルは一般ユーザからの書き込みができるようにしなければなりませんので、chmod o+w guest.txt としました。そしてもう一度やりなおしたら今度は「書き込みありがとうございました」と出ましたので、「ゲストブックを見る」をクリックして、書き込まれていることを確かめました。
ローカルファイルに直接アクセスしただけなら、cgi の内容がテキストファイルでズラズラと表示されるだけで、決して cgi は動きません。しかし、ローカルホストからゲストブックにアクセスすれば、実際に書き込みや読みだしができます。apache を経由すれば、インターネットに接続したのと同じ状態をつくり出し、cgi を試せるのです。
ローカルホストで十分に試したあと、リモートサーバにアップロードします。アップロード後、ファイルの属性を確認しておきましょう。アップロードしたファイルは次のとおりです。
guest.html guest.txt guestadd.cgi guestsee.cgi jcode.plいずれも、public_html ディレクトリーにアップロードしましたが、ISP によっては、CGI やデータファイルを特別なディレクトリーに置くように指示している場合があります。その時はその指示に従います。そして、その場合、CGI スクリプトでの guest.html や index.html 、それに画像ファイルの指定を相対指定から絶対指定 ("http://sd.znet.com/~penguin/guest.html" や "http://~sd.znet.com/penguin/images/penguin_club.gif" など) に変えておかなければなりません。
もう一つ注意しなければならないのは、ISP のホストサーバーでの perl の場所です。私の ISP は /usr/bin/perl で大丈夫だったのですが、他の ISP では /usr/local/bin/perl でした。ISP に問い合わせて perl の場所を確認するか perl スクリプトの最初の行 #!/usr/bin/perl を適宜書き換えて試してみると良いでしょう。