Ich verwende preg_replace_callback, um Parameter an bestimmte URLs in ausgehenden E-Mails anzuhängen.pcre.trackback limit php preg_replace_callback()
Der Prozess funktioniert, indem eine E-Mail-Vorlage aus einer Datenbank geladen auf, eine Liste der Benutzer aus der gleichen Datenbank ziehen, und dann Führen des E-Mail-Körper durch diese Funktion:
function add_user_login($body, $user_id, $user_hash) {
ini_set('pcre.backtrack_limit',1000000000);
$return_string = preg_replace_callback('@(https?://([-\w\.]+)+mydomain.com([^"]*))@', function ($matches) use ($user_id, $user_hash) {
if (strpos($matches[0], "?") === false) {
return $matches[0] . "?user_id=" . $user_id . "&user_hash=" . $user_hash;
} else {
return $matches[0] . "&user_id=" . $user_id . "&user_hash=" . $user_hash;
}
}, $body);
return $return_string;
}
Das Ziel ist, dass alles, was mit "www.mydomain.com" oder "mydomain.com" erhalten die GET-Parameter "user_id" und "user_hash", die an sie angehängt werden. Leider gibt es vielleicht bereits existierende GET-Parameter und andere Dinge, die mit diesen nicht-einheitlichen URLs passieren, daher war dies die beste Methode, die ich bisher gefunden habe, um dies zu tun.
Mein Problem ist, dass ich aus irgendeinem Grund zurücktrack_limit Fehler beim Testen bekam und meine backtrack_limit erhöhen musste. Das hat beim Testen funktioniert, aber es ist unglaublich langsam.
Hat jemand anderes etwas ähnliches getan? Ich habe versucht, meine Regex zu ändern, und ich denke, dass das Backtrack-Problem von meiner Wildcard-Verwendung herrührt, aber alle Änderungen, die ich vorgenommen habe, haben dazu geführt, dass es nicht funktioniert hat.
ersetzen Sie einfach '([- \ w \.] +) +' mit '- +' und versuchen Sie es erneut [\ w.]. –