Problem mit PHP 8.1.1

A place to report and discuss bugs - please mention CMSimple-version, server, platform and browser version
frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Problem mit PHP 8.1.1

Post by frase » Fri Jun 24, 2022 8:14 am

Ich habe XH 1.7.5 mit PHP 8.1.1 installiert.
Die Korrekturen von hier sind eingearbeitet.
Neuerdings taucht aber im Adminmodus in der Vorschau folgende Debug-Meldung auf:
Debug-Mode wrote:DEPRECATED: preg_replace_callback(): Passing null to parameter #3 ($subject) of type array|string is deprecated
... \cmsimple\functions.php:242
Was könnte da los sein?

Vielleicht wichtig dazu:
In der userfuncs.php habe ich zwei Funktionen für vor-zurück die von hier stammen:
viewtopic.php?f=16&t=9400

EDIT:
Diese Funktionen sind nicht "die Schuldigen". Auch nach kompletter Entfernung bleibt die Meldung.

olape
Posts: 2713
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Problem mit PHP 8.1.1

Post by olape » Fri Jun 24, 2022 7:23 pm

frase wrote:
Fri Jun 24, 2022 8:14 am
Ich habe XH 1.7.5 mit PHP 8.1.1 installiert.
Die Korrekturen von hier sind eingearbeitet.
Neuerdings taucht aber im Adminmodus in der Vorschau folgende Debug-Meldung auf:
Debug-Mode wrote:DEPRECATED: preg_replace_callback(): Passing null to parameter #3 ($subject) of type array|string is deprecated
... \cmsimple\functions.php:242
Was könnte da los sein?
Hm, ich hatte heute mal kurz die 1.7.5 unter PHP 8.1.6. getestet, allerdings noch ohne die bereits bekannten PHP8-Probleme zu beseitigen. Das muss ich erst mal machen. Bisher habe ich aber die von dir beschriebene Meldungen nicht dabei gehabt.
Gruß Olaf, Plugins for CMSimple_XH

Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Problem mit PHP 8.1.1

Post by frase » Fri Jun 24, 2022 7:42 pm

Ja, ich hatte das vorher auch noch nicht.
Könnte denn irgendein Plugin beteiligt sein?

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Problem mit PHP 8.1.1

Post by cmb » Sat Jun 25, 2022 11:02 am

frase wrote:
Fri Jun 24, 2022 7:42 pm
Könnte denn irgendein Plugin beteiligt sein?
Ja, durchaus möglich. Das Problem ist, dass hier das Ergebnis von eval('return ' . $___expression . ';') an preg_replace_callback() übergeben wird, und das kann NULL sein, aber ab PHP 8.1.0 darf man das nicht mehr tun. Als Quick-Fix vielleicht einfach diese Zeile ersetzen durch:

Code: Select all

eval('return ' . $___expression . ';') ?: ''
PS: wir sollten das trotzdem genauer untersuchen. Es sollte zunächst geklärt werden, ob hier eine Funktion aufgerufen wurde, die aus welchen Gründen auch immer NULL zurückgab. Falls das so ist, dann sollte eigentlich die Funktion gefixt werden (statt NULL eben eine leere Zeichenkette liefern). Da es vermutlich einige solcher Plugin-Funktionen gibt, brauchen wir natürlich trotzdem einen Workaround um das abzufangen. Aber vielleicht stimmt auch was mit dem eval('return ' . $___expression . ';') nicht.
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Problem mit PHP 8.1.1

Post by frase » Sat Jun 25, 2022 11:16 am

