WBCE CMS – Way Better Content Editing.
You are not logged in.
Hallo, ich bitte dringend um Hilfe:
ich habe plötzlich seit Dienstag jede Menge Fehlermeldungen im Errorlog-Viewer.
Das Schlimme aber ist, dass bei bestimmten Klicks die Website "verschwindet", d.h. die Seite wird leer und weiß und es ist auch kein Quelltext zu sehen.
Meine letzten Änderungen fanden am 9.11. statt, betrafen nur Text in festen HMTL-Seiten und seither habe ich nix angefasst.
Die Fehler tauchen aber erst ab 12.11.2024 auf
Sie lauten:
Exception There was an unknown exception: sizeof(): Argument #1 ($value) must be of type Countable|array, null given in line (32) of /modules/droplets/droplets.php(24) : eval()'d code
Ergänzung: Ich kann das Problem nun sogar gezielt auslösen, nämlich durch Klick auf den noch leeren Warenkorb. Befindet sich bereits ein Produkt darin, gibt es kein Problem. Aber wenn man auf den Warenkorb klickt, wenn noch nichts drin ist, wird die Seite leer und auch alle anderen Seiten bleiben verschwunden, egal ob ich über die Browser-Schaltfläche "zurück" gehe oder irgendwelche Seiten direkt aufrufe.
Wenn ich im Browser alle cookies und caches dieser domain lösche, kann ich die Seiten wieder normal sehen und bedienen.
Und der Klick auf den Warenkorb selbst erscheint NICHT im Errorlog, sondern nur ALLE DANACH erfolgenden vergeblichen Aufrufe oder Reloads beliebgier anderer Seiten dieser domain.
Bei mir läuft Bakery 1.89 und am Shop-System habe ich bis vorhin nichts geändert.
Ergänzung 2: Mir fällt gerade auch auf, dass die Einträge in der Errorlog-Datei um eine Stunde verschoben angezeigt werden - der Fehler um 18:18 wird dort unter 17:18 angezeigt - weiß jetzt nicht, ob diese Zeitverschiebung schon immer so war und ob sie mit dem Fehler zusammenhängt.
Was kann so etwas sein, wo muss ich suchen, eingreifen und wie?
Mein System ist
WBCE Version: 1.6.2
Tag: 1.6.2
PHP Version: 8.2.24
Last edited by florian (17.11.2024 18:14:09)
Offline
Du hast wahrscheinlich das MiniCart-Droplet in Verwendung.
In diesem steht um Zeile 84 herum
for($i = 1; $i <= sizeof($items); $i++) {
Ich kann den Fehler hier nicht reproduzieren, deshalb jetzt mal so in den Nebel geschossen: füg mal vor der o.g. Zeile ein:
if (!isset($items)) {$items=array();}
Edit: evtl. auch in der view_cart.php vor den gleichlautenden Zeilen 197 und 236
Die Zeitverschiebung hat damit nichts zu tun.
Last edited by florian (16.11.2024 18:52:03)
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hallo florian,
danke, du bist wirklich extrem schnell!
Ich habe tatsächlich dieses droplet und bei mir steht die genannte Zeile in Zeile 83.
Leider bleibt das Problem bestehen, nachdem ich die von dir genannte Zeile darüber eingefügt habe.
Auch, nachdem ich später noch dein "edit" gesehen und auch das umgesetzt habe.
Und wieso kommst du so schnell auf a) dieses Droplet und b) auf diese Zeilen als mögliche Ursache?
Hat sich dort etwas ohne mein Zutun geändert?
Das Ding tut doch seit Jahren seinen Dienst...
Last edited by dabiener (16.11.2024 19:03:32)
Offline
Möglicherweise ist vom Webhoster die PHP-Version umgestellt worden.
Ich vermute das Droplet als Ursache, weil die Fehlermeldung auf das Droplet-Modul hinweist, aber in Zeile 24/32 nur die Droplets ausgeführt werden, also nicht das Modul selbst die Fehlermeldung verursachen kann.
Du hattest ja dann ergänzt, dass es irgendwie mit dem Warenkorb zusammenhängt, und da kommt dann nur minicart infrage.
Ich sehe gerade, dass es in der Bakery 1.89 auch noch eine Datei minicart.php gibt, in der auch der sizeof()-Aufruf steht (Zeile 110).
Wenn es nicht hilft, an den 3 genannten Stellen (Droplet, view_cart.php und minicart.php) die Initialisierung der $items-Variable zu ergänzen, weiß ich gerade auch nicht weiter.
Du könntest noch in der config.php die Zeile
define('WB_DEBUG',true);
ergänzen, evtl. gibt das genaueren Aufschluss über das Problem.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Bitte auch noch auf Serverebene, also nicht das unter /var/logs, sondern direkt im Root (i.d.R. auf derselben Ebene wie /htdocs bzw. www - je nach Serverkonfiguration) schauen, ob es ein error.log gibt, und was da drinsteht.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hallo florian,
habe jetzt alles ohne Erfolg gemacht bis auf das Letzte, da ich jetzt nicht genau weiß, was du da meinst.
"define/'WB_DEBUG',true);
hat keine für mich ersichtliche Änderung im logging gebracht, außer der Meldung
2024-11-16 19:04:06 Warning /modules/bakery/config.php: L:82
from /modules/bakery/view_cart.php L:26 "Constant WB_DEBUG already defined"
wonach das offenbar sowieso schon gesetzt ist.
ich werde es daher wohl besser wieder rausnehmen.
In /var/logs
gibt's php-Errorlogs, das jüngste hat über 13000 Zeile und reicht bis Mai 2023 zurück.
Die jüngsten Meldungen sind offensichtlich die selben wie im Errorlogview.
wo meintest du, könnte ich noch schauen? Wenn ich auf die Ebene der <kundenverzeichnis>/<domain>/ gehe, wo auch .htaccess liegt, finde ich kein log.
Gehe ich noch höher, gibt es ein log-Verzeichnis, aber das ist dann das meines Ftp-Zugangs bei meinem Hoster (all-inkl.com).
Das ist jetzt sehr unangenehm und es kann sehr wohl sein, dass der Provider/hoster gerade die php-Versionen geändert hat.
Aber dann sollte ich doch nicht der Einzige sein, der das Problem hat?
Ich bin übrigens bei all-inkl.com
Würde das aktuelle update auf 1.6.3 was helfen?
Last edited by dabiener (16.11.2024 20:19:48)
Offline
Geh vorübergehend auf php 7.4 runter, das ist bei all-inkl mMn noch möglich.
Ein WBCE Update löst das Problem nicht.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
tatsächlich, damit ist das Problem "weg". Danke dir! Neues Problem:
Der Provider teilt mit, dass am 25.11.2024 die alten PHP-Versionen bis 8.0 abgeschaltet werden sollen.
edit: ich sehe gerade, gilt nur für bis 7.3 und 8.0, alles dazwischen und neuer bleibt wohl erst mal.
Aber ich glaube ehrlich gesagt auch, dass die 8.X-Version schon etwas länger bei mir läuft, weiß aber nicht mehr, ob und wann ich selbst da etwas geändert habe, wenn, wahrscheinlich um Zuge des Updates auf WBCE 1.6.2.
Oder ob die 8.x-Version einfach so von all-inkl geändert wurde.
Aber das war doch sicherlich sinnvoll, welche Nachteile habe ich jetzt durch das Zurückgehen auf eine so alte Version?
Offline
Mir kommen langsam Zweifel, ob das tatsächlich direkt mit Bakery zu tun hat. Ich habe jetzt mal versucht, das nachzustellen - WBCE 1.6.2, Bakery 1.8.9 bei All-Inkl mit PHP 8.2 - und der Fehler tritt immer noch nicht auf. Aufrufen des leeren Warenkorbs zeigt wie gewünscht den Hinweis "Der Warenkorb ist leer".
Klar läuft das Errorlog mit Deprecated-Meldungen voll, aber die Seite schmiert nicht völlig ab.
Die Warning zu sizeof (die ja eigentlich auch nicht solche fatalen Auswirkungen haben sollte, eben weil sie nur eine Warning und keine Exception ist) kommt auch nicht.
Kannst Du bitte mal versuchen, das Errorlogging zu aktivieren, so wie hier beschrieben
https://all-inkl.com/wichtig/anleitunge … n_616.html
und dann mal schauen, ob darin irgendwelche Meldungen (Exceptions) erscheinen?
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Hallo florian,
ich habe gerade das Errorlog eingeschaltet wie in der Anleitung von all-inkl beschrieben (user.ini erstellt, "display_errors = on" reingeschrieben) und natürlich auch testweise auf PHP8.2 zurückgeschaltet, dann ein wenig gewartet bis überall die richtige Version angezeigt wurde. Dann ein wenig herumgeklickt und irgendwann mal auf dne Warenkorb - und schwupps, war die Seite wieder leer und die gesamte Website mit diesem Browser nicht mehr sichtbar.
Allerdings auch NULL Fehlermeldungen.
Dann wieder alle cookies gelöscht, einen Ordner XY angelegt, die user.ini geändert, jetzt steht da drin
display_errors = off
log_errors = on
error_log = /www/htdocs/<mein login>/XY/errorlog.txt
und dann das Spiel wiederholt. Sobald Warenkorb - wieder leere Seiten, keine sichtbare Fehlermeldung (logisch, ist da abgeschaltet), ABER eben leider auch keine neue Datei "errorlog.txt" und somi auch keine dort protokollierte Fehlermeldungen.
Nur in der Errorlogview die gleichen dazu passenden Einträge wie gestern.
Momentan habe ich wieder auf PHP7.4 zurückgestellt, ich will ja im laufenden System eventuelle Besucher nicht verlieren.
Last edited by dabiener (17.11.2024 15:11:08)
Offline
Von der Beschreibung her klingt das, als würde irgendein Script in eine Endlosschleife laufen.
Ist Bakery da mal irgendwie angepasst worden, gibt es noch andere Module bzw. Bakery-Addons (Anyitems, Lastitems), die das verursachen könnten?
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Bei Anyitems und Lastitems klingelt was, sie kommen mir bekannt vor, aber ich habe gerade bei droplets und Erweiterungen gesucht und nichts gefunden. Woran kann ggf. sonst noch erkennen, ob diese Module/Addons irgendwo verwendet werden? Wenn sie nicht Standard sind und ich sie trotzdem irgendwann mal eingefügt habe, dann nur, weil es mir hier im Forum mal geraten wurde.
Offline
Erweiterungen > Module oder per FTP schauen, ob es /modules/anyitems bzw. /modules/lastitems gibt
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
nee, da ist nix bei mir
Offline
Wenn Du magst, schick mir den Link und Zugangsdaten per PM, dann schaue ich mal drauf.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Also, des Rätsels Lösung war das Droplet ModBakeryCartLink, das dahingehend erweitert war, dass die Anzahl der Artikel im Warenkorb angezeigt wurde. Auch in diesem fehlte die Zeile
if (!isset($items)) {$items=array();}
vor
for($i = 1; $i <= sizeof($items); $i++) {
Wer also unter PHP 8.2 ebenfalls dieses Droplet benutzt bzw. generell Bakery, sollte prüfen bzw. sicherstellen, dass o.g. Zeile an den oben genannten Stellen, sowie bei Bakery 2.x in /modules/bakery/droplets/functions.php, Zeile 117, eingefügt ist.
Sorgen sind wie Nudeln: man macht sich meist zu viele.
Offline
Für alle, die vielleicht mit dem selben Problem (Verwendung von Bakery-Droplets und dann Umstellung auf PHP8.x) in diesem Faden landen:
Florian hat mir bis zum Ende durchgeholfen und jetzt passt alles wieder.
Die oben erwähnte Zeile war auch noch in einer weiteren Datei, nämlich "ModBakeryCartLink_mitAnzahl" notwendig, hier in Zeile 32.
Wenn ihr auch betroffen seid, macht es an allen 4 Stellen und es läuft wieder.
Oder es läuft mit dem nächsten Update "von selbst", aber da wird sich florian noch extra melden.
Danke an florian und dieses gesamte tolle Projekt hier.
Offline
florian