Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hi zusammen,

derzeit lade ich mit einem PHP-Script remote XML/CSV Dateien via cURL auf meinen Server.

  • V-Server
  • Linux
  • php.ini : memory_limit = 80M (nicht zur Laufzeit änderbar)

Download-URL's sehen etwa so aus:

http://download.from.anywhere/?aid=123&type=xml&encoding=utf-8
Das Ganze funktioniert auch soweit wunderbar - zumindest bis zu einer gewissen Grösse (ca. 15MB) der Remote-Datei (deren Grösse ist im Voraus nicht bekannt). Ist die Download-Datei zu gross gibt es regelmässig Fehler dieser Art:
Fatal error: Out of memory (allocated 27787264) (tried to allocate 25392290 bytes) in /home/www/PFAD_ZUM_SCRIPT on line 1234

Kennt jemand eine Möglichkeit die Download-Datei in Einzelschritten von beispielsweise je 10MB herunterzuladen, auf meinem Server wieder zusammenzusetzen um sie dann weiter zu verabeiten?

Vielleicht mit einer cURL-Option die ich bisher übersehen habe, fsockopen oder what ever. Irgendwie fehlt mir im Moment der Schubs in die richtige Richtung. Sehe den Wald vor lauter Bäumen nicht mehr ... Thx im Voraus

Deboril

würden die XML Dateien in PHP ebenfalls weiterverarbeitet werden?

Ich bin zwar in PHP nicht so fit, würde aber vermuten, dass bei der Verwendung der DOM API es dann ebenfalls zu Speicherproblemen kommt.

Wird die Datei bei jedem Aufruf neu generiert? Dann würde es eh denke ich mal schwer werden die Datei in Stücken zu laden.

Ich bin zwar in PHP nicht so fit, würde aber vermuten, dass bei der Verwendung der DOM API es dann ebenfalls zu Speicherproblemen kommt.

Ich denke, das Ding komplett in den Speicher nudeln ist nicht sinnvoll. Hier würde man wohl SAX verwenden und immer stückweise parsen

@dku @flashpixx - die Weiterverarbeitung ist schon sichergestellt. in der Tat wird die dann vorhandenen Datei in handliche Häppchen zerlegt und diese dann im Anchluss in einer schleife mit nem xml_parser bearbeitet. Sobald die Datei - derzeit funzt das mit Grössen bis 2GB - vorhanden ist geht das auch auf nem V-Server.

Derzeit werden die Dateien manuell nach lokal heruntergeladen und dann mit FTP auf den Server kopiert - dann halt der Splitter/Parser manuell anschoben.

Ich werde morgen mal die Variante von lupo49 mit der CURLOPT_RANGE Option versuchen - wobei ich mir da noch nicht ganz sicher wie das mit der EOF Erkennung funzen könnte weil ich halt im Vorfeld die Dateigrösse nicht kenne.

Poste dann wieder - bis dahin erstmal meinen besten Dank

Deboril

Sobald die Datei - derzeit funzt das mit Grössen bis 2GB - vorhanden ist geht das auch auf nem V-Server.

Wäre es nicht sinnvoll vielleicht das Dateiformat einmal zu überdenken, wenn Du solche Datengrößen hast. Du schleppst natürlich bei XML eine Menge Overhead mit herum.

@flashpixx - wohl wahr und gelassen ausgesprochen. Es handelt sich dabei um Produktdaten die als CSV oder XML ausgeliefert werden. Auf das Format habe ich keinen Einfluss und muss nehmen was kommt. Und wenn der Kunde die Möglichkeit für XML-Import wünscht, weil sich das besser "anhört" als schnöder CSV-Import - was soll man machen?

Mal abgesehen davon dass der Datenaustausch innerhalb verschiedener Systeme - wie aktuell gefordert - mit XML dann schon so seine Vorteile hat. OK - das der Kunde derzeit auf nem V-Server hostet lasse ich mal unkommentiert. :)

Also, werde mal weiter machen und ggf. erfolgreichen Vollzug melden :cool:

Deboril

... - wobei ich mir da noch nicht ganz sicher wie das mit der EOF Erkennung funzen könnte weil ich halt im Vorfeld die Dateigrösse nicht kenne.

Du benötigst nicht die absolute Größe der Datei. Bei dem letzten Teilchunk lässt du den Endwert der Range offen.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.