Checkout: Error 500

Hallo nachdem wir unseren Shop Schrittweise von 5.5.x auf 5.7.11 geupdated haben, hat beim letzten Sprung auf die 5.7er scheinbar was nicht so richtig geklappt.

1, Beim Sprung über die Sidebar (Warenkorb an der rechten Seite) in den Warenkorb (Warenkorb bearbeiten) → /checkout/cart

Kommt ein Error 500.

  1. Beim Weg über „Zur Kasse“ → /checkout/shippingPayment
    Kann man sich auch registrieren oder anmelden. Nach auswahl der Zahlart und dem bestätigen mit weiter, erfolgt beim Aufruf von „Warenkorb | TESO Shop“ auch ein 500er Error.

Auszug aus dem Error-Log:

2022/06/02 12:40:46 [error] 8505#8505: *1273180 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 46.114.144.62, server: teso-shop.de, request: "GET /rolladenzubehoer/rolladensteuerung/640/multitec-touch-868-smart-home-von-elero?number=e287150001&gclid=CjwKCAjwv-GUBhAzEiwASUMm4q5-UVj25v2PDh5VA-1Wc8bVK-LVBHM9SOPz4sdTAFElNR5kFt5HoxoCF1YQAvD_BwE HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de", referrer: "https://www.google.com/"
2022/06/02 12:41:07 [error] 8509#8509: *1273192 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 66.249.66.33, server: teso-shop.de, request: "GET /insektenschutz/fliegengitter-profile/fuer-spannrahmen/453/fliegengitterprofil-mit-buerste-zum-fenster?number=TE6258_9016 HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de"
2022/06/02 12:41:09 [error] 8516#8516: *1273197 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 66.249.66.11, server: teso-shop.de, request: "GET /rolladenzubehoer/rolladenantrieb/654/elero-jalousieantrieb-mit-doppelseitigem-antrieb/softbremse-ja-06-soft/ja-09-soft?number=352040003 HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de"
2022/06/02 12:41:31 [error] 8510#8510: *1273217 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 84.136.229.194, server: teso-shop.de, request: "GET /rolladenzubehoer/gurtwickler/45/selve-mini-gurtwickler-aufputz-schwenkbar-ohne-gurt HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de", referrer: "https://teso-shop.de/search?sSearch=084601"
2022/06/02 12:41:43 [error] 8516#8516: *1273242 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 114.119.138.151, server: teso-shop.de, request: "GET /rolladenzubehoer/gurtwickler/39/selve-mini-gurtwickler-schwenkbar-mit-5-m-gurt-15-mm-breit?c=13 HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de", referrer: "https://teso-shop.de/rolladenzubehoer/?p=11"
2022/06/02 12:41:44 [error] 8508#8508: *1273246 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 66.249.66.81, server: teso-shop.de, request: "GET /insektenschutz/insektenschutz-zubehoer/520/ersatzgewebe-fuer-insektenschutz-tuer-rollos?number=TE06040101_9005 HTTP/1.1", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de"
2022/06/02 12:41:49 [error] 8502#8502: *1273251 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Shopware\Components\Template\HtmlMinCompressor::minify() must be of the type string, null returned in /var/www/clients/client3/web8/web/engine/Shopware/Components/Template/HtmlMinCompressor.php:31
Stack trace:
#0 /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php(181): Shopware\Components\Template\HtmlMinCompressor->minify()
#1 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/Handler/Plugin.php(155): Shopware_Plugins_Frontend_Seo_Bootstrap->onFilterRender()
#2 /var/www/clients/client3/web8/web/engine/Library/Enlight/Event/EventManager.php(291): Enlight_Event_Handler_Plugin->execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(184): Enlight_Event_EventManager->filter()
#4 /var/www/clients/client3/web8/web/engine/Library/Enlight/Controller/Plugins/ViewRenderer/Bootstrap.php(207): Enlight_Controller_Plugins_ViewRender" while reading response header from upstream, client: 54.36.148.201, server: teso-shop.de, request: "GET /rolladenzubehoer/zubehoer/84/selve-wellenadapter-fuer-baureihe-2-sw-60 HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de"
2022/06/02 12:41:58 [error] 8507#8507: *1273267 openat() "/var/www/teso-shop.de/web/themes/Backend/ExtJs/backend/_resources/images/icons/ico_growl.png" failed (2: No such file or directory), client: 5.9.118.114, server: teso-shop.de, request: "GET /themes/Backend/ExtJs/backend/_resources/images/icons/ico_growl.png HTTP/1.1", host: "teso-shop.de", referrer: "https://teso-shop.de/backend/"
2022/06/02 12:42:40 [error] 8513#8513: *1273396 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 339684816 bytes) in /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php on line 201" while reading response header from upstream, client: 79.252.84.196, server: teso-shop.de, request: "GET /checkout HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de", referrer: "https://teso-shop.de/checkout/shippingPayment"
2022/06/02 12:44:46 [error] 8504#8504: *1273612 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '658-1' for key 'element_id_shop_id' in /var/www/clients/client3/web8/web/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php:117
Stack trace:
#0 /var/www/clients/client3/web8/web/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(117): PDOStatement->execute()
#1 /var/www/clients/client3/web8/web/engine/Library/Zend/Db/Statement/Pdo.php(219): Doctrine\DBAL\Driver\PDOStatement->execute()
#2 /var/www/clients/client3/web8/web/engine/Library/Zend/Db/Statement.php(297): Zend_Db_Statement_Pdo->_execute()
#3 /var/www/clients/client3/web8/web/engine/Library/Zend/Db/Adapter/Abstract.php(472): Zend_Db_Statement->execute()
#4 /var/www/clients/client3/web8/web/engine/Library/Zend/Db/Adapter/Pdo/Abstract.php(232): Zend_Db_Adapter_Abstract->query()
#5 /var/www/clients/client3/web8/web/engine/Library/Enlight/Components/Db/Adapter/Pdo/Mysql.php(82): Zend_Db_Adapter_Pdo" while reading response header from upstream, client: 79.252.84.196, server: teso-shop.de, request: "GET / HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de"
2022/06/02 12:53:52 [error] 8516#8516: *1274330 openat() "/var/www/teso-shop.de/web/themes/Backend/ExtJs/backend/_resources/images/icons/ico_growl.png" failed (2: No such file or directory), client: 5.9.118.114, server: teso-shop.de, request: "GET /themes/Backend/ExtJs/backend/_resources/images/icons/ico_growl.png HTTP/1.1", host: "teso-shop.de", referrer: "https://teso-shop.de/backend/"
2022/06/02 12:54:57 [error] 8513#8513: *1274510 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 275829320 bytes) in /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php on line 201" while reading response header from upstream, client: 109.43.49.227, server: teso-shop.de, request: "GET /checkout/cart HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de", referrer: "https://teso-shop.de/insektenschutz/insektenschutz-zubehoer/59/gummikeder-fuer-insektenschutzgewebebefestigung-als-meterware?number=SW10042"
2022/06/02 12:59:43 [error] 8513#8513: *1274741 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 275681624 bytes) in /var/www/clients/client3/web8/web/engine/Shopware/Plugins/Default/Frontend/Seo/Bootstrap.php on line 201" while reading response header from upstream, client: 109.43.49.227, server: teso-shop.de, request: "GET /checkout HTTP/2.0", upstream: "fastcgi://unix:/var/lib/php5-fpm/web8.sock:", host: "teso-shop.de", referrer: "https://teso-shop.de/checkout/shippingPayment"

