2017-10-28 2 views
-1

Ich habe einen Ordner Userlog, die Protokolldatei jedes Benutzers separat enthält. Jetzt möchte ich die gesamten Protokolldateien für einen bestimmten Text durchsuchen und die letzten 5 Einträge für diesen Text abrufen. Auf jeder Protokolldatei Datum und Uhrzeit des Zeileneintrags ist wieHolen Sie sich den letzten 5 Datensatz aus den Protokolldateien

verfügbar
2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 

Code:

function getUserLog($path_to_check, $search) 
{ 
    $result = array(); 

    foreach (glob($path_to_check . '*.txt') as $filename) { 

      foreach (file($filename) as $lineNumber => $line) { 

       if (strpos($line, $search) !== false) { 

        $fil_name= basename($filename,".txt"); 

        $result[] = $line."--".$fil_name; 
       } 
      } 
    } 

    return $result; 

} 
$path_to_check = "userlogs/"; 

if (is_dir($path_to_check)) { 
    $user_log = getUserLog($path_to_check,$cino); 
} 
+1

Teilen Code .. – pirs

Antwort

1

Was Sie tun können, den Namen der Datei als Array Schlüssel speichern (solange die Dateinamen sind gültig array Schlüssel) und fügen Sie dann die übereinstimmenden Zeilen (Ignorieren der Zeilenumbruch) zu diesem Array hinzu. Schließlich fügen Sie das Array hinzu, das den Dateinamen als Schlüssel und Ihre übereinstimmenden Zeilen zu Ihrem $result enthält.

Dann könnten Sie Schleife die $user_log, und nehmen Sie die letzten 5 von der $matchedLinesarray_slice mit und fügen hinzu, dass in ein neues Array $resultSliced.

Zum Beispiel:

function getUserLog($path_to_check, $search) 
{ 
    $result = array(); 
    foreach (glob($path_to_check . '*.txt') as $filename) { 
     foreach (file($filename, FILE_IGNORE_NEW_LINES) as $lineNumber => $line) { 
      if (strpos($line, $search) !== false) { 
       $fil_name = basename($filename, ".txt"); 
       $result[$fil_name][] = $line; 
      } 
     } 
    } 
    return $result; 
} 

$resultSliced = []; 
$path_to_check = "userlogs/"; 
if (is_dir($path_to_check)) { 
    $user_log = getUserLog($path_to_check, $cino); 
    foreach ($user_log as$fileName => $matchedLines) { 
     $resultSliced[$fileName] = array_slice($matchedLines, -5, 5, true); 
    } 
} 

Dann wird Ihr Ergebnis wäre zum Beispiel eine Struktur wie haben:

Array 
(
    [filename1] => Array 
     (
      [0] => 2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 etc 
     ) 

    [filename2] => Array 
     (
      [0] => 2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 etc 
      [1] => 2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 etc 
      [2] => 2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 etc 
      [3] => 2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 etc 
      [4] => 2017-10-05 15:43:32 pm--abcd--192.9.200.232--183--Select Date--NA--NA--Edit-05-10-2017 etc 
Verwandte Themen