Probleme mit Dateiupload!!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit Dateiupload!!

    Hallo!

    Ich habe ein Problem, mit dem ich selber nicht zurechtkomme!

    Ich will nämlich eine 5.615.665 Bytes große Datei mittels PHP Upload zum Server hochladen und dort in einen String einlesen.

    Funtkioniert auch, hochgeladen wird sie aber dann kommt diese Fehlermeldung.

    Fatal error: Allowed memory size of 16777216 bytes exhausted at (null):0 (tried to allocate 35 bytes) in /home/htdocs/web203/html/op/ago/eu/eu_ago/admin/nl.db.import.php on line 180
    Das Script hat mit kleinen Datein bis jetzt immer funktioniert!!!
    was ich nicht verstehe:
    "Allowed memory size of 16777216 bytes" wird doch eh nicht überschritten!

    und "nl.db.import.php" hat keine 180 zeilen! sondern nur 129. wie kann dann hier ein Fehler sein?

    Ich hab eben keine Ahnung wo der Fehler liegt und was ich tun kann!

    Checkt das wer ab?

    lg shebaka

  • #2
    poste doch mal dein script...
    Life goes on !

    Kommentar


    • #3
      Danke, dass du mir hilfst!!

      PHP-Code:
      <body>

       <div align="center">

        <h4>Bitte laden sie die Datei mit den Email Adressen auf den Server:</h4>

      <form

        action="<?php echo $_SERVER['PHP_SELF']; ?>"

        method="post"

        enctype="multipart/form-data">

      <input type="file" name="memberlist" />

      <input type="submit" name="uppen" value="Los!" />

      </form>

       </div>

      <hr>

      <?php
       
      // Grundconfig wird übernommen
       
      include('config.php');    

       
      // Variablen werden definiert
       
      $datei_name "new_member_list.tmp";
       
      $datei_name_pfad "temp/new_member_list.tmp";

       
       
      // wenn uppen mit einem beliebigen wert belegt ist, wird die schleife durchlaufen!
       
      if($uppen)
       {
          
      // $memberlist
          
      if(isset($memberlist) && $memberlist!="none"
           {
               
      move_uploaded_file($memberlist"/home/htdocs/web203/html/op/ago/eu/eu_ago/admin/temp/".$datei_name);
               echo
      "<div align='center'> Die importierte Datei ist " filesize($datei_name_pfad) . " Bytes groß. </div>";

               
      $bb "1";
           }
         else
           {
               echo
      "Bitte geben Sie eine Datei an!";
           }
       }
       if (
      $bb == "1"
         {
          
      $fh fopen($datei_name_pfad'r') or die($php_errormsg);
          
      $dateiinhalt fread($fhfilesize($datei_name_pfad));
          
          echo(
      "<hr><div align='left'><h3>Folgende Email Adressen wurden der Datei entnommen und zur Datenbank hinzugefügt:</h3></div>");    

          
      $gb_such ";";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt);

          
      $gb_such " ";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt);

          
      $gb_such "";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt);

          
      $gb_such "?";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt);

          
      $gb_such "\r";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt);

          
      $gb_such "\n";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt); 
       
          
      $gb_such "ÿþ";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt); 

          
      $gb_such "";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt); 
          
          
      $gb_such "";
          
      $gb_ersetze "";
          
      $dateiinhalt str_replace($gb_such$gb_ersetze$dateiinhalt);     

          
      $array explode("\"",$dateiinhalt); for($x=0;$x<count($array);$x++){  

          if (
      $array[$x] == TRUE)
           {
                  
            
      mysql_query("INSERT INTO `newsletter` ( `email` , `aktiv` , `abhost` , `abip` , `abdate` , `abtime` )
      VALUES (
      '
      $array[$x]', '', '', '', '', ''
      );"
      );
           
           echo(
      "<div align='left'>".$array[$x]."</div>\n");    
           
           }

          
          
          
         }
        
        echo(
      "<hr><h4><div align='center'>fertig!</div></h4>");
       }

       
      ?>

      </body>

      Kommentar


      • #4
        Allowed memory size of

        Hallo shebaka,

        ich habe die LÖSUNG (jedenfalls funktioniert's bei mir, siehe ganz unten)!!!

        Da ich einen eigenen Entwicklungsserver (Suse-Linux und Apache mit xampp) betreibe, kann ich jederzeit auch die Serverkofiguration ändern.

        Vor ein paar Tagen hatte ich folgende Fehlermeldung:

        "Allowed memory size of 8388608 bytes exhausted tried to allocate 49099 bytes"

        Ich versuchte über phpmyadmin einen größeren DB-Dump als SQL einzufügen (ca 10.000 Datensätze). Dann versuchte ich's mit 4.000 und dann runter bis 1.000 Datensätze, die gingen dann ohne Probleme.

        Dann schaute ich mir die Serverkonfiguration an (die Zahl 8388608), die gibts in der php.ini (Verzeichnis: /opt/lampp/etc/) und zwar "8M" in der Variablenzuweisung

        siehe Ausschnitt (in der Datei: php.ini):
        ;;;;;;;;;;;;;;;;;;;
        ; Resource Limits ;
        ;;;;;;;;;;;;;;;;;;;

        max_execution_time = 30 ; Maximum execution time of each script, in seconds
        memory_limit = 24M ; Maximum amount of memory a script may consume (8MB)

        den Wert "8M" habe ich auf "24M" erhöht, das ist der zugeordnete Arbeitsspeicher

        danach den Apache (bei mir der lampp) in der Shell neustarten mit:

        /opt/lampp/lampp restart

        Wenn Du von einem Provider abhängig bist, würde ich versuchen daß der Provider diesen "Speicherwert" erhöht. Wenn er nicht mitmacht, dann solltest Du Deine Daten in kleine Häppchen einlesen.

        Viel Spaß!
        Gruß
        Djangoline

        Kommentar


        • #5
          Die 16-MB-Grenze wird überschritten, weil bei der Verarbeitung ein Mehrfaches der eigentlichen Dateigröße in Anspruch genommen wird.

          Probier mal ein "unset($dateiinhalt)"nach

          PHP-Code:
          $array explode("\"",$dateiinhalt); 
          Vielleicht hilft das schon, um unter der Grenze zu bleiben.

          Kommentar


          • #6
            [GD] imagecreatefromjpeg Problem und memory_limit

            Ich antworte hier auf dieses Thema, weil ich selber lange, lange nach einer Lösung gesucht habe, und ich nirgendwo im Web eine EINDEUTIGE Antwort gefunden habe.
            Jetzt hab ich sie und will sie weitergeben:
            (Ich hoffe, der Betreff ist in den Suchmaschinen schnell zu finden ..)

            imagecreatefromjpeg:
            Kleine jpg´s funkten ohne Probleme, größere eben NICHT .. aber die Grenze war nicht immer gleich!

            Lösung: folgende Zeilen in den Anfang der Upload-Datei stellen:

            set_time_limit (60); // statt standardmäßig 30
            ini_set('memory_limit', '32M'); // statt standardmäßig 8M

            damit wird der Memory vergrößert, was unbedingt notwendig ist (weil der image-Befehl quasi eine "original-Datei" mit "original-Seitenbreiten bzw. Pixelbreiten" erzeugt. Also alles andere als gepackt ..), und nebenbei auch gleich mal die max_execution_time erhöht ..

            vielleicht nutzt das hier ja mal jemanden )
            ciao!

            Kommentar

            Lädt...
            X