Shopware 5.7 und PHP 8

Hallo @SmartStylez

kannst du das ein bisschen genauer beschreiben? Was bekommst du für eine Fehlermeldung?

Viele Grüße aus Schöppingen
Michael Telgmann

@Michael_Telgmann

[Tue Oct 19 13:54:35.534982 2021] [proxy_fcgi:error] [pid 7390] [client] AH01071: Got error ‚PHP message: PHP Fatal error: Uncaught Error: Call to undefined function Shopware\Components\opcache_get_status() in /var/www/vhosts/domain.de/httpdocs/engine/Shopware/Components/CacheManager.php:418\nStack trace:\n#0 /var/www/vhosts/domain.de/httpdocs/engine/Shopware/Controllers/Backend/Cache.php(83): Shopware\Components\CacheManager->getOpCacheCacheInfo()\n#1 /var/www/vhosts/domain.de/httpdocs/engine/Library/Enlight/Controller/Action.php(182): Shopware_Controllers_Backend_Cache->getInfoAction()\n#2 /var/www/vhosts/domain.de/httpdocs/engine/Library/Enlight/Controller/Dispatcher/Default.php(461): Enlight_Controller_Action->dispatch()\n#3 /var/www/vhosts/domain.de/httpdocs/engine/Library/Enlight/Controller/Front.php(225): Enlight_Controller_Dispatcher_Default->dispatch()\n#4 /var/www/vhosts/domain.de/httpdocs/engine/Shopware/Kernel.php(197): Enlight_Controller_Front->dispatch()\n#5 /var/www/vhosts/domain.de/httpdocs/vendor/symfony/http-kernel/HttpCache/SubRequestHandler…‘, referer: https://domain.de/backend/

Hallo @SmartStylez,

Du verwendest offenbar eine Plesk Umgebung - die Funktion opcache_get_status ist da standardmässig aus Sicherheitsgründen deaktiviert, da andernfalls im Shared Hosting der OPCache von anderen Kunden ausgelesen werden könnte.

Falls Du einen vServer/dedizierten Server hast, kannst Du unter PHP Einstellungen in Plesk bei Disable Functions das rauslöschen, dann wird Dir der OPCache Status im Backend auch korrekt angezeigt.

Viele Grüße

Hallo @SmartStylez

sieht so aus, als ob du die OPcache PHP Extension nicht korrekt installiert/konfiguriert hast für die PHP Version, die du gerade im Einsatz hast.

Hier wird geschaut, ob die Extension aktiv, aber danach wir die Function nicht gefunden.
Da solltest du mal mit deinem Hoster sprechen.

Viele Grüße aus Schöppingen
Michael Telgmann

1 „Gefällt mir“

@SCOOPEX @Michael_Telgmann Vielen Dank für eure Antworten. Da es sich um einen offiziellen Hoster handelt und der Fehler mit PHP 7.4 nicht auftritt, werde ich dort einfach man nachhören.

Gibt es eigentlich einen driftigen Grund, warum man unbedingt PHP 8.0 braucht oder ist das mehr so eine Muskelbeschau?

Kommt drauf an, wie lange Du noch einen Shop betreiben möchtest.
Mit PHP 7.4 ist ende 2022 Supportende. Wenn Du darüber hinaus noch weiter einen Shop „sicher“ betreiben möchtest, ist ab dann eigentlich PHP 8.x Pflicht.

https://www.php.net/supported-versions.php

Frag Deinen Hoster, wann er Dir PHP 7.4 abdreht.

Ja, natürlich, ich vergaß. Wird ja von heute auf morgen alles unsicher, weil PHP so meint.

Werd mich mal an die Arbeit machen, alles konform zu betreiben: Winterreifen, TV Geräte, VU+, Windows 7 Geräte (und Windows 10 auch gleich dazu inkl. 15 Computer), Netzwerkspeicher, Telefone, PHP Versionen, Shopware 5 auf 6, Drucker haue ich auch alles raus, Shop wird sowieso gleich auf 6 upgegradet, die neusten Schuhe kaufe ich mir auch noch und der Ölbrenner folgt nächstes Wochenende zusammen mit den Fortigates.

Damit man nur ja uptodate ist, wie uns die Industrie und der Rest verklickern.

Leute wie Du machen es dem IDO ja so leicht… Kopf schüttel

Hast du den Thread hier gelesen, wie super stabil PHP 8 mit SW 5 läuft?

kopfschüttel

Noch kannst du ja PHP 7.4 nutzen bis die Fehler beseitigt sind.

