Seite 1 von 1

Probleme mit dem Plugin Manager

Verfasst: Mi 4. Jul 2018, 10:10
von locotay
Hallo Zusammen!

Ich habe gestern ein System von Version 4.9.7 auf die 4.9.12 aktualisiert.
Das Meiste funktioniert auch einwandfrei, allerdings läd der Pluginmanager nichts.
Im Errorlog bekomme ich beim Aufruf folgendes ausgegeben:

Code: Alles auswählen

PHP Deprecated:  The each() function is deprecated. This message will be suppressed on further calls in /html/dev/conte2018/contenido/classes/class.iterator.php on line 81

PHP Fatal error:  Uncaught Error: [] operator not supported for strings in /html/dev/conte2018/contenido/plugins/pim/classes/view/class.pimpluginview.navsub.php:345

Stack trace:
#0 /html/dev/conte2018/contenido/plugins/pim/classes/view/class.pimpluginview.navsub.php(165): PimPluginViewNavSub->_getPluginNavigation('Extras')
#1 /html/dev/conte2018/contenido/plugins/pim/includes/include.right_bottom.php(113): PimPluginViewNavSub->getNavSubentries()
#2 /html/dev/conte2018/contenido/main.php(202): include_once('/html/dev/conte...')
#3 {main}
 thrown in /html/dev/conte2018/contenido/plugins/pim/classes/view/class.pimpluginview.navsub.php on line 345
Ich behaupte einfach mal, dass durch den Fatal Error der weitere Seitenaufbau abgebrochen wird. Da die Dateien aber auf jeden Fall aktuell sind (identisch den Files aus dem 4.9.12er Download) liegt es wohl auch nicht an einer veralteten Verion.
Im Changelog steht für Version 4.9.11, dass Kompatibilität mit PHP 7 besteht – der Server läuft aktuell mit 7.2 – könnte das eventuell das Problem sein? Ansonsten bin ich gern für Ideen offen, wie ich noch an den Fehler herangehen könnte.

Re: Probleme mit dem Plugin Manager

Verfasst: Mi 4. Jul 2018, 10:34
von Faar
Die 4.9.12 kann PHP 7.0 und die 4.9.7 noch nicht.
PHP 7.2 kann keine Version, wobei die 4.9.12 leicht an PHP 7.2 anzupassen sei... sagte mir ein erfahrener Contenido Entwickler.
Ich behaupte einfach mal, dass durch den Fatal Error der weitere Seitenaufbau abgebrochen wird.
Das machen Fatal Error.

https://blog.jkip.de/php-7-1-operator-n ... r-strings/

Re: Probleme mit dem Plugin Manager

