Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 17. Februar 2015 23:01

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

CMSMS & PHP 5.5 - preg_replace(): The /e modifier is deprecated

Aus gegebenem Anlass (einer meiner Kunden wink) möchte ich kurz auf dieses Thema hinweisen.

Grundsätzlich harmoniert CMSMS in der aktuellen Version prima mit PHP 5.5. Jedoch wird in CMSMS stellenweise noch mittlerweile veraltete Software aus anderen Open-Source-Projekten eingesetzt, was unter PHP 5.5 zu folgender Fehlermeldung (sofern nicht unterdrückt - siehe hier Pkt. 6) führen kann:

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead …

"deprecated" heisst so viel wie veraltet bzw. nicht mehr länger unterstützt, und ist häufig die Vorstufe zu "in der nächsten PHP-Version nicht mehr vorhanden".

Auslöser dieser Fehlermeldung sind können unter anderem die Dateien html_entity_decode_php4.php und html_entity_decode_utf8.php sein. Darin wird die PHP-Funktion preg_replace() in Verbindung mit dem Parameter /e aufgerufen.

Der Parameter /e steht hier für eval; das heisst, dass ein BELIEBIGER (!) PHP-Befehl (so im zu ersetzenden Teil vorhanden) zunächst ausgeführt wird, bevor die replace Funktion zur Anwendung kommt (ja, den Sicherheitsfreaks unter euch dürften sich dabei tendenziell die Nackenhaare aufstellen).

Ich habe jetzt nicht 100%ig im Blick, an welchen Stellen die Funktionen aus diesen Dateien eingesetzt werden, jedoch ist dieses Sicherheitsrisiko der Grund dafür, dass der Parameter /e für preg_replace() ab PHP 5.5 auf deprecated gesetzt ist. Und wie der Fehlermeldung unschwer zu entnehmen, soll diese Funktion durch preg_replace_callback() ersetzt werden.

Die Lösung dieses Problems ist relativ einfach - auf die Version 1.11.12 aktualisieren wink.

Beitrag geändert von Andynium (21. Februar 2015 18:36)

Offline

#2 17. Februar 2015 23:04

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: CMSMS & PHP 5.5 - preg_replace(): The /e modifier is deprecated

cyberman schrieb:

Ich habe jetzt nicht 100%ig im Blick, an welchen Stellen die Funktionen aus diesen Dateien eingesetzt werden

Auslöser dieses Fehlers war bei meinem Kunden übrigens das Modul "CGExtensions" ...

Offline

#3 17. Februar 2015 08:30

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.436

Re: CMSMS & PHP 5.5 - preg_replace(): The /e modifier is deprecated

Sind noch eine ganze Menge mehr Module, die diese Funktionen nutzen.
(Search, News, FrontEndUsers, Gallery ...)


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#4 21. Februar 2015 18:46

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: CMSMS & PHP 5.5 - preg_replace(): The /e modifier is deprecated

Danke für den Hinweis, hab den Primär-Post angepasst.

Und falls ihr mal auf dieses Problem stoßt ... für eine Anpassung ist kein großer Voodoo erforderlich wink.

Hier mal ein Beispiel für die Transformation des Codes:

Vorher:

	$return_text = preg_replace('~&#x([0-9a-f]+);~ei', 
					     'code_to_utf8(hexdec("\\1"))', 
					     $return_text);
	$return_text = preg_replace('~&#([0-9]+);~e', 
					     'code_to_utf8("\\1")', 
					     $return_text);

Nachher:

	$return_text = preg_replace_callback('~&#x([0-9a-f]+);~i',
					     function($matches) {
					       __code_to_utf8($matches[1]);
					     }, $return_text);
	$return_text = preg_replace_callback('~&#([0-9]+);~',
					     function($matches) {
					       __code_to_utf8($matches[1]);
					     }, $return_text);

PS: Das ist die Änderung in der 1.11.13, also nicht verwirren lassen. Die Funktion code_to_utf8 ist hier im Beispiel zwar in __code_to_utf8 umbenannt worden, aber für eine erfolgreiche Anpassung keine zwingende Voraussetzung.

Beitrag geändert von Andynium (22. September 2015 19:53)

Offline