Ich brauch den Thread nicht zu lesen, ich habe Testshops, in denen ich testen kann. Meine kleinen Helferlein laufen sauber unter SW 5.7.x und PHP 7.4. Um diese auch PHP 8 fit zu machen, habe ich also noch ein paar Monate zeit. Und da ein für mich wesentlicher Bug in SW 5.7.4 behoben wurde, sehe ich für mich auch keinen Grund mehr, noch wesentlich länger bei SW 5.6.10 zu bleiben (ausser Zeitmangel). Läuft ja auch unter PHP 7.4 - wirst ja nicht gezwungen, SW 5.7 mit PHP 8 zu betreiben.

Ich verstehe nicht: SW 5.7.4 hat einen Bug? Kann doch wohl kaum sein, ist ja neu. Aber egal, sei’s wie’s sei, ich rede niemanden drein. Ich habe derzeit für die Updateorgien keine Zeit, ich muss mit meinem Shop Umsatz machen. Und für Staging Systeme wegen einem Update fehlt mir einfach die Zeit, die ich dafür opfern möchte.

Hey, hast du dafür eine Lösung gefunden?
Hab eben auch auf PHP8 umgestellt, aber zu $sArticle|@shippingcost finde ich keine :frowning:

Guten Tag. Leider nicht. Die Berechnung mithilfe von „@shoppingcost“ zerschießt nach wie vor den Export.
Hast Du eine Lösung dafür?

LG

Edit:

<b>Fatal error</b>:  Uncaught TypeError: round(): Argument #1 ($num) must be of type int|float, string given in /home/folder/staging.mydomain.de/engine/Shopware/Core/sExport.php:1872
Stack trace:
#0 /home/folder/staging.mydomain.de/engine/Shopware/Core/sExport.php(1872): round()
#1 /home/folder/staging.mydomain.de/engine/Shopware/Core/sExport.php(1581): sExport->sGetArticlePremiumShippingcosts()
#2 /home/folder/staging.mydomain.de/var/cache/production_202303281109/templates/export_4/cd/b6/73/cdb6730b151be8012348473e1ac662568cdeae7c.string.php(60): sExport->sGetArticleShippingcost()
#3 /home/folder/staging.mydomain.de/engine/Library/Smarty/sysplugins/smarty_internal_templatebase.php(180): content_6426b312343579_38303178()
#4 /home/folder/staging.mydomain.de/engine/Shopware/Core/sExport.php(1267): Smarty_Internal_TemplateBase->fetch()
#5 /home/folder/staging.mydomain.de/engine/Shopware/Controllers/Backend/Export.php(136): sExport->executeExport()
#6 /home/folder/staging.mydomain.de/engine/Shopware/Controllers/Backend/Export.php(68): Shopware_Controllers_Backend_Export->generateExport()
#7 /home/folder/staging.mydomain.de/engine/Library/Enlight/Controller/Action.php(187): Shopware_Controllers_Backend_Export->indexAction()
#8 /home/folder/staging.mydomain.de/engine/Library/Enlight/Controller/Dispatcher/Default.php(467): Enlight_Controller_Action->dispatch()
#9 /home/folder/staging.mydomain.de/engine/Library/Enlight/Controller/Front.php(226): Enlight_Controller_Dispatcher_Default->dispatch()
#10 /home/folder/staging.mydomain.de/engine/Shopware/Kernel.php(197): Enlight_Controller_Front->dispatch()
#11 /home/folder/staging.mydomain.de/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php(85): Shopware\Kernel->handle()
#12 /home/folder/staging.mydomain.de/vendor/symfony/http-kernel/HttpCache/HttpCache.php(479): Symfony\Component\HttpKernel\HttpCache\SubRequestHandler::handle()
#13 /home/folder/staging.mydomain.de/engine/Shopware/Components/HttpCache/AppCache.php(270): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward()
#14 /home/folder/staging.mydomain.de/vendor/symfony/http-kernel/HttpCache/HttpCache.php(269): Shopware\Components\HttpCache\AppCache->forward()
#15 /home/folder/staging.mydomain.de/engine/Shopware/Components/HttpCache/AppCache.php(106): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass()
#16 /home/folder/staging.mydomain.de/shopware.php(122): Shopware\Components\HttpCache\AppCache->handle()
#17 {main}
  thrown in <b>/home/folder/staging.mydomain.de/engine/Shopware/Core/sExport.php</b> on line <b>1872</b><br />

round() seit PHP8.0: „Der zu rundende Wert akzeptiert keine internen Objekte mehr, die eine numerische Konvertierung unterstützen.“
Quelle: PHP: round - Manual

Tut mir leid, ich schon wieder. :innocent:

Durch folgende Änderung in der Datei „engine/Shopware/Core/sExport.php“ bekomme ich in unseren Feeds nun die richtige Berechnung.

Zeile 1872 von
$from = round($basket['calculation_value_' . $dispatchData['id']], 2);
geändert zu
$from = round((int)$basket['calculation_value_' . $dispatchData['id']], 2);

Zu darüber hinausgehenden Folgen kann ich leider nichts sagen.
LG