Geshi und PHP 8

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
marvo
Posts: 3
Joined: Wed Jun 25, 2008 12:22 pm
Contact:

Geshi und PHP 8

Post by marvo »

Nach dem Umstieg auf PHP 8 kam es auf Seiten mit formatierten Codeblöcken zur Fehlermeldung
„Warning: Undefined array key "properties" in /…/plugins/serendipity_event_geshi/serendipity_event_geshi.php on line 153“
gefolgt von
„Warning: Trying to access array offset on value of type null in /…/plugins/serendipity_event_geshi/serendipity_event_geshi.php on line 153“.

Anscheinend kommt PHP 8 in Zeile 153 nicht mit dem Ausdruck $eventData['properties']['ep_disable_markup_' . $this->instance] zurecht. Wenn es den Schlüssel „properties“ nicht gibt, schlägt der Zugriff auf den Folgewert natürlich fehl.

Ich habe das jetzt soweit zurechtgefrickelt, dass ich diesen Ausdruck durch eine neue Variable „$edpdm“ ersetzt habe, der ich vor der Fallunterscheidung, in der der Fehler auftritt, den Wert null zuweise, wenn der Schlüssel nicht existiert:
$edpdm = $eventData['properties']['ep_disable_markup_' . $this->instance] ?? null;

Immerhin funktioniert das Plugin jetzt wieder, zeigt Code ordentlich syntaxgehighlightet an und wirft keine Fehler mehr aus. Da ich aber alles andere als ein PHP-Experte bin und nicht wirklich verstanden habe, was in der Zeile eigentlich geschieht, würde ich mich sehr freuen, wenn sich jemand, der davon mehr Ahnung hat, einmal des Plugins annehmen könnte.
onli
Regular
Posts: 2828
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Geshi und PHP 8

Post by onli »

Hey marvo,
Da kommen zwei Sachen zusammen: PHP 8 hat vielen vorher validen Code invalid gemacht, er wirft jetzt Warnungen. Diese Warnungen versteckt Serendipity, aber das funktioniert nicht bei jedem Hoster.

Serendipity versteckt die Warnungen, wenn serendipity['production'] auf true gesetzt ist. Das passiert recht zu Beginn in der serendipity_config.inc.php, wenn Serendipity eine stabile Versionsnummer hat. Hast du die 2.4.0 installiert?

Momentane Theorie für wie dein Hoster bzw Server da das blockieren kann ist

Code: Select all

display_errors=on
in der php.ini. Die Konfiguration sollte für Produktivsysteme (=alles wo Fehlermeldungen stören) auf "off" stehen.

Was du machen kannst:

In der serendipity_config.inc.php, editiere Zeile 63ff von

Code: Select all

if ($serendipity['production']) {
    error_reporting(E_ALL & ~(E_WARNING|E_NOTICE|E_STRICT|E_DEPRECATED));
} else {
    error_reporting(E_ALL & ~(E_NOTICE|E_STRICT|E_DEPRECATED));
}
zu

Code: Select all

if ($serendipity['production']) {
    error_reporting(E_ALL & ~(E_WARNING|E_NOTICE|E_STRICT|E_DEPRECATED));
    @ini_set('display_errors', 'off');
} else {
    error_reporting(E_ALL & ~(E_NOTICE|E_STRICT|E_DEPRECATED));
}
Wäre auch wirklich super wenn du das bei dir testen könntest (ohne deinen vorherigen Fix), dann können wir das für die nächste Version vielleicht generell ausrollen.
marvo
Posts: 3
Joined: Wed Jun 25, 2008 12:22 pm
Contact:

Re: Geshi und PHP 8

Post by marvo »

Mit der ini_set-Zeile läuft alles wie es soll. Herzlichen Dank!

Ionos setzt diese Einstellung in den Shared-Hosting-Paketen tatsächlich erst ab PHP 8.1 standardmäßig auf off. Bis PHP 8.0 ist error_reporting immer angeschaltet.

Beste Grüße
Martin
onli
Regular
Posts: 2828
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Geshi und PHP 8

Post by onli »

Danke Martin. Habs direkt gepusht, https://github.com/s9y/Serendipity/comm ... 66504a250b, hoffentlich hilft es in der nächsten Version den anderen betroffenen :)
Post Reply