Guten Tag,
seit dem Upgrade von JTL-Shop 5.7.2 auf 5.8.0 tritt bei uns beim letzten Schritt des Checkouts / Absenden der Bestellung reproduzierbar ein HTTP-500-Fehler auf.
Mit JTL- Shop 5.7.2 funktionierte der Shop mit derselben Umgebung problemlos.
Umgebung:
Fehlermeldung im Logbuch:
Die Exception wird in
ausgelöst.
In JTL-Shop 5.8.0 wird die Lock-Datei folgendermaßen geöffnet:
Wir konnten das Problem direkt reproduzieren:
Das heißt: flock() schlägt bei nummern.lock fehl, wenn die Datei mit rb geöffnet wird. Mit r+b funktioniert der Lock.
Bestätigung durch Workaround:
Wir haben testweise
auf
geändert.
Danach war der HTTP-500-Fehler im letzten Checkout-Schritt sofort behoben und Bestellungen konnten wieder abgeschlossen werden.
Da JTL-Shop 5.7.2 mit PHP 8.4.25 und derselben NFS4-Umgebung problemlos funktioniert hat, vermuten wir eine Änderung bzw. einen Fehler im Locking-Code von JTL-Shop 5.8.0.
Bitte prüfen Sie, ob die Verwendung von rb für NUMMERN_LOCKFILE in Checkout/Nummern.php beabsichtigt ist bzw. ob hierfür ein anderer Öffnungsmodus verwendet werden sollte.
Vielen Dank!
seit dem Upgrade von JTL-Shop 5.7.2 auf 5.8.0 tritt bei uns beim letzten Schritt des Checkouts / Absenden der Bestellung reproduzierbar ein HTTP-500-Fehler auf.
Mit JTL- Shop 5.7.2 funktionierte der Shop mit derselben Umgebung problemlos.
Umgebung:
- JTL-Shop 5.8.0
- PHP 8.4.25
- Apache 2.4.58 / Ubuntu
- Shop-Dateisystem inkl. jtllogs: NFS4
- Lock-Datei: jtllogs/nummern.lock
Fehlermeldung im Logbuch:
Code:
Routing error: Could not lock the thread-safe number provider
Die Exception wird in
Code:
includes/src/Checkout/Nummern.php:66
In JTL-Shop 5.8.0 wird die Lock-Datei folgendermaßen geöffnet:
Code:
$this->filePointer = \fopen(\NUMMERN_LOCKFILE, 'rb');
return $this->filePointer !== false && \flock($this->filePointer, \LOCK_EX);
Wir konnten das Problem direkt reproduzieren:
Code:
rb: bool(false)
r+: bool(true)
r+b: bool(true)
c: bool(true)
c+: bool(true)
Das heißt: flock() schlägt bei nummern.lock fehl, wenn die Datei mit rb geöffnet wird. Mit r+b funktioniert der Lock.
Bestätigung durch Workaround:
Wir haben testweise
Code:
fopen(\NUMMERN_LOCKFILE, 'rb')
Code:
fopen(\NUMMERN_LOCKFILE, 'r+b')
Danach war der HTTP-500-Fehler im letzten Checkout-Schritt sofort behoben und Bestellungen konnten wieder abgeschlossen werden.
Da JTL-Shop 5.7.2 mit PHP 8.4.25 und derselben NFS4-Umgebung problemlos funktioniert hat, vermuten wir eine Änderung bzw. einen Fehler im Locking-Code von JTL-Shop 5.8.0.
Bitte prüfen Sie, ob die Verwendung von rb für NUMMERN_LOCKFILE in Checkout/Nummern.php beabsichtigt ist bzw. ob hierfür ein anderer Öffnungsmodus verwendet werden sollte.
Vielen Dank!