pcre.backtrack_limit

Diskussionen zur Smarty-Template-Engine
Locked
hlf

pcre.backtrack_limit

Post by hlf »

Diesen Wert in der Servereinstellung bzw. PHP Einstellung hat es in sich und ihn gibt es erstb ab PHP 5.2 .

Der Standardwert ist 100.000, was nichts weiter bedeutet, da alle PHP preg_XXXXX Funktionen dieses Limit einsetzen.

Wird das Limit überschritten ergibt sich ein Abpfiff und daraus können sich ungeahnte weitere Dinge entwickeln.

Das aber wird den normalen Nutzer nicht treffen.
Es gibt aber Kandidaten, die haben den Feldtyp von den Inhaltstabellen geändert um sehr lange Texte verwenden zu können , die könnten in's Bein gekniffen werden.

Wie hoch ist aber denn tatsächliche Wert ?

Das kann man damit testen:

Code: Select all

<?php
echo (int)ini_get( 'pcre.backtrack_limit' );
?>
Welche Folgen hat es praktisch ?

preg_XXXX Funktionen werden an vielen Stellen eingesetzt, ganz besonders aber Smarty.
Smarty schlägt da mit voller Wucht zu, da die Inhalte nun gebündelt auftreten.

Hat jemand also einen Gesamtinhalt bestehend aus allen HTML und sonstigen Inhalten von mehr als 100000 Bytes, dann verarbeitet Smarty den Inhalt und setzt preg_XXX Funktionen ein und erzeugt einen Abpfiff.

Bei sich rekursiv aufrufenden Funktionen kann das sogar noch erheblich schneller gehen, d.h. mit erheblich geringeren Volumen.

Hat man ungeklärte Abbrüche dann

1. den Test ausführen
2. den Wert erhöhen

Der Wert in der PHP.INI erhöht, wer das nicht kann, darf es mit  einem Eintrag z.B. als erste Zeile in der index.php versuchen:

ini_set('pcre.backtrack_limit', 1000000);

wobei zu empfehlen ist, den Wert nicht gleich auf 1 Mio zu setzen, sondern moderat anzuheben um den Erfolg zu testen.

Wer ini_set nicht einsetzen kann, dem bleibt nur der Weg den Inhalt einer dicken Seite auf verschiedene Unterseiten zu verteilen.

Keine Panik - den Normalanwender wird es kaum treffen, es geht hier um die speziellen Anwender.
cyberman

Re: pcre.backtrack_limit

Post by cyberman »

Guter Tipp - ein Grund mehr, preg_xxx nur sparsam einzusetzen und anstatt dessen andere (teilweise performantere) Funktionen zu verwenden.
User avatar
jeff1980
Forum Members
Forum Members
Posts: 210
Joined: Mon Apr 30, 2007 1:46 pm
Location: Dortmund

Re: pcre.backtrack_limit

Post by jeff1980 »

Hallo,

hänge mich mal hier mit rein - wir haben zwar keine Abbrüche, aber in letzter Zeit läuft immer wieder der Speicher voll und bringt den kompletten VServer von uns zum Stillstand.
Bei uns laufen einige Installationen auf einem Virtual Server Managed L bei Hosteurope. Eine davon ist eine Gedichte-Seite (hab ich hier schon öfter erwähnt). Diese hat nicht nur viele Texte sondern teilweise auch recht lange Texte, weshalb ich die Größe des Content-Feldes in MySQL von "text" auf "longtext" gesetzt habe. Kann das Vollaufen des Speichers auch damit zusammenhängen? Bei uns ist nämlich auch der Standardwert von 100000 gesetzt.

Jan
hlf

Re: pcre.backtrack_limit

Post by hlf »

Kann das Vollaufen des Speichers auch damit zusammenhängen?
Das kann durchaus sein. Nun habe ich selbst keine solchen dicken Inhalte, wenn ich aber im Test mal künstlich einen solchen erzeuge erfolgt absemmeln.

Kann man ja leicht probieren einfach mal erhöhen.
Locked

Return to “Smarty-Tipps und -Tricks”