logparanoia.inc.php†
サマリ | 環境変数を指定等、カスタマイズ性能を重視したアクセスログ |
リビジョン | 1.0 |
対応バージョン | 1.4.5_1(他は未確認) |
投稿者 | dnoc |
投稿日 | |
目次
アクセスログをとるプラグインです。
同様の用途で、access.inc.php 等いくつかありますが、以下の点が特徴的です
- カスタマイズ性の向上
ユーザーが希望するアクセスログの記述が可能です。一方で、デフォルトの設定でも十分に使える設定となっております。
反対に、アクセスログが可変なので、自前ではアクセス解析ソフトは提供しませんでした。替わりに、拙作webdl.inc.phpでログファイルをダウンロードして、表計算ソフトででも解析して下さい。
- 任意の環境変数を登録可能
通常、アクセスログ解析ソフトは、決まった環境変数だけを表示するように設計されています。「荒らし対策にipアドレスだけわかればそれで十分」という場合や「認証ページのユーザー名も登録したいんだけど・・・・」という場合に対応することが面倒です。当プラグインでは、ユーザーが望む環境変数を一行追加するだけで対応可能です。なお、デフォルトでは、ページ名、コマンド名、プラグイン名、IPアドレス、ホスト名、参照ページ元、ブラウザ名が登録されています。
- 連続アクセスの定義
アクセスログ解析ソフトには、リロードなどで連続アクセスがあった場合に、ログの容量を抑えるため、省略する機能が付いています。当ソフトでは、IPが一致した場合は全て省略、IPとページ名が一致した場合は省略、等、一致条件をandで結合することが可能です。デフォルトでは、ページ名、コマンド名、IPアドレス、ブラウザ名が全て一致した場合です。*1
- 特定のIPアドレスを登録
特に特徴という程ではないですが、自分のIPアドレスを登録して、ログに記載しないことも出来ます。正規表現で記述できるので、範囲指定なども出来ます。
- ページを跨いだ統合管理が可能
複数のページをまたいだ統合管理が一つのログで可能です。設置方法としては、各ページに設置する方法と、スキンに埋め込んで一括管理する方法を選択できます。
- 自動バックアップ機能
ユーザーが指定したファイル容量を超えたときには、自動的に別名で保存します。バックアップファイル名はバックアップ時刻なので、分かりやすいと思います。
ダウンロード†
インストール†
- ./plugin ディレクトリにlogparanoia.inc.phpをアップロードする。
- ./logparanoia ディレクトリを作り、パーミッションを707以上にする。(2006/2/13訂正*2)
.htaccessが設置できないサーバーで、外部からログファイルを見えなくする方法
- 空のlog.txtをlogparanoiaディレクトリに事前に作っておく。既に出来ている場合は、バックアップをとり新規に作成する。
- パーミッションを602か622にする。
こうすることによって、ファイルは見えなくなりますが、webdl.inc.phpでダウンロードしたり、アクセス解析プラグインを利用することが不可能になります。この場合は、FTPでログファイルをダウンロードして下さい。
設置方法†
- 各ページに設置
ページ内で
#logparanoia()
と記述する。
- スキンに登録
pukiwiki.skin.phpの中に
<?php require_once(PLUGIN_DIR. 'logparanoia.inc.php');
echo plugin_logparanoia_convert() ?>
という2行を追加します。場所は、私は</body>のちょっと上くらいに書いています。
カスタマイズ†
define('DIR',"./logparanoia/");
ログディレクトリ名です。
define('LOGFILE',"log.txt");
ログファイル名です。
define('LASTFILE',"last.txt");
前回のアクセスを記述するファイル名です。
define('SIZEMAX',10000000);
ログファイルのサイズ上限です。これを超えたら別名で保存します。
$w_env = array(
"time" => time(),
"page" => $vars["page"],
);
登録項目名です。
左側に、貴方が自由に名づけるkey「=>」の右側には、サーバーで表示可能な環境変数名を設定できます。
$eliminate_same = array("page", "cmd", "ip", "user_agent");
$w_envで左側に指定したkey名を追加します。このkey全てが一致した時、アクセスログには追加されません。この機能をオフにしたい場合には、
//$eliminate_same = array("page", "cmd", "ip", "user_agent");
というように行頭に//を追加します。
追記:バグで、この機能をオフにすると動かなる場合があります。次期バージョンで訂正いたします。
$eliminate_ip = array("192.168.0.1");
ここに記載されているIPアドレスのアクセスはログファイルに記載されません。
ここでは正規表現で評価されるので"^192.168."とかすれば範囲指定が出来ます。反対に"192.168.0.1"だと、192.168.0.10とかも適合しますので、IPを直接指定したい場合は"^192.168.0.1$"と指定して下さい。
デフォルトではコメントアウトされています。
アクセス解析†
拙作、webdl.inc.phpでログファイルをダウンロードして下さい。アクセスログの書式はタブ区切りなので、表計算ソフトで集計可能です。
ただ、デフォルトではUNIX時間なので、
EXCELで日本時間(JST)に変換するには
="1970/1/1"+(A2+32400)/86400
というようにした後、セルの書式を日付に変更して下さい。
それが面倒くさい場合は、$w_envの該当箇所を
//"time" => time(),
"time" => date("YmdHis"),
という風に書き換えて下さい。*3
また、EUCで記述されますので、Windowsで取り扱う際にはnkfでs_jisに変換するか、各種漢字コードに対応したテキストエディタを利用してください。*4
後、書式は、ファイル頭に、$w_envのkey、つまり、定義をタブ区切りで表記し、以下各列に対応した値をタブ区切りで書き込んでいるだけです。
この書式に対応したアクセス解析プラグインとか自由に作って下さい。
追記*5:コメント欄参照、うしさんがアクセス解析を作成してくださいました。
ライセンス†
Artistic License
to do†
アクセス解析プラグインを作る。
連続アクセスに関するバグ訂正
ulrエンコーディングから日本語に変換して記録するオプションの追加(アクセス解析プラグインを作ったら、この機能は作らないかもしれないです。
コメント†
- とてもいいです。全ページで誰が何をしたかまでわかるのがすばらしいです。解析をオープンオフィスのcalcでやってますが、解析プラグインほしいですね。作ろうとしたのですが、挫折しました。 -- 殴り
- これ,Very Good! です。 解析・・ほしいです。 暇ができたらつくろかなぁ・・ -- うし
- 殴りさん、うしさん、ありがとうございます。私も、最近一々表計算ソフトでソートするのが面倒になってきたので、時間が出来たらアクセス解析作ってみようかとも思っています。 -- dnoc
- でっちあげてみました。 kendou.ushi--3.mydns.jp/index.php?PukiWiki%2FPlugin%2Flv.inc.php -- うし
- うしさん。どうもありがとうございます。早速使わせていただきます。-- dnoc
- 使えそうだったらこちらにマージして使ってください。メンテナンスはできそうも無いので・・・(逃避) -- うし
- うわぁ・・恥ずかしいぐらいバグバグ・・・作り直してください>各位 -- うし
- うしさん、御報告ありがとうございました。折を見て修正させて貰います。 -- dnoc
- ちょっとだけ手直ししました。lv.inc.php -- うし
- すばらしいプラグイン、どうもありがとうございます。有効に使わせてもらいます。 -- jun.o
- Jun.oさん、御利用&訂正ありがとうございました。 -- dnoc
- 解析の方メンテしないと言うことなので、こちらに質問させていただきます。サーバ移転したら解析がまったく動かなくなってしまいました。PHP5が原因なのでしょうか? -- 殴り
- 症状は?>殴りさん
ログファイルが見つけられなかったときのエラー処理してないから,そのへんかも・・・
エラーログ見ながらソース見れば・・・ -- うし
- 素晴らしいプラグイン,大変ありがたく使わせていただいています.一つ教えていただきたいのですが,PukiWiki 1.4.4_php5の認証ページに入ったユーザ名を取得するには,どのように指定すれば良いでしょうか? 「"user" => getenv("REMOTE_USER")」 や 「"user" => getenv("PHP_REMOTE_USER")」 など試してみましたが,うまく取得できないようです. -- 崎間
- >崎間さん
PHPinfoで見てみたところ、_SERVER["PHP_AUTH_USER"]が該当する変数のようです。こちらでちょっと試してみてください。-- dnoc
- できました!dnocさん,どうもありがとうございます.どのユーザが利用しているかを把握したかったため,大変助かりました. -- 崎間
- 今このプラグインはどこから入手可能でしょうか? -- aokie
logparanoia.inc.php。軽量化のため(?)フッターに添付ファイルが表示されていないからね。ファイルがありそうなページでは、“添付”=>“添付ファイル一覧”で見るといい。 -- 0
- >aokieさん
すいませんでした。改めて、上記に欄作っておきました。
>0さん
どうもありがとうございました。 -- dnoc
- ありがとうございました。早速使ってみましたが、すばらしいです! -- aokie
- うしさん、すいません。質問逃げになってしまってました。最近pukiwikiをさっぱり弄ってないので、確認を忘れていました。症状は中身のないテーブルが表示されます。自前でタグ打ちでテーブルを作った時にTDの数を間違えて表示させた時のような、テーブルになってないテーブルです。数値はまったく表示されないです。 -- なぐり
- logparanoia.inc.phpの"time" => date("YmdHis")の末尾にカンマが抜けているようですね。 -- すまい
- >すまいさん
御指摘ありがとうございます。注意書き追加し、次期バージョンで訂正いたします。 -- dnoc
- このプラグインは、1.4.6でも動きますか?教えてください。 -- jrk813
- >jrk813さん
すいません。現在、1.4.6の環境がないので確かめられないですが、プログラム自体はバージョンに依存するような覚えは特にないので、動く可能性は高いと思います。よろしければ、試してみてください。不具合がありましたら、出来るだけ対応いたします。 -- dnoc
- xreaサーバでスキンを編集する方法で使っていますが、ログが記録されません。2つほど確認したいことがあります。1つは、logparanoiaディレクトリの場所、2つめは、logparanoiaディレクトリのパーミッションですが、606より小さくすればいいのでしょうか?よろしくお願いします。 -- jrk813
- パーミッションは、606より大きくして下さい。とりあえず、777にしておけば、パーミッションは問題ないはずです。logparanoiaディレクトリの場所は、私はpukiwikiディレクトリの直下においています。この場合、define('DIR',"./logparanoia/"); という記述になりますが、これをpukiwikiが認識していない可能性がありますので、相対パスでなくて、絶対パスで記述すると、記録されるようになるかもしれません。 -- dnoc
- デフォルトだとログが丸見えになってしまいます(例えばhttp hogehoge/pukiwiki/logparanoia/log.txt)。何か回避策はないでしょうか? --
- 教えて頂いたとおりしたら、なりました。ありがとうございます。 -- jrk813
- ログが見える件ですが、デフォルトでは、pukiwikiディレクトリ直下に、
.htaccessというファイルがあり、
<FilesMatch "\.(ini\.php|lng\.php|txt|gz|tgz|zip)$">
Order allow,deny
Deny from all
</FilesMatch>
と記述されており、.txtファイルは見えないようになっております。(これはlogparanoiaではなく、pukiwiki自体の仕様です)
初めに、.htaccessの記述を確認してみてください。
もし、記述が正しいようでしたら、HTTP Server(apache等)の方で、ユーザーによる.htaccessの設置を許可していない可能性があります。この際は、webサーバーの管理者に、設置許可を交渉してみて下さい。-- dnoc
- ありがとうございます。確認しましたところ、私の利用しているサーバでは.htaccessが利用できませんでした。残念です。。 --
- >jrk813さん
御質問の後、改めて考え直してみましたところ、記述の606では駄目で、707以上の間違えでした。御迷惑をおかけしてすいませんでした。
.htaccessの件
.htaccessが使えない場合に外から見えなくする方法を、「インストール」に追加しました。-- dnoc
- そうでしたか。わざわざありがとうございます。 -- jrk813
- 解析ツール -- rnd
- 失礼しました。解析ツールのお話ですが、ソフトを一から作るのではなく、apacheのログファイルと同じ形式で出力出来る方が解析をする側にとっては非常に有益になるのではないでしょうか。というのも、優れた解析ツールは世に出回っているわけですし -- rnd
- >rndさん
その方法は、便利ですね。次回は、apacheの出力オプションも作ってみます。ありがとうございました。 -- dnoc
- ご意見をお聞き頂きありがとうございます。というのも商業・フリー問わず殆どのweb解析ソフトはpukiwikiを正しく解析出来ないので、非常に期待しています。 -- rnd
- IPによるフィルタリングの正規表現がうまく行かないのですが $eliminate_ip = array("^66.249."); という記述で問題ありますか?
複数指定するのに複数行で
$eliminate_ip = array("^66.249.");
$eliminate_ip = array("^72.30.");
$eliminate_ip = array("^68.142.");
としているのがまずいのでしょうか -- シソ
- >シソさん
お返事遅くなってすいません。複数行で指定すると、毎回上書きするので、最後の行だけが有効になるはずです。
$eliminate_ip = array("^66.249.", "^72.30.", "^68.142.");
としてみてください。 -- dnoc
- dnocさん、ありがとうございます。上記のようにしたところ解決しました。 -- シソ
- 数日前から使わせてもらってます。大変重宝してますし、to doに挙げられてることも期待してます。ところで私の環境で
//"time" => time(),
"time" => date("YmdHis"),
をすると設置方法2の2行が挿入されている場所から先が出力されないようです*6。表示上は問題ないのですが、例えば別のプラグイン等で</body></html>に手を入れてる場合もあるので*7)timeの項は元に戻しました。といっても私の環境もいろんなプラグインを入れ放題で訳わからん状態ですので、あくまでも参考程度に読んでいただければと思います。 -- 8283
- >8283さん 御報告ありがとうございました。time以降表示されないということなので、なんらかの理由でdateコマンドが死んでしまっている様ですね。次のバグフィクスのとき、例外処理を入れてみます。ずっとほったらかしですいません。 -- DNoC
- タイムスタンプの設定ですが,私の環境では "time" => date("Ymd His"), としたら動きました.個人的には "time" => date("Y/m/d H:i:s"), が見やすくなるかと思いますが…. -- etsuo
- lv.inc.php ってどこからダウンロードするのでしょうか? -- noge
- 私もlv.inc.php難民です。お持ちの方分けて下さいませ。 -- moerrari
- PHP7.1 + PukiWiki 1.5.1 の組み合わせで、log.txt が生成されなくなってしまう問題について報告します。近因は lastcheck() で呼ばれる2つの preg_split() が false を返してしまう事です。2つを explode() に置換すると正しく動くようになります。何故 preg_split() がダメか? の真の原因特定までには至っていませんが、explode() の方が正規表現の構文解析をせずに済む事から、単純で高速なので良しとしています。以上、取り急ぎご報告まで。 -- Shin Torisawa
- preg_split()をexplode()に置換すればいいのはどこですか? -- shia
- ↑への回答ですが、既述でlastcheck() の中です。grepで探して下さい。 -- Shin Torisawa