ゲストブックとかを作ったことがあるならば分かると思いますが、CGIを使って、データをファイルに出力できますね。
で、sasadaさんが聞いているCGIでは、単にその出力をHTMLにしただけです。
なので、その後、見るときは既に出力されているHTMLを見るだけなので、CGIは使われないと。CGIは出力時にのみ使用。
URIはほぼダミーです。
HTML生成自体はHTMLがテキストなのでただ文字列処理しているだけです。あとはHTTPヘッダを送出させるくらいですが、これも通常のゲストブックと変わりません。
例のサイトでは、<! tubuyaki for CGI> <! end of tubuyaki for CGI>というコメントをマーカにして文字列置換(あるいは挿入)をやっているのだと思われます。つまり、通常のテキストファイルの置換処理や差し込みの処理と同じです。
CGIと
それを処理するPERL
実行させるHTTPサーバ
送られてきたデータを解釈するブラウザ
とそれぞれの役目を頭に入れておくと
理解しやすくなります。
例のページではhtmlの内部にcgiの出力結果を埋め込む
通常SSIと呼ばれる形が使われてますね。
htmlに埋め込まれたcgi実行命令をサーバが
コールして結果をhtmlにまとめてブラウザに送ります。
ちょっとご質問があいまいなので
この辺にして、何かさらに知りたいことがあれば
ご質問ください。
こんなところで的を得ているでしょうか・・
基本的にはCGIというプログラムの中にHTMLの骨組みを持っているんです。たとえば、
print <<”HTML”
<html>
<body>
$no <a href=”mailto:$mail”>>$name</a> $title $date $time <a href=”$hp”><img src=”home.gif”></a>
<blockquote>
$message
</blockquote>
といった骨組みをプログラム(スクリプト)の中に持っていて、$no に書き込み番号、$name に名前・・・・というように必要事項をログファイルから読み込んでくると、これが掲示板の表示部分ということになるわけです。
こうした基本部分に加えて、もし何々だったら何をする、といった条件分岐などのプログラム制御を加えてやると、こうした骨組みを次々と切り替えてHTMLとして出力してやることができますから、変幻自在、なんでこんな複雑なことができるのー、といったページも作れることになるわけです。
あ、続けてすいません。masaomixです。先の回答に書いたスクリプト例、最下行に
HTML
っていう一行を書き忘れてたみたい(^-^;
print <<”HTML”; #←セミコロンも忘れたかも(^-^;
:
:
HTML
とやると、この間にはさまった部分が
そのまま出力として出てきます。
この間に普通のHTMLファイルをそのまま突っ込んで、
前後にIPアドレスによるアクセス規制などを付けると
嫌な人には見せない隠しページなんていうのも作れます(笑)
たとえば…。
1:Formの入力を受け取る。
2:既存のhtmlを全部メモリ上に読み込む
3:html該当部分を、受け取ったFormの内容に置き換える。
4:sample_1/index.htmlの位置に、メモリ内のhtmlデータを全部テキストファイルとして書き出す。
とかで出来ますね。2は、必ずしもhtmlになっている物を読み込む必要は無くて、ページ内のさまざまな要素を、データベースから持ってきてもいいし、CGIスクリプト内に(ハードに)書かれていてもかまいません。
HTMLを生成するって言うと難しそうですが、HTMLファイルの内容を持ったテキストファイルを書き出すだけだと考えれば簡単では?
動的に書き出すならちょっとだけやり方が違いますが。
まずは、このへんから勉強してみてください。
それとも、このレベルは卒業した上で、ご質問のCGIの解説をご所望なのでしょうか?
http://www.hatena.ne.jp/1065270824
CGIでHTMLを生成する仕組みって一体どうなっているんですか?(例)http://www.octalserve.gr.jp/html/gyoumu/hp/cgi/sample_1/index.html教えてください。.. - 人力検索はてな
URL はダミーです。
あなたがメモ帳やなんかのテキストエディタを使ってファイルを更新する、という作業をCGIが行っているだけです。
例のページの場合は、予めテンプレート用のファイルを用意しておいて、テキストフィールドで入力した内容を取得して、指定した箇所に挿入して書き出してるだけみたいですね。
http://www.logicalyze.com/f_wbtips/cgi_1.html
CGI、SSI の仕組みをマスターしよう
方法は2種類あると思います。
1つは、ページ全体をCGIで作成します。
CGIはプログラムでHTMLを生成する為の取り決めです。URLを参考にして下さい。
2つ目は、該当場所をSSIで行う方法があります。
これは、通常のHTMLに特殊なコマンドを書くとプログラムが起動し、その表示結果をHTMLに自動的に挿入してブラウザに返します。
CGI及びSSI共に、Webサーバの設定がされている必要があり、また、多少プログラムやプログラムを設置する知識が必要になります。
教えてくださいのサンプルのですと、1つ目の方法だと
Webブラウザでテキスト入力して「入力」をクリックすると、入力したデータをサーバに保存します。
また、別のページを表示する時、HTMLのデータとサーバに保存された入力されたデータをあわせて表示します。
2つ目の方法では、HTMLのデータはそのままで、サーバに保存されたデータを表示するところに、特殊なコマンド(SSI)を入れます。
もう少し詳しい回答が欲しい場合は、どの程度の知識があるか、何処が分からないかを教えていただけると、説明できるとおもいます。
http://www1.plala.or.jp/bagi/cgiconst.html
CGI Saloon - CGIのしくみ
CGIの大枠は上記/下記URLの通りです。
これは、Perl・Rubyのみいならず、C++でも同様です。
ゲスト・ブックがご自分で作成できるなら、プログラム自体の説明は不要ですね。
というわけで、CGIによる動的なHTML作成の構図について回答します。
例題のCGIでも一般のゲストブックや掲示板でも、まずFORMを用いて入力欄を作ります。
これは、静的なHTMLでもよいですし、FORM自体をCGIで動的に作る場合もあります。
FORMからSUBMITされた内容は、http1.xというプロトコルでサーバーに返されます。
その情報がCGIへの標準入力として渡されます。
通常これをHttpリクエストと呼びます。
PerlやRuby・PythonなどのCGI親和性の高い言語では、HttpリクエストからFORM変数を簡単に取り出すための仕掛けが用意されています。
CGIプログラムは、FORM変数を用いて、ブラウザに返すHTMLを作成します。
作成したHTMLは、通常標準出力からアウトプットします。
このときも、http1.xというプロトコルを使います。
この出力のことをHttpレスポンスと呼びます。
CGI親和性の高い言語では、Httpレスポンスを簡単に作成するための機能が用意されています。
動的に作成したHTMLを出力し終えたら、CGIの処理を正常終了させます。
これで、一連の流れは終了です。
…こんな説明でよかったでしょうか?
ゲストブックやカウンターなどは自分で作れるぐらいのレベルです。