Ich habe folgendes Script und bekomme bei einer Größeren Datei ständig die Fehlermeldung:
Da die Datei aber nur ca. 700 KB gross ist, verstehe ich einfach nicht warum er abbricht.
Die länge einer Zeile in der Datei "Preisliste.txt" überschreitet auch selten 50 Zeichen. Also an der Größe kann es nun wirklich liegen. Ich habe die Datei verkleiner und es mit zehn Zeilen ausprobiert. Dann ging es. Gibt es eine Größenbeschränkung bei fgetcsv? Wohl kaum, oder?
Hier mein Script:
Da ich mehrere Shops betreibe und die Import-Dateien fast immer eine andere Struktur haben, möchte ich mir mit dem Script die Arbeit erleichtern. Ich müßte so nicht ständig die Tabellenstruktur meiner Datenbank ändern, sondern könnte die geänderte Struktur in meinem Script anpassen. Vorher arbeitete ich mit "LOAD DATA LOCAL" von MySQL. Der Import ging ins Sekunden.
Könnt ihr mir sagen, warum mein o. g. Script bei größeren Dateien nicht funzt?
Besten Dank!
PHP-Code:
Fatal error: Allowed memory size of 8388608 bytes exhausted (tried
to allocate 1001 bytes) in var/www/.../class_daten-einlesen.inc.php
on line 13
Die länge einer Zeile in der Datei "Preisliste.txt" überschreitet auch selten 50 Zeichen. Also an der Größe kann es nun wirklich liegen. Ich habe die Datei verkleiner und es mit zehn Zeilen ausprobiert. Dann ging es. Gibt es eine Größenbeschränkung bei fgetcsv? Wohl kaum, oder?
Hier mein Script:
PHP-Code:
class daten_einlesen {
function get_csv($datei, $trennzeichen, $felder) {
$data = array();
$datei = fopen("$datei", "r");
$i = 0;
while($items = fgetcsv($datei, 1000, "$trennzeichen")) {
foreach($felder as $key => $value) {
$data[$i][$value] = "$items[$key]";
}
$i++;
}
return $data;
}
}
$felder = array(
0 => "artikelnum",
1 => "preisgruppe",
2 => "anzahl",
3 => "preis",
4 => "rabatt"
);
$data = new daten_einlesen();
$data = $data->get_csv("preisliste.txt", "\t", $felder);
foreach($data as $key => $value) {
$query = "
INSERT
INTO preisliste
(artikelnum, preisgruppe, anzahl, preis, rabatt)
VALUES('$value[artikelnum]', '$value[preisgruppe]',
'$value[anzahl]', '$value[preis]', '$value[rabatt]')
";
#mysql_query($query);
}
Könnt ihr mir sagen, warum mein o. g. Script bei größeren Dateien nicht funzt?
Besten Dank!
Kommentar