PHP: 7.4.29
SW: 5.7.11
Hoster: Timmehosting

Hat hier jemand ggf. eine Idee? Wir haben auch schon das Standard-Theme probiert, sowie den "Sicherheitsmodus im Plugin-Manager aktiviert…

Hier wurden mehere Fehlermeldungen gepostet. Welche gehört denn jetzt genau zum Warenkorb?
Das müsstest du noch mal bitte schauen. Auch wenn möglich alle Logs durchgehen, also Shopware Log und Server Log.

PS: Euer Fenster „Bausätze als Maßanfertigung“ sollte NICHT über das Fenster vom Cookie-Hinweis gehen!

Ich denke da ist ein Fehler beim Ausführen der Regex in Funktion minify von HtmlMinCompressor.php. Hier wird preg_replace aufgerufen, und das liefert nur dann null wenn ein Fehler auftrat:

preg_replace() returns an array if the subject parameter is an array, or a string otherwise.

If matches are found, the new subject will be returned, otherwise subject will be returned unchanged or null if an error occurred.

Das ist natürlich nicht sauber programmiert - das müsste z.B. wie folgt geändert werden:

public function minify(string $content): string
{
   $minified = preg_replace('#(?ix)(?>[^\S ]\s*|\s{2,})(?=(?:(?:[^<]++|<(?!/?(?:textarea|pre|script)\b))*+)(?:<(?>textarea|pre|script)\b|\z))#', ' ', $content);

   if (is_null($minified) {
      return $content;
   } else {
      return $minified;
   }
}

Damit würde immer das Original-HTML zurückgegeben werden, falls beim Strippen der überflüssigen Whitespaces etc. irgendwas schief geht.

LG Phil

Hallo ihr beiden…

@R4M - danke den Hinweis werden wir direkt mal verschieben…

@phil - die HtmlMinCompressor.php ist doch Teil von Shopware… kommt also von keinem externen Theme oder Plugin. Das Problem müssten doch dann andere auch haben oder?

Wo müssten die von dir vorgeschlagenen Änderungen vorgenommen werden?

Grüße

die HtmlMinCompressor.php ist doch Teil von Shopware… kommt also von keinem externen Theme oder Plugin. Das Problem müssten doch dann andere auch haben oder?

Korrekt. Kommt halt auf den HTML Code an, der minified werden soll - vielleicht ist dieser ja auch fehlerhaft, so dass die Regex aussteigt. Kann aber auch Speicher etc. sein.

Wo müssten die von dir vorgeschlagenen Änderungen vorgenommen werden?

Na in der HtmlMinCompressor.php - die besteht ja nur aus dieser Funktion.

LG Phil

Hm, bei preg_replace() ist es eigentlich so, egal ob das Suchmuster passt oder nicht, da wird nie ein Error 500 zurückkommen. Und wenn das Pattern nicht greift, passiert gar nichts. Die jetzige Zeile in Shopware macht aus meiner Sicht keine Probleme und verursacht auch kein Error 500.

Anmerkung:

Aufgrund der Tatsache, dass oben mehere Fehlermeldungen sind wie z.B. „Allowed memory size of 536870912“ (Speicher reicht nicht aus) sollten diese auch kontrolliert werden! Diese Meldung verursacht auch ein Error 500.

512MB sollen nicht reichen?
Der Kompressor stand schon früher in der Kritik.
Kommt der Fehler IMMER in der Cart?
Wenn ein Dropdown zur Mengenauswahl viele Werte anbietet - und dann auch mehr als ein Arikel im Warenkorb liegt - kann der Kompressor schon gerne mal knallen - war ganz am Angang als der eingeführt wurde, meine ich, auch schon ein Thema im Forum.
Das Ding entfernt nach „eigenen Angaben“ eh nur Leerzeichen und Zeilenumbrüche - und wird bei „vielen Element unperformant“.

In „caches / Performance“ → „Einstellungen“ → „Verschiedenes“ abschalten und sich die Cart mal so im Quellcode angucken.

@sonic - habe es eben probiert zu deaktivieren, jedoch auch danach keine verbesserung… es kommt der 500er sobald ich mir den warenkorb anzeigen lassen will.

Auch alles Caches danach geleert, insbesondere den Konfigurations-Cache?

Sehe gerade, dass in den Details schon keine Dropdowns sind, sondern ein Nummerneingabe-Plugin. Wenn das Plugin von dem Hersteller ist, von dem ich so eins mal getestet habe, wäre das mein erster Favorit…

Da hilft nur eins:
Einzeln testweise Plugins deaktivieren, alles Caches leeren und durchtesten.

Problem war das „neue Plugin“ - Produkt Konfigurator von Borucinski Grafix (bogx)…

Sorry R4M, aber da muss ich widersprechen. Der 500er ist die Folge einer nicht abgefangenen Exception. Die Ursache ist jedoch - wie aus dem Log klar ersichtlich - dass minify (und somit preg_replace) null zurückgeben. Siehe mein Zitat aus der Doku - bei Fehler kann preg_replace null liefern, daher ist das nicht sauber implementiert. Entweder fängt man den Fehler eine Ebene drüber mit try-catch, oder halt - wie von mir vorgeschlagen - stellt sicher, dass niemals null zurückkommt.

Dass der Speichermangel durch ein Plugin verursacht wurde mag das Problem kaschieren, aber wie sonic ja bereits aufgeführt hat, kann die regex bei einer sehr umfangreichen HTML durchaus mal Amok laufen. Dieses Problem ist seit langem bekannt, vgl. erste Antwort in php - Minifying final HTML output using regular expressions with CodeIgniter - Stack Overflow und den in den Kommentaren enthaltenen Hinweis auf php - RegExp in preg_match function returning browser error - Stack Overflow

LG Phil

@phil - wir werden mal @bogx informieren, ggf. liegt es am Plugin oder einer Fehlkonfiguration dessen seitens unserer Seite.

Danke dennoch für eure Mithilfe :slight_smile:

Dort scheint wohl nur „$content“ keinen Inhalt zu haben, warum auch immer. Für mich ist die Funktion mit dem Regexp nach wie vor nicht falsch, denn wenn bei „$content“ nichts drin ist, kann auch nichts raus kommen :slight_smile: