Using php-function "trim" as a modifier is deprecated

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
Bernhard_4711
Beiträge: 144
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 5 Mal
Kontaktdaten:

Using php-function "trim" as a modifier is deprecated

Beitrag von Bernhard_4711 »

Moin Zusammen,

ich habe heute diese Fehlermeldungen in meinem LOG gefunden (Duplikate gelöscht):

Code: Alles auswählen

[07-Jul-2024 18:06:52 UTC] PHP Deprecated:  Using php-function "trim" as a modifier is deprecated and will be removed in a future release. Use Smarty::registerPlugin to explicitly register a custom modifier. in /var/www/btmr/contenido/plugins/smarty/smarty_source/sysplugins/smarty_internal_compile_private_modifier.php on line 112
[07-Jul-2024 18:06:52 UTC] PHP Deprecated:  Using php-function "in_array" as a modifier is deprecated and will be removed in a future release. Use Smarty::registerPlugin to explicitly register a custom modifier. in /var/www/btmr/contenido/plugins/smarty/smarty_source/sysplugins/smarty_internal_compile_private_modifier.php on line 112
[08-Jul-2024 07:29:39 UTC] PHP Deprecated:  Using php-function "is_array" as a modifier is deprecated and will be removed in a future release. Use Smarty::registerPlugin to explicitly register a custom modifier. in /var/www/btmr/contenido/plugins/smarty/smarty_source/sysplugins/smarty_internal_compile_private_modifier.php on line 112
---
Munterbleiben... Bernhard
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von xmurrix »

Hallo Bernhard,

zu diesem Thema gibt es mehr Informationen im folgenden Beitrag:
viewtopic.php?f=115&t=44736&p=183315

Du solltest in den Smarty-Templates alle PHP-Funktionen, die als Modifier verwendet werden, gegen entsprechende Lösungen ersetzen.

Als zusätzliche Absicherung wurden die bekannten PHP-Funktionen als Smarty Modifier-Plugins registriert, aber ich sehe im Quellcode, dass das nicht immer der Fall ist.

Vermutlich ist das Problem bei dir behoben, wenn du die Datei contenido/plugins/smarty/classes/class.smarty.frontend.php öffnest, und am Ende der Funktion __construct() folgende Zeile hinzufügst:

Code: Alles auswählen

self::registerDeprecatedPhpModifier();
Das sollte dann ungefähr so aussehen:

Code: Alles auswählen

    public function __construct(&$aCfg, &$aClientCfg, $bSanityCheck = false)
    {
        ...

        self::resetPaths();
        self::$bSmartyInstanciated = true;
        self::registerDeprecatedPhpModifier();
    }

Gruß
xmurrix
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.
Bernhard_4711
Beiträge: 144
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von Bernhard_4711 »

Ich habe das jetzt nicht wirklich komplett verstanden.

Allerdings kann ich keine der von Dir in dem verlinkten Beitrag genannten "variable|modifier" mehr finden.

Ich ändere die von Dir genannte Datei "contenido/plugins/smarty/classes/class.smarty.frontend.php" entsprechend ab und beobachte das.

Vielen Dank für die Hilfe.

PS: Sollte die von Dir genannte Lösung (Zitat: "Du solltest in den Smarty-Templates alle PHP-Funktionen, die als Modifier verwendet werden, gegen entsprechende Lösungen ersetzen."; Zitat Ende) nicht global und für alle erfolgen?
Oder mißverstehe ich Dich?
---
Munterbleiben... Bernhard
Oldperl
Beiträge: 4315
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von Oldperl »

Servus,
Bernhard_4711 hat geschrieben: Di 9. Jul 2024, 10:23 Sollte die von Dir genannte Lösung (Zitat: "Du solltest in den Smarty-Templates alle PHP-Funktionen, die als Modifier verwendet werden, gegen entsprechende Lösungen ersetzen."; Zitat Ende) nicht global und für alle erfolgen?
Nun, wenn Du PHP-Funktionen als Modifier in Smarty-Templates nutzt, und in neueren PHP-Versionen PHP-Funktionen als deprecated markiert werden, oder gar ganz wegfallen, so bist du als Entwickler verantwortlich dies in deinen Templates entsprechend zu ändern. Das ist nicht anders wie entsprechende Änderungen bei Modulen oder Plugins im PHP-Code.

Also nein, weder bei PHP noch bei Smarty macht es daher Sinn das zentral zu händeln. Das haben wir bei Contenido auch immer versucht, mit entsprechenden Include-Dateien für vergangene oder neue PHP-Versionen, und das wird dann irgendwann unübersichtlich, Dateien werden über viele Generationen "mitgeschleift", weil, es könnte ja sein, dass noch irgendwer das nutzt oder darauf zugreift.
Daher denke ich, wir sollten das auch im Contenido Core zukünftig anders handhaben. Auch eine Aufgabe für den CONTENIDO-Verein.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Bernhard_4711
Beiträge: 144
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von Bernhard_4711 »

Oldperl hat geschrieben: Mi 10. Jul 2024, 12:44 Nun, wenn Du PHP-Funktionen als Modifier in Smarty-Templates nutzt, und in neueren PHP-Versionen PHP-Funktionen als deprecated markiert werden, oder gar ganz wegfallen, so bist du als Entwickler verantwortlich dies in deinen Templates entsprechend zu ändern.
Das wäre dann der Entwickler von Smarty, richtig?
---
Munterbleiben... Bernhard
Oldperl
Beiträge: 4315
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 3 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von Oldperl »

Servus,

nein. Smarty bietet nur die Möglichkeit PHP-Funktionen als Modifier in Smarty-Templates zu nutzen. Smarty ist aber nicht dafür verantwortlich ob, und wann, diese PHP-Funktionen deprecated gestellt werden, oder ganz wegfallen.
Der Webdesigner oder Webentwickler, der Smarty in seinen Modulen oder Plugins unter CONTENIDO nutzt ist da dann der richtige Ansprechpartner. Dieser muss dann in seinen Templates diese Modifier ersetzen bzw. gegen andere austauschen.

Sollte es sich bei den Smarty-Templates beispielsweise um genutzte Templates in Core-Plugins oder Core-Modulen von CONTENIDO handeln, so wäre es Aufgabe der CONTENIDO-Entwickler diese Templates entsprechend zu modifizieren.

Sind es Module aus der Community, so wäre hier im Forum der entsprechende Entwickler, falls noch aktiv, der Ansprechpartner, oder man passt diese Templates gleich selbst beim Upgrade von CONTENIDO an, und stellt gerne gemachte Änderungen hier als Post ins Forum.

Gruß aus Franken

Ortwin

PS: @xmurrix Wir sollten aber eventuell nochmal schauen, inwieweit wir das Smarty-Plugin und die verwendete Smarty-Version mal updaten sollten/müssen.
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von xmurrix »

Hallo Ortwin,
Oldperl hat geschrieben: Do 11. Jul 2024, 12:23 PS: @xmurrix Wir sollten aber eventuell nochmal schauen, inwieweit wir das Smarty-Plugin und die verwendete Smarty-Version mal updaten sollten/müssen.
ja, das wäre eine Überlegung wert. Eine Aktualisierung auf Smarty 5 wäre nicht schlecht und auf die Schnelle sehe ich da keine Probleme mit der Abwärtskompatibilität.

@Bernhard_4711:
Die Anpassung, die ich hier beschrieben habe, sollte dein Problem lösen. Besser ist es aber, dass du in allen Modul-/ und Plugin-Templates nach dem Vorkommen von "$variable|trim" oder "$variable|in_array" suchst, und diese gegen entsprechende Alternativen ersetzst.

In CONTENIDO 4.10.11 kommt das z. B. in Templates von Modulen navigation_main und navigation_top vor.
Da steht z. B. folgendes drin:

Code: Alles auswählen

{if $idcat|in_array:$path}
Das sollte geändert werden in

Code: Alles auswählen

{if in_array($idcat, $path)}
In anderen Modul-Templates steht

Code: Alles auswählen

{if 0 lt $image|trim|strlen}
Das ist zu ändern in

Code: Alles auswählen

{if 0 lt $image|count_characters}
Du kannst dir auch im aktuellen Entwicklungszweig von CONTENIDO die Änderungen in den Modul-/ und Plugin-Templates ansehen, diese mit den Templates bei dir vergleichen und die Änderungen übernehmen. Einen Überblick der Änderungen findest du im folgenden Commit:
https://github.com/CONTENIDO/CONTENIDO/ ... b76683c2c7

Die aktuellen Modul-Templates findest du unter:
https://github.com/CONTENIDO/CONTENIDO/ ... ta/modules

Die aktuellen Plugin-Templates findest du unter:
https://github.com/CONTENIDO/CONTENIDO/ ... do/plugins

Gruß
xmurrix
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.
Bernhard_4711
Beiträge: 144
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von Bernhard_4711 »

xmurrix hat geschrieben: Fr 12. Jul 2024, 09:27 In CONTENIDO 4.10.11 kommt das z. B. in Templates von Modulen navigation_main und navigation_top vor.
Da steht z. B. folgendes drin:

Code: Alles auswählen

{if $idcat|in_array:$path}
Das sollte geändert werden in

Code: Alles auswählen

{if in_array($idcat, $path)}
In anderen Modul-Templates steht

Code: Alles auswählen

{if 0 lt $image|trim|strlen}
Das ist zu ändern in

Code: Alles auswählen

{if 0 lt $image|count_characters}
Ich habe die Änderungen vorgenommen.
Du kannst dir auch im aktuellen Entwicklungszweig von CONTENIDO die Änderungen in den Modul-/ und Plugin-Templates ansehen, diese mit den Templates bei dir vergleichen und die Änderungen übernehmen. Einen Überblick der Änderungen findest du im folgenden Commit:
Ich habe zuletzt am 21.02.2024 die damals aktuelle Version geholt und installiert.
Wird damit nicht auch automatisch alles andere mit aktualisiert?
---
Munterbleiben... Bernhard
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von xmurrix »

Bernhard_4711 hat geschrieben: Fr 12. Jul 2024, 12:49 Wird damit nicht auch automatisch alles andere mit aktualisiert?
Bei einer Neuinstallation wird alles neu installiert, handelt es sich um eine Aktualisierung, macht das Setup keine Änderungen an vorhandenen Modulen des Mandanten.

Im erstem Kommentar zu diesem Beitrag habe ich auf einen Fehler im Konstruktor der Klasse cSmartyFrontend (contenido/plugins/smarty/classes/class.smarty.frontend.php) hingewiesen und dass die Anpassung der Konstruktorfunktion das Problem eventuell lösen sollte.

Falls du die Änderung bei dir gemacht hast und seither keine Fehler mehr auftauchen, wäre das Problem somit behoben. Die Korrektur muss noch in GitHub übernommen werden.
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.
xmurrix
Beiträge: 3200
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von xmurrix »

Der Fehler wurde mit folgendem GitHub-Ticket bearbeitet und behoben:
https://github.com/CONTENIDO/CONTENIDO/issues/494
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.
Bernhard_4711
Beiträge: 144
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 5 Mal
Kontaktdaten:

Re: Using php-function "trim" as a modifier is deprecated

Beitrag von Bernhard_4711 »

Vielen Dank. Bisher trat der von mir berichtete Fehler nicht wieder auf.
---
Munterbleiben... Bernhard
Antworten