環境変数 CGI & SSI

環境変数を書き出すファイル: CGI 版 SSI 版

GETでデータを送信します
POSTでデータを送信します

一年ぶりくらいかな?

なんとな〜〜く, CGI &ホームページ作成から遠ざかってしまって,だいぶたつ.多分,飽きちゃったんだろうな.

再び,なんとなくやる気になったのは,ホームページが移転したせいである.以前使っていた無料ホームページスペースが突然お亡くなりになってしまったことは,私にとっては悪いことばかりではなかったのかもしれない.

しかし,時間がたちすぎた.前に何をやっていたのかすっかり忘れてしまっている.

確か,一年前に,自分のパソコンに WWW サーバーを構築して CGI を使えるようにしたような気がするんだけれど?

かつて自分で書いたメモを読み返す.

あ,そうそう,思い出した. httpd.exeを起動して,ブラウザに http://localhost/readme.html だ.

よしよし.なんとなく思い出してきたぞ.前のときはど〜〜しても SSI ができなくて,あきらめたんだった.しかもローカルならできるのにアップロードした途端にできなくなって.

そーだ今回は,手始めにこれに再チャレンジしてみよう.

まずは Perl のパスの確認だ. XREA の場合は,

#!/usr/bin/perl
#!/usr/local/bin/perl

のどちらか.

ファイルのパーミッションは,

実行ファイル(*.cgi,*xcg): rwx --- ---
データファイル(*.pl,*dat,*.log): rw- --- ---
CGI 格納ディレクトリ: rwx --- r-x
データ格納ディレクトリ: rw- --- ---

CGI 格納ディレクトリとデータ格納ディレクトリのパーミッションが違うということは,プログラムと CGI とは別のディレクトリにするべきなんだろうか.

しかし,このファイルのパーミッションからすると,私はこれまで一年間,ず〜〜っと勘違いをしていたらしい.

パーミッションの三つのグループって,確か,「ファイルの所有者」,「ファイルの所有者を含むグループ」,「それ以外」だったと思う.私はこれまでずっと,ホームページを見ている人は「それ以外」に分類されていると思っていた.

しかし,実行ファイルの実行権限が「ファイルの所有者」にしかないってことは,この CGI って常に「ファイルの所有者」権限で実行されているってことなんだろうな.サーバーによって違うのかもしれないけれど.

さて,気を取り直して先に進む.まずは, index.html を index.shtml にリネームし,以下一文を加える.

<!-- #include virtual="http://yuri.s19.xrea.com/cgi-bin/count/count.cgi" -->

FFFTP の環境設定でパーミッションを設定し, index.shtml とカウンターの CGI をアップロード.

・・・・・・

むー.やっぱ駄目か.

ちなみに, count.cgi を直接ブラウザで見ると,こんなエラーが表示される.

Script Error
The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run this script under CGIWrap debugging. Usually, either rename or link the script temporarily to a file which ends with .cgid extension, or add a AddHandler cgi-script-debug .cgi line to your .htaccess file.

英語はお手上げです〜〜.

ソースは,ただログファイルから数字を一個読み込んで, +1 した数字を画面に出力し,またログファイルに保存しなおすだけといういたってシンプルなものだ.ローカルではちゃんと動いてるし,間違えてないと思うんだけどな〜〜とじっくり眺めていると・・・サブルーチンファイルをアップロードしていないことに気づいた.こんな初歩的ミスにはまっていたのか!

さっそくアップロード,そして count.cgi に直接アクセス.

わーい数字が出た! しかも,読み込むたびにちゃんと増えていっている.

なのに, index.shtml からは見られないのは・・・なぜ?

さて何がだめなんだろうというわけで, SSI について少し知識を入れなおすしかあるまい.

http://allabout.co.jp/computer/cgiperl/closeup/CU20020416A/index.htm

SSI と CGI の違いについて,書いてある.引用してみると・・・

「CGI がスクリプトの中で新しいHTMLページを作成して、その全体を出力しなければならないのに対し、SSI はコマンドを既存のHTMLページにタグとして書きこんで、その個所だけを動的に表示出来ると言うところにあります。SSI タグを書きこんだ HTML ファイルはサーバーにアップロードされた後、クライアント(ブラウザ)からURLで呼び出される度に、SSI の命令を読み込んで処理してから、データを返します。」

だそうだ. SSI はWWWページの中に埋め込めるという意味だろうか? いや,img タグで CGI のアクセスカウンターをWWWページの中に呼び出したりするし・・・?

やっぱりまだ,いまひとつよくわからない.情報を求めてほかのページを探す.

http://tohoho.wakusei.ne.jp/wwwssi.htm
とほほのSSI入門

あたりはどうだろう.

<!--#include virtual="〜" --> について,こんなことが書いてある.

virtual="〜" の 〜 には指定するファイルの仮想パス名(「http://サーバー名/パス名」の「/パス名」の部分)を指定します。

これかな?

http://xreafaq.com/ に,このパスについての記述もあった.いわゆるフルパスは, "/virtual/userID/public_html/..." らしい.つまり・・・

<!-- #include virtual="/virtual/yuri/public_html/cgi-bin/count/count.cgi" -->

こーゆーことかしら? でなければ・・・

<!-- #include virtual="./cgi-bin/count/count.cgi" -->

かな? 併記していそいそとアップロードしてみるが,やっぱり駄目〜〜〜! なんか,ものすごく初歩的なミスをやってるんだろうと思うのだけれど.

多分, SSI のパスのかき方でミスしているのだろうと思われるので(たった一行のうちで,そこしか間違えようがない),いろいろと書き方を変えて列記してみた.

それでも,どうもうまくいかない.そこで,他人のホームページをいろいろ見ているうちに,あることに思い当たった.

まさかとは思うが・・・ "<!--" と "#" の間にスペースがあるからとか,そういうばかばかしい理由じゃ・・・?

・・・そういうばかばかしい理由だった.

結局,以下のような,相対パスでいいことがわかる.

<!--#include virtual="./cgi-bin/count/count.cgi" -->

もしかしたら,このスペースを取れば, TkCity でも使えたのかもしれない.今となっては試せないけれど.

掲示板

内容を勉強することも考え,なるべくシンプルなものを選ぶ.もらってきたものは,

http://botan.sakura.ne.jp/~ruuzu/HTML/ruubbs.html

から, RUUBBS というものだ.何がいいって, jcode.pl とログファイルを除けば,ファイルが一個しかないところである.

ruubbs.cgi をエディタで開く.

Perl のパスは, #!/usr/local/bin/perl のままでいい.戻り先の URL をこの URL に変更,あと管理パスワード等も変更してからアップロードだ.

これは,まったく問題なく作動した.

TO HOME