fgetcsv

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • fgetcsv

    Ich habe folgendes Script und bekomme bei einer Größeren Datei ständig die Fehlermeldung:

    PHP Code:
    Fatal errorAllowed memory size of 8388608 bytes exhausted (tried
     to allocate 1001 bytes
    in var/www/.../class_daten-einlesen.inc.php
     on line 13 
    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:

    PHP Code:
    class daten_einlesen {
        function 
    get_csv($datei$trennzeichen$felder) {
            
    $data = array();
            
            
    $datei fopen("$datei""r");
            
            
    $i 0;
            
            while(
    $items fgetcsv($datei1000"$trennzeichen")) {

                foreach(
    $felder as $key => $value) {
                    
    $data[$i][$value] = "$items[$key]";    
                }
                
                
    $i++;
            }

            return 
    $data;
        }
    }

    $felder = array(
        
    => "artikelnum",
        
    => "preisgruppe",
        
    => "anzahl",
        
    => "preis",
        
    => "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);

    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!
    » http://www.htaccess-generator.com

  • #2
    Kann mir denn keiner helfen ;o(
    » http://www.htaccess-generator.com

    Comment


    • #3
      Mir ist nun aufgefallen, dass die Funktion fgetcsv ohne Probleme funktioniert wenn ich das Ganze nicht in einer Klasse schreibe. Gibt es für den Rückgabewert einer Klasse eine Größenbeschränkung?
      » http://www.htaccess-generator.com

      Comment


      • #4
        Kann ich mir nicht vorstellen aber warum du gerade hier eine Klasse verwendet hast, verstehe ich nicht wirklich. Eine normale Function reicht doch völlig aus!
        mens agitat molem

        Comment


        • #5
          PHP Code:
          $data[$i][$value] = "$items[$key]"
          das ist ein Fall für goth

          Comment


          • #6
            ... ja ... solche Trolls können einen echt zur Verzweiflung bringen ... ... ich poste sowas jetzt immer im phpwtf ... natürlich mir Realname des Trolls ... dann können sich noch mehr Leute darüber abrollen ... !
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Comment

            Working...