CGI-BBS > アクセスカウンタ > SSI式カウンタ > ログアナライザでのSSIと<!--#include virtual


(株)友林堂
(株)友林堂


質問者 kai  投稿日 7/12(木) 20:05:21
はじめまして。
ログアナライザを設置しているのですが、自分のサーバー(interQ)
はSSIは使えるが#execのみ使えないとのことなので、
<!--#include virtual="./analyze/log.cgi"-->
を使用するログアナライザで設置しているのですが、
やはりSSIが働かないらしく、記述したソースに<!--#include
が見えたままになっています。
下の方でも質問してらっしゃる方がいたのですが
答えがどうなったかわからないので再びお聞きしたいのですが、
interQではSSIを使ったログアナライザは設置できないということに
なるのでしょうか?
アドバイスお待ちしています。
回答者 呑兵衛  [削除]  投稿日 7/13(金) 20:08:41
呑兵衛といいます。

SSI式カウンターを設置したいのか、ログアナライザーでログ解析をしたいのか
どちらですか?

前者なら ssi の書き方が間違っており、後者なら ssi の解釈が間違っています。
質問者 kai  [削除]  投稿日 7/13(金) 22:33:21
お返事ありがとうございます。
自分が理解できていないのかも知れないのでもう一度順を追って説明します。

まず、アクセス解析を設置したいので、
http://www.rescue.ne.jp/cgi/analyze2/
のページにある「カウンタ機能付きログアナライザ(アクセス解析)」
をダウンロードしました。

説明書の通りの構成でアップし、パーミッションも設定しました。
そしてログを採るHTMLファイルにもSSIを記述
<!--#include virtual="./analyze/log.cgi"-->
してアップしました。
(中に入っていたサンプルのHTMLファイルをそのまま使ったので、
記述に間違いはないと思います。)
アップした後そのログを採るファイルをブラウザで開くと、
ソースにそのまま記述が見えてしまっているので、
SSIが働いていないのではないかと思うのですが..。

サーバの方では(interQ)SSIは使用できるが#execのみ使用できない
といわれたので、#includeなら使えるのではないかと思った
のですが..。
それから、SSIを記述したファイルはshtmlでアップするように
いわれたので、それもためしたけれどだめでした。
自分のサーバーでは他にCGIでbbsなども使えているので
CGIが使える環境であることは確かなのですが、
どうしてもアクセス解析が設置できず困っています。

この説明で理解していただけたでしょうか?
もし根本的な間違いがあったら指摘してください、
よろしくお願いします。
回答者 呑兵衛  [削除]  投稿日 7/14(土) 01:13:49
virtual は現在位置より上位のディレクトリのファイルに対してアクセスしたい場合、
または相対パスで指定する場合に用います。
同じディレクトリ又は下位又は絶対パス表示の場合は file を用います。

まず include 命令が使えるかどうかテストしてみてください。

ファイル名を test.cgi などとし

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<html><head><title></title></head><body>\n";
print "Hello! World!\n";
print "</body>\n";
print "</html>\n";
exit;

と記述し最後を改行で終わるファイルを作ります。

次に test.html の名前で
Hello! World! だけを bodyタグの内側に記述した HTMLファイルを作ります。

次に
<!--#include virtual="./analyze/log.cgi"-->
の代わりに
<!--#include virtual="./cgi-bin/test.cgi"-->
と記述した xxx.shtml、
<!--#include file="test.html"-->
と記述した yyy.shtml ファイルを別に作成し、

test.cgiはアスキーで cgi-bin ディレクトリにパーミッション755で
test.html xxx.shtml yyy.shtml は アスキーで index.html ファイルがあるディレクトリに
転送し、ブラウザから xxx.shtml yyy.shtml をそれぞれ実行してみてください。

include 命令の書かれた場所に hello! World! と表示されるようでしたら
ssi の include 命令は実行可能ということになり、
log.cgi の結果を表示しないのは別の理由ということになります。

cgi や ssi のお勉強には、あきらさんのサイト
http://www.psl.ne.jp/
もお役に立つでしょう。
質問者 kai  [削除]  投稿日 7/14(土) 21:51:37
お返事ありがとうございました。
さっそく教えていただいた通りにファイルを転送し、
xxx.shtmlとyyy.shtmlを実行してみましたところ、
yyy.shtmlにはhello! World!の文字がきちんと表示され、
xxx.shtmlは
「403 Error - Forbidden
あなたのアクセスは許可されませんでした。」
とでてうまく表示されませんでした。

#include fileでの方ではうまくでたわけなので、
SSIは実行できるということになりますよね。
あきらさんのサイトにもいってSSIの基礎など読ませていただいて
納得はしたのですが、#include virtualで指定した場合に
うまく表示しない理由がわかりません..。

ちなみに、ディレクトリ構造は、

public_html
     |
     |-- test.html
     |-- xxx.shtml
     |-- yyy.shtml
     |
     |--/user-cgi-bin/
            |
            |-- test.cgi (755)

となっていて、xxx.shtmlの中には
<!--#include virtual="./user-cgi-bin/test.cgi"-->
と記述しました。間違っていないと思うのですが、
やはり考えてみてもわかりません。
なにかアドバイスがあれば、再びよろしくお願いします!
回答者 呑兵衛  [削除]  投稿日 7/15(日) 00:17:19
記述は間違っていないと思います。

ただ、public_html ディレクトリに置かれたファイルを ssi が処理してくれるのに
cgi ディレクトリで処理した結果を ssi を使って処理するとエラーになるという結果は、
拝見する限りそちらのプロバイダーでは cgi そのものの使い方が制限されているように
見受けます。
virtual、 file の記述に関わらずそうなると思います。

詳細はプロバイダーに訊ねられてはいかがでしょうか。
質問者 kai  [削除]  投稿日 7/15(日) 18:05:04
そうですか..わかりました、サーバーの方に一度尋ねてみたいと思います。
もし制限されているならまた他の手段を考えたいと思います。
何度もお返事ありがとうございました!
とても参考になりました。

このページは終了したので返信(回答)は書きこめません

Web裏技