Neu OPC-Bilder werden nach Update auf 5.6.0 nicht mehr generiert

AA88

Mitglied
23. September 2024
4
2
Nach dem Update auf JTL-Shop 5.6.0 lassen sich im Admin-Bereich unter
Fehlerbehebung → Bilder → OPC keine Bilder mehr generieren.


  • Die Generierung bleibt sowohl im Admin-Dashboard als auch per Terminal-Befehl
    php cli cache:images:create -o bei ca. 13 % stehen.​
  • In der Konsole bzw. im Terminal erscheint: malloc(): corrupted top size
    Aborted

  • PHP-Einstellungen wurden geprüft (Speicherlimit 1024 MB, max_execution_time 1200 s).​
  • Cache und template_c wurden geleert.​
  • Produkt- und Kategorie-Bilder werden korrekt generiert – betroffen sind nur OPC-Bilder.
Hat jemand das gleiche Verhalten unter 5.6.0 oder eine Lösung dafür?
Screenshot 2025-11-12 103429.png


Screenshot 2025-11-12 102600.png
 
  • Gefällt mir
Reaktionen: Chriss_2401

Chriss_2401

Mitglied
16. April 2025
4
3
Hi @kevin99 🤘
Danke für deinen Post!!
Wir haben seit dem Update (von 5.3) auf 5.6.1 genau das gleiche Problem.
Ich bin gerade noch mit Nacharbeiten im Child beschäftigt, aber schaue mir das heute Abend mal genauer an.
Sollte ich was wegweisendes herausfinden, sag ich hier nochmal Bescheid!

LG Chriss 🧐
 
  • Gefällt mir
Reaktionen: AA88

AA88

Mitglied
23. September 2024
4
2
Hi @Chriss_2401 ,
danke dir für die Rückmeldung!
Gut zu wissen, dass ihr nach dem Update auf 5.6.1 das gleiche Verhalten habt , dann scheint es definitiv kein Einzelfall zu sein.
Ich konnte die OPC-Bilder über die Konsole fehlerfrei erzeugen, wenn Imagick komplett deaktiviert wird. Mit folgendem Aufruf läuft die Generierung ohne Absturz:



export PHPRC=/web/php-noimagick.ini
export PHP_INI_SCAN_DIR=
php -d max_execution_time=0 cli cache:images:create -o




Hi @kevin99 🤘
Danke für deinen Post!!
Wir haben seit dem Update (von 5.3) auf 5.6.1 genau das gleiche Problem.
Ich bin gerade noch mit Nacharbeiten im Child beschäftigt, aber schaue mir das heute Abend mal genauer an.
Sollte ich was wegweisendes herausfinden, sag ich hier nochmal Bescheid!

LG Chriss 🧐
 
  • Gefällt mir
Reaktionen: Chriss_2401

NoOne

Sehr aktives Mitglied
16. März 2024
607
209
Welche ImageMagick-Version ist das denn? malloc ist eigentlich ein C und C++ Ding, also ist das vermutlich ein Bug in ImageMagick und keiner im Shop. Mit 6.9.12-98 Q16 x86_64 hab ich da keine Probleme.

Das könnte der Bug hier sein: https://github.com/ImageMagick/ImageMagick6/issues/159#event-4967339053
Der wäre in der 6.9.12-16 Q16 vorhanden. Und auch in einigen 7er Versionen. Aber eigentlich ist der schon ein Weilchen gefixt.
 

makemeharder

Mitglied
23. Juni 2025
3
1
Bei unserem Kunden wurden keine Bilder in den Ordnern mit Umlauten und Leerzeichen generiert, in anderen Ordnern jedoch schon.
Da wir nicht bis zum entscheidenden Patch warten können, haben wir das Problem selber im "includes/src/Router/Controller/MediaImageController.php" behoben. Wenn beim nächsten Update das Problem nicht gelöst wird, wird dieser Controller überschrieben und der Fix ist weg.

Falls es noch jemanden weiter hilft, hier die Beschreibung zum Fix. (Das Editieren der Shop-includes sollte man unter normalen Umständen vermeiden, aber Geld verdient sich nicht von alleine ;)

Fix: OPC Bilder werden in JTL-Shop 5.6.x nicht mehr generiert (Unterordner, Leerzeichen, Umlaute)​


