LoginSignup
0
0

More than 5 years have passed since last update.

phpをスクリプトとして利用して大容量のログデータを検索出力する

Last updated at Posted at 2015-12-08

むかし(2007年8月7日)作ったログデータ検索用phpスクリプト公開しておきます。

メリットとしては

  • GZファイルのままでも検索できる
  • 1行ずつ読み込んでヒットしたら書き出すのでメモリを使わない?
  • 複数キーワードで検索できる

以下をgzgrepor.phpなど適当なファイル名で保存して、
php gzgrepor.php [ファイル名] [キーワード1] ...
というように実行すると、キーワードでgrepした結果のファイルが作成されるものです。

キーワードは半角スペース区切りで複数指定できます。or検索ができるってところでしょうか。スペースも含むキーワードの場合はダブルコーテションで囲んで下さい。(windowsだけかも?)

このphpファイルをどこかに置いてパス通しておくと便利かもしれないけどまだ試したことない。

まだまだブラシュアップするところあると思いますのでアドバイスお待ちしております。
他にもnot検索させるのも作ったりしてます。

gzgrepor.php
<?php


    // 引数チェック
    if ($argc < 3) {
        print "引数が不正です。\n";
        exit;
    }


    // 解析対象ファイル名取得
    $filename = $argv[1];
//  $keyword = $argv[2];

    // 検索結果出力ファイル名
    $dfilename = preg_replace("/\.log\.gz$/","",$filename);
    $dfilename = $dfilename . "_" . $keyword . ".txt";

    //情報出力
    print "検索対象ファイル  :";
    print $filename . "\n";
    print "検索対象キーワード :";
    print $keyword  . "\n";
    print "検索結果出力ファイル:";
    print $dfilename . "\n";

    //gzファイルオープン
    $zh = gzopen($filename,"rb");
    if ($zh == false) {
        print "gzファイルのオープンに失敗しました。\n";
        exit;
    }

    // 出力ファイルオープン
    $fp = fopen($dfilename,"wb");
    if ($fp == false) {
        print "出力ファイルのオープンに失敗しました。\n";
        exit;
    }

    // 検索キーワード取得
    array_shift($argv);
    array_shift($argv);

    $cnt = 0;
    while (gzeof($zh) == false) {
        // 1行取得
        $line = "";
        $line = gzgets($zh);

        $flg = 0;
        foreach ($argv as $tmp) {
            if (strstr($line,$tmp) != false && $flg == 0) {
                fputs($fp,$line);
                $cnt = $cnt + 1;
                $flg = 1;
            }
        }


    }

    //出力ファイルクローズ
    fclose($fp);

    //gzファイルクローズ
    gzclose($zh);

    print "\n";
    print "該当データは" . $cnt . "件ありました。\n";
    print "\n";
    print "処理が完了しました。\n";
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0