Webalizerで URLエンコード文字列を扱うには?
Webalizerの日本語化(UTF8化)は、以下の記事でできるようになったと思います。
ほとんどの場合、これでOKなんですが、検索文字列についてはうまく行かないことがあります。
この % で表現されるURLエンコード文字列です。
今回は、このURLエンコード文字列をWebalizerで対応する一つの方法について、簡単に解説してみます。
また、Webalizerを使うための設定例(apache,logrotate,cron,webalizer) での設定例を基本に解説します。
WebalizerでURLエンコード文字列に対応する方法
WebalizerでURLエンコード文字列に対応する一つの方法は、Webalizerでログ情報を集計する前に、URLエンコード文字列をデコードしてしまえば良いだけです。
この対処は、perlでの記述が多いのですが、ここではphpで記述してみます。
- phpでログファイルをURLエンコード文字列をデコードする。
以下のphpコードは、非常に簡単なphpコードですが、簡単に解説しておきます。
- 入力パラメータ(ディレクトリ)をチェック
- 入力パラメータがディレクトリかをチェック
- ディレクトリ配下の拡張子 .1.gz のファイルを検索
- gzipファイルをオープン
- gzipファイルから1行づつ読み込みURLデコードを実施
- gzipファイルへURLデコードした情報を書き込む
ここでは、/usr/local/bin/postlogrotate.php というファイル名で作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| <?php
// 入力パラメータ(ディレクトリ)をチェック
$dir='';
if(count($argv)>1){
$dir=$argv[1];
}
if(empty($dir)){
echo "empty!!\n";
exit;
}
// 入力パラメータがディレクトリか?
if (is_dir($dir)) {
// ディレクトリ配下の拡張子 .1.gz のファイルを検索
foreach (glob($dir."*.1.gz") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
$str_buff = '';
// gzipファイルをオープン
$handle = gzopen($filename, 'r');
if (!$handle) {
echo "Error\n";
continue;
}
while (!gzeof($handle)) {
// gzipファイルから1行づつ読み込みURLデコードを実施
$buffer = gzgets($handle, 4096);
$str_buff .= rawurldecode($buffer);
}
gzclose($handle);
if(!empty($str_buff)){
// gzipファイルへURLデコードした情報を書き込む
$handle = gzopen($filename,'w9');
if ($handle) {
gzwrite($handle, $str_buff);
gzclose($handle);
}
}
}
} else {
echo "not DIR\n";
}
?>
|
使い方は、以下のような感じです。
パラメータに対象となるログファイルがあるディレクトリを指定します。
$ php /usr/local/bin/postlogrotate.php /var/log/httpd/
|
- ログローテーションの設定ファイルに先のphpを実行するように設定する。
先のphpファイルをログローテーション実行後に起動するようにログローテーションの設定ファイル( /etc/logrotate.d/httpd ) を編集します。
/var/log/httpd/*.log {
daily
missingok
rotate 90
compress
ifempty
create 660 root wheel
sharedscripts
postrotate
/sbin/service httpd graceful
/usr/bin/php /usr/local/bin/postlogrotate.php /var/log/httpd/
endscript
}
|
postrotate – endscript 間に起動イメージを記述するだけです。ここに設定することでログローテーション実行後に実行されます。
php のパスは、which コマンドで確認してください。
$ which php
/usr/bin/php
$
|
Webalizerを使うための設定例(apache,logrotate,cron,webalizer) での設定例であれば、これだけです。意外と簡単でしょ。
案外、簡単だったでしょ。
でも、ちょっと無駄な面もあります。gzipで圧縮しているファイルを解凍して、再圧縮しているのは、ちょっと無駄です。
ここのやり方をする場合は、ログローテーションの設定で、圧縮するのは、無駄かもしれません。
色々とやり方はあると思いますので、一つのやり方として参考になればうれしく思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :