PHP: Hat preg_match ein Problem mit Text über 255 Zeichen?

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.

Ähnliche Beiträge:

Über Markus Zierhut

Life Is What You Make It!
Dieser Beitrag wurde unter PHP abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Kommentare zu PHP: Hat preg_match ein Problem mit Text über 255 Zeichen?

  1. MP Jim sagt:

    Jetzt ohne irgend was hilfreiches sagen zu können,
    aber hast dus bei php(.net) als Bug gemeldet ?
    Die können dann vl auch mehr dazu sagen …

  2. Thomas Bartmann sagt:

    Liegts evtl. an den Variablen: http://php.net/manual/de/pcre.configuration.php ? Könntest du mal testweise erhöhen…

  3. Habe ich ehrlich gesagt bisher noch nicht – werde mir das Problem aber nochmals anschauen und dann ggf. noch erledigen.

  4. Danke für den Tipp – werde ich mir auch mal anschauen und versuchen, das darüber zu lösen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.