Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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 ) 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 .
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
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 .
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
Seiten: 1