Verfasst: Mi 4. Jul 2018, 11:03
von locotay
Faar hat geschrieben:
Mi 4. Jul 2018, 10:34
Die 4.9.12 kann PHP 7.0 und die 4.9.7 noch nicht.
PHP 7.2 kann keine Version, wobei die 4.9.12 leicht an PHP 7.2 anzupassen sei... sagte mir ein erfahrener Contenido Entwickler.
Ja… Da lasse ich mal lieber die Finger von. Nicht nur, weil ich mir nicht sicher bin, ob ich mir das überhaupt zutraue, aber das ist ja dann auch hinfällig, wenn es mal ein Update gibt. (… wobei dann ggf. 7.2 ja unterstützt wird.)
Habe ich da irgendwo einen Hinweis übersehen? Ich hatte eben nur überall gesehen, dass PHP7 unterstützt wird, aber kann auch sein, dass ich einfach blind bin. Ich danke auf jeden Fall für die Info. Dann schau ich mal, dass der Server irgendwie auf die 7.0 kommt. (:

Re: Probleme mit dem Plugin Manager

Verfasst: Mi 4. Jul 2018, 11:34
von Faar
Es ist wirtschaftlicher Unsinn, immer die neueste Version laufen zu lassen.
PHP7 ist dummerweise ein Sammelbegriff für alle PHP 7 Versionen, aber die Unterschiede von PHP 7.0 zu 7.1 und 7.2 sind nicht marginal, wie bei Deinem fatalen Fehler sichtbar wird.
Siehe dazu auch den Link, denn ich im vorherigen Posting reingesetzt habe.
Da steht genau der Fehler ab 7.1, der bei PHP 7.0 noch kein Fehler ist.

bis 7.0: $dingens[] = 2; // kein Problem

Ab 7.1: $dingens = array();
$dingens[] = 2; // auch kein Problem

Re: Probleme mit dem Plugin Manager

Verfasst: Do 5. Jul 2018, 10:22
von rethus
@locotay PHP7 würde ich schon empfehlen, aber wie Faar sagt, muss es nicht zwingend die 7.2 sein.
Kann man machen, aber "Living on the edge" ist halt auch Zeitintensiv und daher teuer.

PHP7 würde ich empfehlen, weil sich in Sachen Performance von PHP5 auf PHP7 einiges getan hat (round about 35 -45% soweit ich mich erinnere).
Könntest es natürlich auch mal mit HHVM versuchen, "könnte" noch schneller sein. Ob es kompatibel mit Contenido 4.9.12 ist, weiß ich jedoch aus dem Stehgreif gerade nicht.

Gut wäre in jedem Fall, wenn du dich ran machst, und die PHP7.2 Fehler aus dem System ausräumst (weiß ja nicht wie viele das sind), wäre es cool, wenn du deine Änderungen über nen Pull-Request im Repo auch der Community zur Verfügung stellen würdest.

http://git.contenido.org

Falls du nicht fit bist in Git, kannst du die Dateien sicher hier auch posten.

Re: Probleme mit dem Plugin Manager

Verfasst: Do 5. Jul 2018, 14:16
von achiboy
Ich habe gerade heute von meinem Hosting Provider (Hostpoint) eine E-Mail erhalten, dass sie im August auf PHP 7.2 umstellen.
Was muss ich tun?

Re: Probleme mit dem Plugin Manager

Verfasst: Do 5. Jul 2018, 20:42
von Oldperl
Servus,

also wer wissen will ob die nächste Version, man munkelt 4.9.13, mehr kann als PHP 7.0, der sollte sich die aktuellste Entwickler-Version aus dem GIT ziehen.
Infos dazu findet man :arrow: viewtopic.php?p=173407#p173407

Gruß aus Franken

Ortwin

Re: Probleme mit dem Plugin Manager

Verfasst: Fr 6. Jul 2018, 06:46
von achiboy
Vielleicht wäre es schon bald ein eigenes Topic wert, um die Erfahrungen und Hinweise für Entwickler zu sammeln, die jetzt dringend ran müssen?

Auf die Schnelle habe ich die folgenden Dateien gefunden, die ohne grossen Aufwand angepasst werden müssen/können/sollen:
- classes\class.htmlparser.php
- classes\class.iterator.php
- classes\class.note.php
- classes\contenido\class.property.php
- includes\include.mycontenido.php
- includes\pseudo-cron.inc.php

Im Git noch nicht behoben ist dieses ziemlich zentrale Sache.
In der classes\class.session.php ist folgende Zeile zu finden:

Code: Alles auswählen

eval("reset(\$$var); \$l = gettype(list(\$k)=each(\$$var));");
Wie kriegt man das ohne "each()" hin?

Re: Probleme mit dem Plugin Manager

Verfasst: Fr 6. Jul 2018, 09:50
von Faar
achiboy hat geschrieben:
Fr 6. Jul 2018, 06:46
Im Git noch nicht behoben ist dieses ziemlich zentrale Sache.
In der classes\class.session.php ist folgende Zeile zu finden:

Code: Alles auswählen

eval("reset(\$$var); \$l = gettype(list(\$k)=each(\$$var));");
Wie kriegt man das ohne "each()" hin?
Da hat sich mal jemand aufgegeilt, alles in eine Zeile zu bringen. :shock:

Ich versuchs mal auseinander zu pflücken und zu verstehen:
1. each soll ja durch foreach ersetzt werden können, also ist $var ein Array und vermutlich wird damit jeweils der Wert ausgelesen.
Wäre interessant zu wissen, was in $var steht.

List ist beinahe klar, da wird der Variablen $k der Wert vom Array $var zugewiesen.

gettype() kann ich derzeit nur erahnen, aber eventuell handelt sich es hier um die Erkennung von Contenido-Types wie CMS_HTML

Wenn das so ist, steht dann in $l der Code vom Contenido-Type und nicht mehr der Platzhalter.

Damit man das Array neu auslesen kann, wird ein reset hingesetzt.

Und eval macht ausführbaren Code daraus.

Man müsste das mal in Einzelschritten aufbauen und anzeigen lassen, was in jedem Schritt passiert, damit man sich ein Bild davon machen kann.
Wenn man sieht, was da jeweils drin steht, versteht man am ehesten den Vorgang und kann den nachbauen.

Re: Probleme mit dem Plugin Manager

Verfasst: Mi 13. Feb 2019, 13:49
von maschmiede
Gibt es eigentlich einen neuen Stand bezüglich der PimPluginViewNavSub Klasse (contenido/plugins/pim/classes/view/class.pimpluginview.navsub.php)? Ist dazu bereits irgendwas in einer neuen Version abzusehen?

Unser Bugfix in "_getPluginNavigation":

Code: Alles auswählen

// Initializing founded variable
$founded = "";
			
// HOT BUGFIX - needs to be an array
$founded = array();

Re: Probleme mit dem Plugin Manager

Verfasst: Mi 13. Feb 2019, 14:31
von xmurrix
Hallo maschmiede,

in der neuesten Version des class.pimpluginview.navsub.php sind dort folgende Zeilen drin:

Code: Alles auswählen

            // Initializing founded array
            $founded = array();
Es entspricht also eurem Bugfix. Allerdings ist das neue CONTENIDO Release noch nicht draußen.

Gruß
xmurrix

Re: Probleme mit dem Plugin Manager

Verfasst: Di 19. Feb 2019, 13:36
von emergence
achiboy hat geschrieben:
Fr 6. Jul 2018, 06:46
In der classes\class.session.php ist folgende Zeile zu finden:

Code: Alles auswählen

eval("reset(\$$var); \$l = gettype(list(\$k)=each(\$$var));");
Wie kriegt man das ohne "each()" hin?
in dem fall so...

Code: Alles auswählen

eval("reset(\$$var); \$k = key(\$$var); \$l = gettype(\$$var);");