Wir migrieren gerade von Shopware zu JTL und sind dabei - wegen des Umfangs und unserer Kundengruppen - in mehreren Durchgängen einige Tausend Kundendaten zu importieren; zur Vermeidung von Timeouts in Batches zu je 500 Datensätzen.
Aus unerfindlichen Gründen hatten wir dann bei einigen Dateien 500er Fehler; laut Server Error- Log, weil für das Feld "cMail" ein NULL übergeben wurde.
Nach längerem hin- und herprobieren (z.B. Windows- oder Unix-Zeilendenden und falsche Zeichencodierung - die CSV muss UTF-8 sein!) haben wir dann die Ursache gefunden:
Das Import-Skript erkennt nicht, wenn unterhalb der Daten versehentlich eine extra Leerzeile hängt! Und da man aus einer Leerzeile natürlich kein "cMail" extrahieren kann (und die Datei noch nicht EOF, also am Ende ist), kommt es zum Crash.
Behebt man den "Fehler" durch löschen der Extra-Leerzeile und importiert nochmal, funktioniert's - und es werden alle Email-Adressen als bereits vorhanden erkannt. Der vorangegangene Crash erfolge also an genau dieser Stelle.
Ernsthaft - eine Leerzeile zu erkennen und einfach zu überspringen ist nun wirklich keine Kunst!
Ich weiß nicht, wie das interne Skript arbeitet; wir verwenden für unsere lokalen Skripte (mit denen wir z.B. die Shopware-CSV in getrennte Dateien für die Kundengruppen aufsplitten) fgetcsv() - aber auch damit lässt sich prüfen, ob leere Werte übergeben werden. Und die Funktion zum Schreiben wird dann halt nur aufgerufen, wenn auch Daten vorhanden sind. So ein simpler Fehler sollte wirklich keinen 500er verursachen!
Aus unerfindlichen Gründen hatten wir dann bei einigen Dateien 500er Fehler; laut Server Error- Log, weil für das Feld "cMail" ein NULL übergeben wurde.
Nach längerem hin- und herprobieren (z.B. Windows- oder Unix-Zeilendenden und falsche Zeichencodierung - die CSV muss UTF-8 sein!) haben wir dann die Ursache gefunden:
Das Import-Skript erkennt nicht, wenn unterhalb der Daten versehentlich eine extra Leerzeile hängt! Und da man aus einer Leerzeile natürlich kein "cMail" extrahieren kann (und die Datei noch nicht EOF, also am Ende ist), kommt es zum Crash.
Behebt man den "Fehler" durch löschen der Extra-Leerzeile und importiert nochmal, funktioniert's - und es werden alle Email-Adressen als bereits vorhanden erkannt. Der vorangegangene Crash erfolge also an genau dieser Stelle.
Ernsthaft - eine Leerzeile zu erkennen und einfach zu überspringen ist nun wirklich keine Kunst!
Ich weiß nicht, wie das interne Skript arbeitet; wir verwenden für unsere lokalen Skripte (mit denen wir z.B. die Shopware-CSV in getrennte Dateien für die Kundengruppen aufsplitten) fgetcsv() - aber auch damit lässt sich prüfen, ob leere Werte übergeben werden. Und die Funktion zum Schreiben wird dann halt nur aufgerufen, wenn auch Daten vorhanden sind. So ein simpler Fehler sollte wirklich keinen 500er verursachen!