- 締切済み
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/&/&/g; $agent =~ s/</</g; $agent =~ s/>/>/g; $agent =~ s/"/"/g; # ログ調整 while ($log_max <= @data) { pop(@data); } unshift(@data); print "Content-type: text/plain\n\n"; print " @data";
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です。 文中「Pearl」とあるのは、「Perl」の誤記です。 失礼しました。
スクリプトをみると、$my_name に名前を代入しているようですが、その後 $my_name は使用されていないので、出力には影響がないと思います。とりあえずスクリプトの最後に、 print $my_name; と、一行付け加えて確認して見てはどうでしょうか。 参考サイトに、Pearl全般について参考になりそうなサイトを入れますので、良かったらご覧になってください。
補足
回答ありがとうございます。 この書き込みをした後に、自分なりに書いてみたところ 上記でg-curryさんが述べてるように出力さえしてませんでした。^^; なので、以下のように書き換えたんですが、ひとつ問題が起こりました。 1、$ENV{'REMOTE_USER'}は、認証ページ以外では使えないって事と 2、$ENV{'REMOTE_USER'}で、認証IDが習得されない場合は$my_nameが 空だということです。 そこで、考えたところ変数で、トップページから認証ページに(送る?) あげてから、認証ページにアクセスできた場合は、$ENV{'REMOTE_USER'} 取れるので、$my_nameのところに表示できる。 できなかった場合は、ログインしてないか、登録者じゃないって事なんで ゲストと表示させる。 ゲストは、1時間に同じホストはひとつしかログを取らないようにするなど してあげようかと思います。 けど、以上のやり方で使用と思うと、ログインしてない登録者までも、 ゲストとしてログを取ってしまいますので・・・ やはり、ベーシック認証では、無理でしょうか。
補足
すみません 下で書き忘れた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";