Problembeschreibung:
Seit dem Update auf JTL-Shop 5.6.x werden im OPC (OnPage Composer) hochgeladene Bilder im Frontend oft nicht mehr "on-the-fly" skaliert und als WebP/AVIF ausgeliefert. Im Quelltext steht zwar das <picture>-Tag mit dem Pfad zum media/image/opc Ordner, die physikalischen Bilddateien werden dort aber nicht erzeugt. Stattdessen gibt der Webserver für diese URLs einen 404-Fehler zurück.
Der Fehler tritt genau dann auf, wenn die Bilder im OPC-Editor in Unterordnern gespeichert wurden oder der Pfad/Dateiname Sonderzeichen, Leerzeichen oder Umlaute enthält (z. B. media/image/opc/sm/Onlineshop/Über Uns/bild1.jpg).

Ursache:
JTL-Shop 5.6 hat das Routing für die "On-the-fly" Bildgenerierung auf die Bibliothek FastRoute (via League\Route) umgestellt. Die Verarbeitung findet in der Datei includes/src/Router/Controller/MediaImageController.php statt.
Es gibt dort zwei miteinander verwobene Probleme:
  1. Regex-Regel für OPC-Pfade (register()):
    Die FastRoute Regel für den Parameter $name
    Code:
    ($name = '{name:[a-zA-Z0-9 äööüÄÖÜß\@\$\-\_\.\+\!\*\\\'\(\)\,]+}';)
  2. erlaubt standardmäßig weder Schrägstriche (/) noch Prozentzeichen (%). Da OPC-Bilder in Unterordnern liegen können, enthalten die Pfade Schrägstriche. Ebenso werden Leerzeichen und Umlaute im Browser URL-kodiert (z. B. %20, %C3...), wodurch logischerweise `%`-Zeichen in der URL landen. Da diese Zeichen in der Regex fehlen, lehnt der Router die Anfrage ab und wirft sofort einen 404-Error.
  3. Redirect-Loop durch fehlendes URL-Decodieren (getResponse()):
    Selbst wenn man die Regex anpasst, knallt es anschließend in der Funktion getResponse(). Hier wird der physische Zielpfad des Bildes (der Umlaute/Leerzeichen enthält) strikt per === mit der angeforderten URL ($requestURL) verglichen. Da $requestURL un-decodiert ist (sie enthält `%20` etc.), schlägt der Vergleich fehl. Der MediaImageController initiiert daraufhin fälschlicherweise einen 301 Redirect auf denselben Pfad, was beim erneuten Aufruf durch den Browser zu einem endlosen Redirect-Loop führt. Der eigentliche Generierungscode (Image::render()) wird nie ausgeführt.

Der Bugfix im JTL-Core:
In der Datei includes/src/Router/Controller/MediaImageController.php müssen zwei Anpassungen vorgenommen werden.



Fix 1: FastRoute Regex anpassen (ab Zeile ~58)
Ersetze die Registrierung der OPC-Route so, dass eine eigene $nameOpc Variable verwendet wird, die \/ und \% erlaubt.

Vorher:

Code:
$route->get(
            \sprintf('/media/image/{type:opc}/%s/%s.%s', $size, $name, $ext),
            $this->getResponse(...)
        )
            ->setName('mediaImageOPC' . $dynName);


Nachher:

Code:
 $nameOpc = '{name:[a-zA-Z0-9 äööüÄÖÜß\@\$\-\_\.\+\!\*\\\'\(\)\,\/\%]+}';
        $route->get(
            \sprintf('/media/image/{type:opc}/%s/%s.%s', $size, $nameOpc, $ext),
            $this->getResponse(...)
        )
            ->setName('mediaImageOPC' . $dynName);




Fix 2: URL-Decoding einbauen (ab Zeile ~92)
In der Methode getResponse(...) muss $args['name'] und die $requestURL vor dem Pfad-Vergleich zwingend decodiert werden.


Füge nach der $args['number'] Prüfung folgendes ein:

Code:
if (isset($args['name'])) {
                $args['name'] = \urldecode($args['name']);
            }


Und ändere wenig später die Definition von $requestURL (ca. Zeile 98):
Vorher:


Code:
$requestURL   = '/' . \ltrim($request->getUri()->getPath(), '/');


Nachher (urldecode hinzufügen):

Code:
$requestURL   = \urldecode('/' . \ltrim($request->getUri()->getPath(), '/'));




Nach diesen Änderungen muss zwingend der JTL Object Cache über das Shop Backend (oder per Konsolenbefehl) geleert werden, damit FastRoute die geänderten Routing-Regeln neu in seinen Cache schreibt! Danach werden OPC Bilder aus Unterordnern und mit Umlauten im Namen wieder sofort erzeugt.
Umsetzung auf eigene Gefahr! Wer sich damit nicht auskennt, sollte lieber die Bilder-Ordner im OPC umbenennen (keine Leerzeichen und Sonderzeichen).
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Chriss_2401
Ähnliche Themen
Titel Forum Antworten Datum
Neu OPC - Rich Text Änderungen werden nicht übernommen Allgemeine Fragen zu JTL-Shop 1
Neu OPC Grid Layout Reihenfolge unlogisch? Allgemeine Fragen zu JTL-Shop 1
Bilder unter Versand- und Zahlungsart unterschiedlich groß Einrichtung JTL-Shop5 0
Neu Varianten die nicht online in JTL geschaltet sind werden trotzdem zu Shopify geladen Shopify-Connector 2
Neu Amazon Aufträge werden nicht erstellt Amazon-Anbindung - Fehler und Bugs 2
Beantwortet [Shop 5.7.2 / Wawi 2.0.5] GPSR-Daten werden am Artikel nicht angezeigt trotz korrekter Übertragung und installiertem Plugin Allgemeine Fragen zu JTL-Shop 1
Ein neuer Hersteller kann weder angelegt noch bearbeitet werden JTL-Wawi 1.11 7
Workflows werden nicht in Auftragshistorie angezeigt (2.0.3) JTL-Wawi 2.0 0
Kundengruppenrabatte werden bei einzelnen Artikeln nicht übernommen – „Rabatte ignorieren“ springt nach Speichern zurück JTL-Wawi 2.0 2
Neu Amazone Prime - DPD Labels können mal wieder nicht erzeugt werden. Amazon-Anbindung - Fehler und Bugs 7
nach Update von 5.3 auf 5.7 neue Position im Warenkorb "Gebühr" die auch in den Auftrag übernommen werden Einrichtung JTL-Shop5 2
Neu Rücknahmebedingungen werden nicht aktualisiert - Widerrufsbutton - V1.11.9 eBay-Anbindung - Fehler und Bugs 1
Neu E-Rechnungen werden von DATEV nicht akzeptiert JTL-Wawi 2.0 1
Neu Rabatte aus dem JTL-Shop werden in der Wawi nur als Netto-Preis übernommen, Rabatt % gehen verloren Onlineshop-Anbindung 0
Eigener Drittshop-Connector (jtl/connector 5.3): valide Variationskombinationen werden mit „besitzt keine Variationen" nicht gesendet JTL-Wawi 1.11 1
Neu Es werden keine Marken ausgedruckt und die Portokasse lässt keine Anmeldung zu. Smalltalk 5
Neu Amazon Bestellungen werden angezeigt aber nicht übernommen User helfen Usern - Fragen zu JTL-Wawi 4
Neu Herstellerbilder werden nicht angezeigt JTL-Shop - Fehler und Bugs 0
Neu Shop-Update auf 5.7.1: Sprachvariablen im Widerrufsformular werden nicht erkannt, obwohl vorhanden?! JTL-Shop - Fehler und Bugs 3
Trackingnummern werden falsch importiert ab 3 Paketen JTL-Wawi 1.10 4
Nach dem Update werden die Drucker nicht mehr erkannt JTL-Wawi 2.0 1
Manche Produkte werden nicht erkannt JTL/ Shopify JTL-Wawi 2.0 3
Neu Muss bei DHL Express ebenfalls was geändert werden, aufgrund DHL 4.0? User helfen Usern - Fragen zu JTL-Wawi 1
Neu GPSR Hersteller werden im Shop nicht angezeigt User helfen Usern - Fragen zu JTL-Wawi 2
Zugriff verweigert nach Umzug auf neuen Rechner, X-Rechnung kann nicht gespeichert werden JTL-Wawi 1.11 4
Kaufland.pl - Aufträge werden nicht importiert. kaufland.de - Anbindung (SCX) 1
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 5
1.11.8 - Mengen aus FBA Umlagerungen werden nicht vom verfügbaren Bestand abgezogen JTL-Wawi 1.11 7
Neu Amazon Lagerbestandsberichte werden nicht abgeholt. Amazon-Anbindung - Fehler und Bugs 9
Eingangsrechnungen mit Einstellung "Nur gelieferte Positionen übernehmen" - Versandkosten werden nicht mit übernommen JTL-Wawi 1.11 4

Ähnliche Themen