[PHP-users 14904]ユーザの行動追跡のヒントRe: PHP変数の値をApache のログに書きこめるか?

Y.Watanabe yuw @ msj.biglobe.ne.jp
2003年 4月 24日 (木) 23:46:32 JST


ども、わたなべです。

"Y.Watanabe" wrote on 2002/06/24 17:51
with Subject: [PHP-users 8250] PHP変数の値をApache のログに書きこめるか?
http://ns1.php.gr.jp/pipermail/php-users/2002-June/008255.html

> 例えば下記のようにPHPの変数にユーザー名等の情報が入っているとして、
> 
> $_SESSION["username"] = "watanabe"
> 
> この変数の情報を、Apacheが自分のアクセスログファイルに
> 記録するように仕向けられないでしょうか?
> 
> ちょうど、ApacheがHTTP基本認証でのユーザー名をログファイルに
> 記録できるのと同様のことをなんとかできないかなと思っております。

という自分の投稿から1年近くたった今頃、解決策があっさり見つかりました。

何の気もなしにマニュアルを眺めていたら、
http://www.php.net/manual/ja/function.apache-note.php
apache_note()という関数を見つけ、
そのユーザーコメント(しかも1999年の^^;)に貴重なヒントがありました。

早い話が、apacheのhttpd.confに、たとえば

LogFormat   "%h \"%{username}n\"" 

と書いておいて、phpスクリプトに

<?php
  $username = "hogehoge";
  apache_note('username',$username)
?>

とあれば、そのphpにアクセスすると、apacheのログには

xxx.xxx.xxx.xxx "hogehoge"

と出力されます。

この方式と、たとえばanalogなどのログ解析ツールや、
あるいは単純にgrepを組み合わせれば、
どのユーザーがどのページをどんな順番で見たのか、
一目瞭然に把握することができるでしょう。

例えば、ユーザー管理された会員制サイト等では重宝するのでは?


注:このモジュールの関数は、Apache 1.x モジュールとして
    PHPを実行して いる場合のみ有効です。 





PHP-users メーリングリストの案内