hallo alle,
ich habe ein problem beim parsen von .log files: Ich habe einen Parser geschrieben, der Dateien mit kleiner Größe problemlos und wunschgemäß parst - sobald ich aber ein .log nehme, das ordentlich groß ist (ca. 11MB) fährt das Script mit Invalid "argument supplied for foreach() ..." vor die Wand.
Kann es sein, dass diese Fehlermeldung tatsächlich an der Dateigröße festzumachen ist, denn wenn ich dieselbe datei in 8 Teile splitte, kann jedes Teil geparst werden.
Das ginge natürlich auch, aber ich hätte schon gerne, daß der gute Parser auch mit grooßen Filed funktioniert.
Bin php Neuling, deshalb wären Tips und Hinweise sehr willkommen.
Das .log File wird über ein HTML Formular übergeben und landet in $input - außerdem gibt es 4 Array mit Zeichenfolgen, die ignoriert werden sollen (ignorepatterns) - w.g., bei kleinen Dateien kein problem, bei großen, wirft das Script o.g. Fehler. Ein var_dump($input) gibt mir ein Array vor Dateien, mit denen es geht und einen bool(false) bei denen es nicht geht.
Jemand eine Idee ?
Oder gibt es vielleicht eine geschmeidigere Methode ?
Danke im vorraus - Grüße!
k.
ich habe ein problem beim parsen von .log files: Ich habe einen Parser geschrieben, der Dateien mit kleiner Größe problemlos und wunschgemäß parst - sobald ich aber ein .log nehme, das ordentlich groß ist (ca. 11MB) fährt das Script mit Invalid "argument supplied for foreach() ..." vor die Wand.
Kann es sein, dass diese Fehlermeldung tatsächlich an der Dateigröße festzumachen ist, denn wenn ich dieselbe datei in 8 Teile splitte, kann jedes Teil geparst werden.
Das ginge natürlich auch, aber ich hätte schon gerne, daß der gute Parser auch mit grooßen Filed funktioniert.
Bin php Neuling, deshalb wären Tips und Hinweise sehr willkommen.
PHP-Code:
$input = file ($_FILES['path']['tmp_name']);
# Run through the file and extract the infos needed
foreach ($input as $line) {
$ignore = false;
foreach ($ignorepatterns as $pattern) {
if (preg_match ($pattern, $line)) {
$ignore = true;
break;
}
}
if (! $ignore) {
$exceptiondata[] = $line;
}
}
Jemand eine Idee ?
Oder gibt es vielleicht eine geschmeidigere Methode ?
Danke im vorraus - Grüße!
k.
Kommentar