PHP7 und preg_replace() Problem

TTlong

Angesehenes Mitglied
Hallo Community,

ich bin leider nicht der PHP Guru und komme bei (m)einem Problem einfach nicht weiter. Die Funktion preg_replace() wird mit PHP7 nicht mehr vollständig unterstützt. Genauer geht es um:

preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
Leider weiß ich absolut nicht, wie ich meine bestehende Funktion so umschreiben kann/soll/muss, damit es weiterhin funktioniert.

private function parseFunctions() {

while( preg_match( "/" .$this->leftDelimiterF ."include file=\'(.*)\.(.*)\'"
.$this->rightDelimiterF ."/isUe", $this->template)){

$this->template = preg_replace("/" .$this->leftDelimiterF ."include file=\'(.*)\.(.*)\'".
$this->rightDelimiterF."/isUe", "file_get_contents(\$this->templateDir.'\\1'.'.'.'\\2')", $this->template);
}
}


Es ist eine einfache Template-Klasse, welche aber nicht aus meiner Feder stammt. Vielleicht kann mir jemand behilflich sein.

Danke und Gruß

TTlong

 
:D  Da war jemand wirklich faul, statt es sicher zu entwerfen wird einfach mit execute gearbeitet, wenn nun ein Designer Dir was böses will schreibt er in Template Schadcode, ich würde mir erstmal den Entwickler schnapen und ihm den Scheiss um die Ohren hauen. Mal davon abgesehen, dass das Ding ggf. auch stark auf die Performance-Bremse hauen könnte.

Aber wenn Du das in diesen Fall genau so behalten willst gehst Du bei und machst es wie folgt, du ersetzt preg_replace mit preg_replace_callback und nimmst das e aus /isUe weg am Ende des ersten Parameters.

Wenn ich es richtig verstanden habe, sollte es damit laufen, ich würde Dir aber raten etwas mehr Denkarbeit reinzulegen um diesen Part so abzuändern, so dass er nicht ggf. als Einfalltor ausgenutzt werden kann. Da ich aber nicht mit callbacks arbeite can es näturlich auch sein, das dies durch die Verwendung von der anderen Funktion nun abgefangen wird.

Vermutlich kannst Du auch bei preg_match das e aus /isUe entfernen, da für mich nicht ergründlich wofür es dort verwendet werden sollte.

 
Zurück
Oben