cmb wrote:
Sat Jun 25, 2022 11:02 am
Als Quick-Fix vielleicht einfach diese Zeile ersetzen durch:
Auf den ersten Blick hat das tatsächlich geholfen.
Keine Meldung mehr.
Ob das noch irgendwelche anderen Folgen hat, kann ich (noch) nicht beurteilen.
cmb wrote:
Sat Jun 25, 2022 11:02 am
PS: wir sollten das trotzdem genauer untersuchen. Es sollte zunächst geklärt werden, ob hier eine Funktion aufgerufen wurde, die aus welchen Gründen auch immer NULL zurückgab. Falls das so ist, dann sollte eigentlich die Funktion gefixt werden (statt NULL eben eine leere Zeichenkette liefern). Da es vermutlich einige solcher Plugin-Funktionen gibt, brauchen wir natürlich trotzdem einen Workaround um das abzufangen. Aber vielleicht stimmt auch was mit dem eval('return ' . $___expression . ';') nicht.
Dazu kann ich leider nichts sagen.
Ob hier ein Plugin im Spiel ist, hatte ich versucht zu prüfen. In dieser Installation sind allerdings mächtig viele Plugins aktiv und wenn ich einige davon deaktiviere, funktioniert die ganze Site nicht mehr. :(
Deshalb hier an dieser Stelle die Frage.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Problem mit PHP 8.1.1

Post by cmb » Sat Jun 25, 2022 1:23 pm

frase wrote:
Sat Jun 25, 2022 11:16 am
Ob das noch irgendwelche anderen Folgen hat, kann ich (noch) nicht beurteilen.
Das sollte eigentlich keine wirklich unerwünschten Nebenwirkungen haben. Allerdings ist mir nun aufgefallen, dass eine Funktion, die ein Array zurückgibt, auch nicht korrekt behandelt wird. Da kommt es nämlich zu:
WARNING: Array to string conversion
Und im Content-Bereich steht dann "Array". Und wenn die Pluginfunktion etwas gänzlich unerwartetes zurückgibt (z.B. ein Objekt), dann kommt es zu einem fatalen Fehler. Na ja, halbwegs sinnvoll sollte sich eine Pluginfunktion schon verhalten; ich denke wir müssen hier nicht alles berücksichtigen.

Trotzdem ist zu überlegen, ob wir nicht einfach zu String casten, was vielleicht die brauchbarsten Fehlermeldungen erzeugt:

Code: Select all

(string) eval('return ' . $___expression . ';')
Oder wir erwarten von Autoren von Pluginfunktionen, dass diese keinen Unsinn zurückgeben, und berücksichtigen nur NULL explizit (aus Gründen der Kompatibilität mit bestehenden Plugins):

Code: Select all

eval('return ' . $___expression . ';') ?? ''
Das erfordert aber PHP ≥ 7.0.0.
frase wrote:
Sat Jun 25, 2022 11:16 am
Ob hier ein Plugin im Spiel ist, hatte ich versucht zu prüfen. In dieser Installation sind allerdings mächtig viele Plugins aktiv und wenn ich einige davon deaktiviere, funktioniert die ganze Site nicht mehr. :(
Wenn ich es recht bedenke, dann ist es nicht unwahrscheinlich, dass eine Pluginfunktion null zurückgegeben hatte. Ich selbst habe das, glaube ich, in einigen Plugins so gemacht, z.B. wenn die Pluginfunktion nichts sinnvolles ausgeben kann. Ist natürlich nicht wirklich korrekt, eben weil eine Pluginfunktion immer eine Zeichenkette liefern sollte (die eben auch leer sein kann). Tipp für Pluginentwickler: nutzt statische Analysetools und Typdeklarationen. Dann fällt sowas auf, bevor man das Plugin überhaupt testet.
Christoph M. Becker – Plugins for CMSimple_XH

jadefusion
Posts: 8
Joined: Tue Oct 26, 2010 8:38 am
Location: Adelaide

Re: Problem mit PHP 8.1.1

Post by jadefusion » Mon Jul 11, 2022 6:19 am

Testing cmsimple_XH 1.75 with PHP 8.1.5 and the first php 8.1.* fix from github applied.
I embedded a script placed in the userfuncs.php file within a page. The script did not function as expected and did not display within the page. Instead it brought up a new blank page with the script result displayed. The above php error message was also shown.

On removing the script from userfuncs.php the error message was no longer displayed.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Problem mit PHP 8.1.1

Post by cmb » Mon Jul 11, 2022 11:41 am

jadefusion wrote:
Mon Jul 11, 2022 6:19 am
I embedded a script placed in the userfuncs.php file within a page. The script did not function as expected and did not display within the page. Instead it brought up a new blank page with the script result displayed. The above php error message was also shown.
Did you echo the output, instead of returning it from the function? E.g.

Code: Select all

// bad example
function my_function() {
    echo "hello world";
}

// good example
function my_function() {
    return "hello world";
}
Christoph M. Becker – Plugins for CMSimple_XH

lck
Posts: 2955
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Problem mit PHP 8.1.1

Post by lck » Mon Jul 11, 2022 12:04 pm

frase wrote:
Fri Jun 24, 2022 8:14 am
Ich habe XH 1.7.5 mit PHP 8.1.1 installiert.
Die Korrekturen von hier sind eingearbeitet.
Meiner Meinung ist hier die Korrektur/der Fix nicht ganz richtig, es taucht immer noch eine Meldung auf.
PluginConfig.php, Zeile 100

Code: Select all

    #[ReturnTypeWillChange]
sollte IMO auch lauten

Code: Select all

    #[\ReturnTypeWillChange]

*EDIT
Bereits korrigiert: viewtopic.php?t=18326#p83074
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

jadefusion
Posts: 8
Joined: Tue Oct 26, 2010 8:38 am
Location: Adelaide

Re: Problem mit PHP 8.1.1

Post by jadefusion » Tue Jul 12, 2022 8:51 am

cmb wrote:
Mon Jul 11, 2022 11:41 am
Did you echo the output, instead of returning it from the function?
Thank you.
You have confirmed that I must use 'return'. I think I used both echo and return, however I was not worried about the script in question... It was the PHP error message that caught my attention.

Post Reply