Advertisement
Guest User

Access Log Parser

a guest
Feb 20th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.50 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Access Log Parser
  4.  */
  5. $handle = fopen( 'access.log', 'r' );
  6.  
  7. function display_column_report( $values, $total ) {
  8.     foreach ( $values as $key => $quantity ) {
  9.         $percent = round( 100 * $quantity / $total );
  10.         echo "- $quantity ($percent%): $key\n";
  11.     }
  12.  
  13.     echo "\n";
  14. }
  15.  
  16. function increment_key_in_array( $array, $key ) {
  17.     if ( ! isset( $array[ $key ] ) ) {
  18.         $array[ $key ] = 0;
  19.     }
  20.  
  21.     $array[ $key ]++;
  22.  
  23.     return $array;
  24. }
  25.  
  26. $line_quantity = 0;
  27. $codes = $files = $referrers = $user_agents = [];
  28.  
  29. while ( $line = fgetcsv( $handle, 0, ' ' ) ) {
  30.     $line_quantity++;
  31.  
  32.     $codes = increment_key_in_array( $codes, $line[6] );
  33.  
  34.     $file  = preg_replace( '#^(?:POST|GET)\s([^\s]+).*#', '$1', $line[5] );
  35.     $files = increment_key_in_array( $files, $file );
  36.  
  37.     $referrer  = in_array( $line[8], [ ' ', '-' ] ) ? 'Unknown' : $line[8];
  38.     $referrers = increment_key_in_array( $referrers, $referrer );
  39.  
  40.     $user_agent  = in_array( $line[9], [ ' ', '-' ] ) ? 'Unknown' : $line[9];
  41.     $user_agents = increment_key_in_array( $user_agents, $user_agent );
  42. }
  43.  
  44. echo "####### LOG REPORT #######\n\n";
  45.  
  46. echo "Line quantity: $line_quantity\n\n";
  47.  
  48. echo "HTTP Codes:\n";
  49. display_column_report( $codes, $line_quantity );
  50.  
  51. echo "Files:\n";
  52. arsort( $files );
  53. display_column_report( $files, $line_quantity );
  54.  
  55. echo "Referrers:\n";
  56. arsort( $referrers );
  57. display_column_report( $referrers, $line_quantity );
  58.  
  59. echo "User Agents:\n";
  60. arsort( $user_agents );
  61. display_column_report( $user_agents, $line_quantity );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement