Bei einer Auswertung der Apache-Logfiles für www.voelkner.de und www.smdv.de für November und Dezember 2009 bin ich auf ein kleines Problem (oder nennen wir es Phänomen) gestoßen:
Eine Zeile wird eingelesen und anschließend in die einzelnen Bestandteile aufgesplittet – mithilfe von regulärer Ausdrücke und preg_match:
preg_match( ‚/(.*) (.*) (.*) (.*) \[(.*)\] „(.*)“ (.*) (.*) „(.*)“ „(.*)“/i‘, $line, $matches);
So weit – so gut: Das klappt hervorragend, nur leider nicht mehr bei Zeilen, die mehr als ca. 255 Zeichen (ich glaub es waren ca. 260 oder so) enthalten. Nachdem die Suche nach der Ursache bzw. deren Behebung kein Ergebnis hervorbrachte, tat es folgender Workaround:
$line1 = trim( substr( $line, 0, strpos( $line, ‚]‘ ) + 1 ) );
$line2 = trim( substr( $line, strpos( $line, ‚]‘ ) + 1 ) );
preg_match( ‚/(.*) (.*) (.*) (.*) \[(.*)\]/i‘, $line1, $matches1 );
preg_match( ‚/“(.*)“ (.*) (.*) „(.*)“ „(.*)“/i‘, $line2, $matches2 );
unset( $matches[ 0 ] );
unset( $matches[ 0 ] );
$matches = array_merge( $matches1, $matches2 );
Das ist zwar leider etwas langsamer, dafür funktioniert es aber (zuverlässig).
Wisst ihr vielleicht, wieso dies so ist? Bin über Aufklärung dankbar.
4 Antworten zu PHP: Hat preg_match ein Problem mit Text über 255 Zeichen?