ich ein preg_match_all Funktionen mit Muster haben:relativ einfache preg_match_all verursacht 502 Bad Gateway
preg_match_all(
'/\[(if) ([^\]]*)\]
((?:(?!\[if).|(?R))*?)
\[endif\]/sx',
$text,
$matches
);
Es ist ganz einfach Muster Ich denke, es sieht für eine Syntax [if condition] sometext [endif]
, aber es unterstützt auch einbetten ifs F. E. [if condition1] aa [if condition2] bb [endif] [endif]
. Ich habe s Schalter verwendet, um Zeilenumbrüche als Punkte zu behandeln (da ich möchte, dass es mehrzeilig funktioniert) und x zum leichteren Lesen (aber das Entfernen von x behebt das Problem nicht).
Es funktioniert gut für die meisten Eingabedaten, die ich habe, aber für einige spezifische Eingabe verursacht 502 Bad Gateway Fehler auf Nginx-Server ohne Fehler oder Ausnahmen in Protokollen, die. Ich benutze nginx + php-fpm (5.6.15-1 + deb.sury.org ~ trusty + 1), aber das gleiche passiert auf php7.
Hier wird verursacht 502 Bad Gateway-Fehler PHP-Code, den Sie leicht überprüfen können, sehr einfach, nur eine Variable und Regex.
Bitte, sicher sein, dass Sie einen Inhalt 1: 1 kopiert, mit allen Leerzeichen, Tabulatoren usw.
Die sehr seltsam ist, dass man fast jede einzelne Zeile entfernen oder sogar eine löschen Einrückung (beliebige wenige Leerzeichen an einem beliebigen Ort), damit es funktioniert.
Ich habe keine Ideen mehr, was hier falsch ist, konnte ich diese einzelne Datei erstellen, um mein Problem zu demonstrieren, aber habe keine Ideen, wie es zu beheben.
Ich kann es nicht auf eval.in reproduzieren: https://eval.in/577522 – jeroen
@jeroen Recht, überraschend, es funktioniert gut mit PHP, nur überprüft, läuft mit 'php test.php' und es funktioniert wie erwartet. Das Problem tritt nur auf, wenn die Datei über nginx mit php-fpm (nginx/1.8.0) geöffnet wird. – atay
Versuchen Sie ['\ [(if) \ s + ([^ \]] * +) \] ((?> ?! \ [(?: end)? if \ b). | (? R)) *) \ [endif \] '] (https://regex101.com/r/xA3iC8/1) oder sogar [' \ [(if) \ s + ([^ \]] * +) \] ((?> [^ [] ++ (?: \ [(?! (?: Ende)? if \ b) [^ [] *) * | (? R)) *) \ [endif \] '] (https://regex101.com/r/xA3iC8/2). –