2016-08-29 2 views
0

Ich habe eine ICS-Datei, die 2 GB groß ist und ich möchte ics Daten aus dieser Datei analysieren, aber PHP ist nicht in der Lage, so große Datei zu lesen, und ich bekomme fatalen Fehler "Out of Memory "sogar ich habe gesetzt" ini_set ('memory_limit', '-1') ". Also ich möchte irgendwie große ICS-Datei in kleine Datei brechen oder aufteilen oder gibt es eine Möglichkeit, die Daten aus einer so großen ICS-Datei zu lesen.PHP-Break oder Split eine große ICS-Datei

Ich habe einige kleine Dateien und alle funktionieren gut und ich kann Daten aus anderen Dateien extrahieren, aber 2GB große ICS-Datei ist wichtiger für mich zu extrahieren/zu analysieren.

Vielen Dank im Voraus

+0

so lesen Sie nicht alles auf einmal. parse es Zeile für Zeile, bis Sie ein "Ende der Aufzeichnung" erreichen. dann weißt du, dass du eine komplette Aufzeichnung gelesen hast und sie verarbeiten kannst. –

+0

Ihre Idee klingt gut. Können Sie ein Beispiel geben, um diese große ICS-Datei Zeile für Zeile zu lesen? –

+0

'$ fh = fopen (...); while ($ line = fgets ($ fh)) {... mach was ...} ' –

Antwort

0

Übliche Verfahren Out of memory Ausnahme zu behandeln ist durch mehr RAM Zuweisung in php.ini Datei auf php, sondern weil Sie eine Datei von 2 GB das ist keine gültige Option, wenn Sie eine Menge Speicher auf Ihrem System . Im Grunde versuchen Sie, die Datei falsch zu lesen. Anstatt die gesamte Datei zu lesen und sie in einer Variablen zu speichern, die einen RAM-Wert kostet, der der Dateigröße entspricht, werden sie je nach Format der Datei, in der Sie gerade arbeiten, nach Zeilen oder Bytes sortiert. Hier ist ein grundlegendes Beispiel, dass Sie arbeiten können

<?php 
$handle = fopen("fileName", "r"); 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     // process line here 
    } 

    fclose($handle); 
} else { 
    // handle file read error 
} 
?> 

Ich hoffe, dies hilft Ihnen.

+0

Yup, um eine große Datei zu lesen, kostet mehr RAM zum System. So schliesse ich 2bg ICS Datei zu kleinen mit je 1000 Zeilen und jetzt habe ich etwa 3000 geteilte Dateien von großen. Anyways danke für die Hilfe :) –