Closed sandrotonon closed 9 years ago
haben wir zugiff auf die grosse Datei mit dem der Import schief ging um das zu testen?
sehr komisch. Der Parser ist in Zeile 41 ausgestiegen wegen Speicher voll: da wird die Datei von ISO-8859-1 zu UTF-8 konvertiert damit die regular expression funktioniert und mit Umlaute alles glatt geht. Da gibts glaub nichts zu optimieren. Das ist der quasi komplette Code der hier wichtig ist:
public function __construct($file, $projekt_id) {
$this->_file = $file;
$this->_db = DB::getInstance();
$this->_projektID = $projekt_id;
$this->parse();
}
private function parse() {
$stringFile = file_get_contents($this->_file);
$charset = mb_detect_encoding($stringFile, "UTF-8, ISO-8859-1");
// falls Datei in ISO Format ist muss konvertiert werden.
// falls weitere charsets vorkommen muss iconv() statt utf8_encode benutzt werden
if ($charset === "ISO-8859-1") {
$stringFile = utf8_encode($stringFile);
}
erlaubt sind sind 268435456 bytes = 256MB
Zeile 41 ist $stringFile = utf8_encode...
Eigentlich ist da der Inhalt der Datei maximal 2 mal vorhanden und zwar beides mal in $stringFile. Wobei halt niemand sagen kann was in utf8_encode() passiert. Trotzdem find ich es komisch das wir bei ner knapp 60MB Datei (wenn ich es noch richtig im Kopf hab) die 256MB Grenze sprengen... Das ist immerhin ueber 4 mal so gross... Hab halt keine Ahnung auf was man dann erhoehen sollte. Eventuell muesste man doch auf so ne Line by Line implementierung umsteigen aber ich weiss nicht ob wir das auf die schnelle koennen. http://stackoverflow.com/questions/3171155/least-memory-intensive-way-to-read-a-file-in-php/3171193#3171193
also die ein oder andere Variable kann man vermutlich schon noch freigeben mit unset($variable) sobald sie nicht mehr gebraucht @phwachte denk mal du hast da den besten Ueberblick, sonst koennen wir vielleicht auch Montag nochmal zusammen drueber schauen.
Herr Mauz hat das memory_limit auf dem Server erhöht, zudem verbrauchen wir durch das zeilenweise Einlesen jetzt auch deutlich weniger Speicher, daher closed.
Memory Limit muss hoch gesetzt werden. Da wir zu viel Speicher verbrauchen.