کلاس تجزیه گر فایل لاگ سرور آپاچی

۶ سال پیش(به روز شده در ۶ سال پیش) پی اچ پی(PHP)(کلاس) ۰(غیر فعال)

کلاس زیر , فایل لاگ وب سرور آپاچی را تجزیه نموده و نتایج اطلاعات تجزیه شده هر بازدیدکننده را نمایش می دهد. این اطلاعات شامل آی پی , تاریخ ثبت , آدرس رفرنس یا مرجع , وضعیت و ... است. لاگ سرور آپاچی محلی برای ذخیره کلیه درخواست ها از طرف کاربران است. اما این فایل به راحتی قابل استفاده نیست و نیاز است تا اطلاعات غیر مفید را جداسازی و نتایج را دسته بندی نمود. این اطلاعات حلاجی شده در سایر نرم افزار و الگوریتمهای داده کاوی قابل استفاده است.

*. در بخش آخر لینک دانلود کلاس به همراه مثال وجود دارد.

/* 
+----------------------------------------------+ 
|                                              | 
|         PHP apache log parser class          | 
|                                              | 
+----------------------------------------------+ 
| Filename   : apache-log-parser.php           | 
| Created    : 21-Sep-05 23:28 GMT             | 
| Created By : Sam Clarke                      | 
| Email      : admin@free-webmaster-help.com   | 
| Version    : 1.0                             | 
|                                              | 
+----------------------------------------------+ 

LICENSE 

This program is free software; you can redistribute it and/or 
modify it under the terms of the GNU General Public License (GPL) 
as published by the Free Software Foundation; either version 2 
of the License, or (at your option) any later version. 

This program is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
GNU General Public License for more details. 

To read the license please visit http://www.gnu.org/copyleft/gpl.html 

*/ 

class apache_log_parser 
{ 

  var $bad_rows; // Number of bad rows 
  var $fp; // File pointer 

  function format_log_line($line) 
  { 
    preg_match("/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/", $line, $matches); // pattern to format the line 
    return $matches; 
  } 

  function format_line($line) 
  { 
    $logs = $this->format_log_line($line); // format the line 

    if (isset($logs[0])) // check that it formated OK 
    { 
      $formated_log = array(); // make an array to store the lin info in 
      $formated_log['ip'] = $logs[1]; 
      $formated_log['identity'] = $logs[2]; 
      $formated_log['user'] = $logs[2]; 
      $formated_log['date'] = $logs[4]; 
      $formated_log['time'] = $logs[5]; 
      $formated_log['timezone'] = $logs[6]; 
      $formated_log['method'] = $logs[7]; 
      $formated_log['path'] = $logs[8]; 
      $formated_log['protocal'] = $logs[9]; 
      $formated_log['status'] = $logs[10]; 
      $formated_log['bytes'] = $logs[11]; 
      $formated_log['referer'] = $logs[12]; 
      $formated_log['agent'] = $logs[13]; 
      return $formated_log; // return the array of info 
    } 
    else 
    { 
      $this->badRows++; // if the row is not in the right format add it to the bad rows 
      return false; 
    } 
  } 

  function open_log_file($file_name) 
  { 
    $this->fp = fopen($file_name, 'r'); // open the file 
    if (!$this->fp) 
    { 
      return false; // return false on fail 
    } 
    return true; // return true on sucsess 
  } 

  function close_log_file() 
  { 
    return fclose($this->fp); // close the file 
  } 

  // gets a line from the log file 
  function get_line() 
  { 
    if (feof($this->fp)) 
    { 
       return false; 
    } 
    $bits=''; 
    // I find for loops much much faster 
    for (;!feof($this->fp) && $bits != "\n";) 
    { 
      $bits .= fread($this->fp, 1); 
    } 
    return rtrim($bits, "\n"); 
  } 
} 

//example.log
/*
172.0.0.1 - - [21/Sep/2005:23:06:37 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:38 +0100] "GET / HTTP/1.1" 200 1647 "http://www.example.com/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:38 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:38 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:39 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:40 +0100] "GET / HTTP/1.1" 200 12372 "http://www.example.com/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:40 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:41 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
172.0.0.1 - - [21/Sep/2005:23:06:41 +0100] "GET / HTTP/1.1" 404 - "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b3) Gecko/20050712 Firefox/1.0+"
*/
$apache_log_parser = new apache_log_parser(); // Create an apache log parser 

if ($apache_log_parser->open_log_file('example.log')) // Make sure it opens the log file 
{ 
  while ($line = $apache_log_parser->get_line()) { // while it can get a line 
    $parsed_line = $apache_log_parser->format_line($line); // format the line 
    print_r($parsed_line); // print out the array 
  } 
  $apache_log_parser->close_log_file(); // close the log file 
} 
else 
{ 
  echo 'Sorry cannot open log file.'; 
} 

منبع: http://www.phpclasses.org/browse/file/10984.html

برچسبها

هیچ برچسبی موجود نیست.

فایلهای پیوست شده

  • دانلود  ۲.۵۷ کیلو بایت (apache_log_parser.zip) - کلاس تجزیه گر فایل لاگ سرور آپاچی
  • صفحات پیشنهادی

    کلاس MySQL برای PHP جهت اتصال به پایگاه داده...

    کلاس ساده زیر توسط ما طراحی شده که البته از PDO استفاده نشده است اما براحتی قابل ویرایش است. در ضمن کلاس زیر کاملا تست شده و آماده بکار است......


    تبدیل متن طولانی فارسی به تصویر با رعایت چهارچوب و اعمال فونت دلخواه در php...

    در یکی از پروژه ها نیاز داشتیم تا متن فارسی به عکس تبدیل شود. متاسفانه منابع کمی در این مورد هستند و اینکه اکثر این منابع توانایی تبدیل یک متن طولانی به عکس آن هم در یک چهار چوب را ندارند. و مثال های ...

    ذخیره کردن متغیرهای کلاس به فرمت متن(گسترش توابع unserialize و serialize)...

    کلاس پایه ای که قصد معرفی داریم بر پایه دو تابع unserialize و serialize توسعه یافته شده است. همانطور که می دانید وظایف این توابع تبدیل متغیرها به فرمت متن جهت ذخیره سازی آنها است تا بتوان در زمان مناس...

    پروتکل SOAP در php(نحوه ارسال و درخواست در این پروتکل)...

    "با استفاده از پروتکل دسترسی آسان به اشیاء یا سُوپ (Simple Object Access Protocol - SOAP) می‌توان به ارسال و تبادل پیامهایی از جنس اکس‌ام‌ال بر روی شبکه‌های رایانه‌ای مبادرت کرد". ما قصد توضیح در مورد...