ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:NOTOR KENTWEBのBASIC認証について
困り度:
  • すぐに回答を!
現在LINUXで自宅サーバーを立ち上げていて
今回KENTWEBさんのBASIC認証を導入することになり設定はすべて終り動作も
問題なく動いています。
しかし、少し強化したいと思い書き込んだしだいです。
SSIログのところに外部でも見れるようにしたいのです。
見れるようにすると言っても、HOSTやIPの表示は抜きで表示したいのです。
例えば、
member.datとpwlog.datをオープンして
ID名を名前に変更し、
名前+アクセス時間をSSIで表示できたらと思います。
色々試してますが、中々うまくいきません
一応書いてみたソース乗せておきます。
自分でも見る限り足りなかったりおかしいと思います。
アドバイスよろしくお願いします。

動作結果は、pwlog.datを30行表示しています。
以下ソース
# 会員ファイル
# → 正確にフルパスを記述すること
$memfile = '/member.dat';
# アクセスログファイル
# → 正確にフルパスを記述すること
$axsfile = '/pwlog.dat';
# アクセスログの最大数
$log_max = 300;



open(IN,"$memfile") || &error("Open Error: $memfile");
while (<IN>) {
($id,$nam,$eml,$memo) = split(/<>/);
if ($ENV{'REMOTE_USER'} eq $id) { $my_name = $nam; }
}
close(IN);


# ログファイルの読み込み
open(IN2,"$axsfile") || &error("Open Error: $axsfile");
@data = <IN2>;
close(IN2);

# ブラウザ情報
$agent = $ENV{'HTTP_USER_AGENT'};
$agent =~ s/&/&amp;/g;
$agent =~ s/</&lt;/g;
$agent =~ s/>/&gt;/g;
$agent =~ s/"/&quot;/g;

# ログ調整
while ($log_max <= @data) { pop(@data); }
unshift(@data);

print "Content-type: text/plain\n\n";
print " @data";
質問投稿日時:08/05/04 04:33
質問番号:3996152
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:noname#60065 #1です。

文中「Pearl」とあるのは、「Perl」の誤記です。
失礼しました。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/05/10 18:39
回答番号:No.2
この回答への補足すみません
下で書き忘れたCGIです。


#!/usr/bin/perl
# アクセスログの最大数
$log_max = 8;

# 時間取得
$date = &get_time;


# 外部用アクセスログファイル
# → 正確にフルパスを記述すること
$axsfile2 = '/home/httpd/user/pwlog2.dat';


# 会員ファイル
# → 正確にフルパスを記述すること
$memfile = '/home/httpd/user/member.dat';


sub get_time {
# タイムゾーン設定
$ENV{'TZ'} = "JST-9";

local($min,$hour,$mday,$mon,$year) = (localtime(time))[1..5];
sprintf("%d/%d-%02d:%02d",
$mon+1,$mday,$hour,$min);
}

open(IN,"$memfile") || &error("Open Error: $memfile");
while (<IN>) {
($id,$nam,$eml,$memo) = split(/<>/);
if ($ENV{'REMOTE_USER'} eq $id) { $my_name = $nam; }
}
close(IN);


# ログファイルの読み込み
open(IN,"$axsfile2") || &error("Open Error: $axsfile2");
@data = <IN>;
close(IN);



# ログ調整
while ($log_max <= @data) { pop(@data); }
unshift(@data,"$my_name<>$date<br>\n");

# 更新
open(OUT,">$axsfile2") || &error("Write Error: $axsfile2");
print OUT @data;
close(OUT);


print "Content-type: text/plain\n\n";
print "@data";
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:noname#60065 スクリプトをみると、$my_name に名前を代入しているようですが、その後 $my_name は使用されていないので、出力には影響がないと思います。とりあえずスクリプトの最後に、

print $my_name;

と、一行付け加えて確認して見てはどうでしょうか。

参考サイトに、Pearl全般について参考になりそうなサイトを入れますので、良かったらご覧になってください。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/05/10 18:36
回答番号:No.1
参考URL: http://www.tohoho-web.com/wwwperl.htm
この回答への補足回答ありがとうございます。
この書き込みをした後に、自分なりに書いてみたところ
上記でg-curryさんが述べてるように出力さえしてませんでした。^^;
なので、以下のように書き換えたんですが、ひとつ問題が起こりました。
1、$ENV{'REMOTE_USER'}は、認証ページ以外では使えないって事と
2、$ENV{'REMOTE_USER'}で、認証IDが習得されない場合は$my_nameが
空だということです。
そこで、考えたところ変数で、トップページから認証ページに(送る?)
あげてから、認証ページにアクセスできた場合は、$ENV{'REMOTE_USER'}
取れるので、$my_nameのところに表示できる。
できなかった場合は、ログインしてないか、登録者じゃないって事なんで
ゲストと表示させる。
ゲストは、1時間に同じホストはひとつしかログを取らないようにするなど
してあげようかと思います。
けど、以上のやり方で使用と思うと、ログインしてない登録者までも、
ゲストとしてログを取ってしまいますので・・・
やはり、ベーシック認証では、無理でしょうか。
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示良回答のみ表示