次のようなディレクトリ構成を前提にしてスクリプトの サンプルを作ってみました。
usr/local/httpd/ | +--cgi-bin--+--getgbook.cgi....(2) | +--showgbook.cgi...(3) | +--htdoc--cgi-test--gbook--+--index.html..(1) +--guest.dat...(4)名前とメールアドレスを入力してもらうページです。
★:getgbook.cgiは/cgi-bin/に置きます。<head> <title>ゲストブック</title> </head> <body> <h1>ゲストブック</h1> <form method="get" action="/cgi-bin/getgbook.cgi"> ★ あなたのお名前:<br> <input name="name"><br> あなたのメールアドレス:<br> <input name="address" size=30><p> <input type="submit" value="Add to Guest Book"> </form> <hr> <I>by Shozo Fukada</I> </body>
入力されたデータをファイルに格納します。
(2) getgbook.cgi [rwxr-xr-x, 755]
★:データファイルはフルパスを指定する必要があります。#!/usr/local/bin/perl print "Content-type: text/html\n\n"; $arg = $ENV{'QUERY_STRING'}; @item = split('&', $arg); foreach (@item) { ($tag, $value) = split(/=/, $_, 2); $value =~ s/\+/ /g; $value =~ s/%([0-9A-Fa-f]{2})/pack("H2", $1)/eg; eval("\$$tag = \"$value\""); } open(OUT, ">>/usr/local/httpd/htdocs/cgi-test/gbook/guests.dat"); ★ print OUT "$name (<a href=\"mailto:$address\">$address</a>)<br>\n"; close(OUT); print <<EOF <h2>登録してありがとうございました。<br> ゲストブックは,<a href="showgbook.cgi">ここ</a>をみてください。</h2> <hr> <I>by Shozo Fukada</I> EOF
ゲストブックの一覧を見るスクリプトです。
(3) showgbook.cgi [rwxr-xr-x, 755]
★:データファイルはフルパスを指定する必要があります。#!/bin/sh echo Content-type: text/html echo DIR=/usr/local/httpd/htdocs/cgi-test/gbook ★ cat <<EOF <head> <title>ゲストブック</title> </head> <body> <h1>ゲストブック</h1> <a href="/cgi-test/gbook/index.html"> あなたもゲストブックに登録して下さい.</a> <hr> EOF cat $DIR/guests.dat cat <<EOF <hr> <I>by Shozo Fukada</I> </body> EOF
ゲストブックに入力されたデータを保持しているファイルです。
(4) guest.dat [rw-rw-rw-, 666]
最初は,中身はからで結構です。
# touch guest.dat
で中身のないファイルを作ります。書き込みを許可しておくのを
忘れないようにしましょう。