deboril Geschrieben 22. März 2010 Geschrieben 22. März 2010 Hi zusammen, derzeit lade ich mit einem PHP-Script remote XML/CSV Dateien via cURL auf meinen Server. V-ServerLinuxphp.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 Zitieren
lupo49 Geschrieben 22. März 2010 Geschrieben 22. März 2010 Schau dir mal den Parameter --range an. curl - Linux Command - Unix Command Tip: Download Accelerator for Linux | All about Linux Ansonsten könntest du evt. "http compression" nutzen? Zitieren
dku Geschrieben 22. März 2010 Geschrieben 22. März 2010 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. Zitieren
flashpixx Geschrieben 22. März 2010 Geschrieben 22. März 2010 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 Zitieren
deboril Geschrieben 22. März 2010 Autor Geschrieben 22. März 2010 @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 Zitieren
flashpixx Geschrieben 22. März 2010 Geschrieben 22. März 2010 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. Zitieren
deboril Geschrieben 23. März 2010 Autor Geschrieben 23. März 2010 @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 Zitieren
lupo49 Geschrieben 23. März 2010 Geschrieben 23. März 2010 ... - 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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.