PHP 8.1.18 und Con 4.10.2-dev

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

PHP 8.1.18 und Con 4.10.2-dev

Beitrag von McHubi »

Hallo zusammen,

ich habe eine laufende Site von PHP 7.4 und Con 4.10.1 auf die 4.10.2-dev geupdated. Sie lief im Anschluss nicht, es wurde im Frontend ein HTTP-Error 500 geworfen. Hat sich auch nicht geändert, als ich auf PHP 8.1.18 gewechselt bin. Das Backend funktioniert immerhin.

Ich habe daraufhin eine leere Vorlage basierend auf dem Standard-Layout erstellt und dann nach und nach mit den Modulen gefüllt. Dabei zeigte sich, dass immer dann, wenn in der Modul-Eingabe etwas eingetragen ist, Fehler im Error-Log auftauchen. Diese Fehler führen dann im Backend dazu, dass der Reiter "Konfiguration" zerschossen ist. Ich kann mir diese Fehler nur absolut nicht erklären, mal zwei davon:

Auszug Modul-Eingabe "content_teaser_image":

Code: Alles auswählen

echo '<table>';
echo '<tr><td>'.mi18n("input headline of teaserlist").'</td><td><input size="50" type="text" name="CMS_VAR[150]" value="CMS_VALUE[150]"></td></tr>';
echo '<tr><td>'.mi18n("input headline level").'</td><td>
  <input type="radio" name="CMS_VAR[155]" value="h2"';
    if(CMS_VALUE[155]=="h2") echo ' checked="checked"';
    echo '>'.mi18n("input h2").'<br/>
  <input type="radio" name="CMS_VAR[155]" value="h3"';
    if(CMS_VALUE[155]=="h3") echo ' checked="checked"';
    echo '>'.mi18n("input h3").'<br/>
  <input type="radio" name="CMS_VAR[155]" value="h4"';
    if(CMS_VALUE[155]=="h4") echo ' checked="checked"';
    echo '>'.mi18n("input h4");
echo '</table>';
Zeile im Error-Log:

Code: Alles auswählen

PHP Parse error:  syntax error, unexpected token "==" in /.../meinewebsite.de/contenido/includes/include.tplcfg_edit_form.php(352) : eval()'d code on line 6
Leere ich die Modul-Eingabe oder lasse die =="h2" usw. weg, taucht der Fehler nicht auf.

Auszug Modul-Eingabe "stage_sd":

Code: Alles auswählen

echo '<tr><td>'.mi18n("input animation type").'</td><td>
  <input type="radio" name="CMS_VAR[50]" value="fading"';
    if(CMS_VALUE[50]=="fading") echo ' checked="checked"';
    echo '>'.mi18n("input fading").'<br/>
  <input type="radio" name="CMS_VAR[50]" value="sliding"';
    if(CMS_VALUE[50]=="sliding") echo ' checked="checked"';
echo '>'.mi18n("input sliding").'</td></tr>';
Zeile im Error-Log:

Code: Alles auswählen

PHP Fatal error:  Uncaught Error: Undefined constant "fading" in /.../meinewebsite.de/contenido/includes/include.tplcfg_edit_form.php(352) : eval()'d code:32
Stack trace:
#0 /.../meinewebsite.de/contenido/includes/include.tplcfg_edit_form.php(352): eval()
#1 /.../meinewebsite.de/contenido/main.php(212): include_once('/var/www/vhosts...')
#2 {main}
  thrown in /.../meinewebsite.de/contenido/includes/include.tplcfg_edit_form.php(352) : eval()'d code on line 32
Hier ebenfalls das gleiche Bild, wenn ich die Modul-Eingabe leer lasse oder die entsprechenden Zeilen lösche, dann taucht der Fehler nicht auf.

Danke euch für eure Hilfe mein Brett vorm Kopf zu entfernen!

Gruß,


Markus


edit:
Seufz. Komplett simpel. Scheint jedoch nichts mit der PHP-Version zu tun zu haben sondern der Contenido-Version (?), der Fehler kam auch unter PHP 7.4 vor. Statt

Code: Alles auswählen

 if(CMS_VALUE[50]=="fading") 
hat das Ganze mit "" versehen zu sein:

Code: Alles auswählen

 if("CMS_VALUE[50]"=="fading") 
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: PHP 8.1.18 und Con 4.10.2-dev

Beitrag von xmurrix »

Morgen Markus,

die CMS-Variablen (CMS_VAR[n], CMS_VALUE[n], usw.) werden immer gegen String-Werte ersetzt, das war in CONTENIDO schon immer so. Daher sollte man sie wie Zeichenketten behandeln, also im PHP-Kontext mit Anführungszeichen umschließen.

Wenn man also in der Modulausgabe folgenden Code hat

Code: Alles auswählen

if(CMS_VALUE[50]=="fading") 
wird der Platzhalter CMS_VALUE[50] bei leerem Wert wie folgt ersetzt:

Code: Alles auswählen

if(=="fading") // Das führt zu einem Syntaxfehler "...unexpected token "=="..."
und bei einem Wert foobar Wert wie folgt:

Code: Alles auswählen

if(foobar=="fading") // Das würde in diesem Fall zur einer Warnung führen, weil foobar hier als Konstante interpretiert wird, es aber sehr wahrscheinlich so nicht existiert.
Daher ist deine Lösung, den Platzhalter mit Anführungszeichen zu umschließen, richtig gewesen.

Gruß
Murat
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Antworten