Allowed memory size - Problem

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

  • Allowed memory size - Problem

    Hallo zusammen,

    ich stehe vor einem Problem an dem ich nun bereits einige Tage sitze.

    Sinn des Scripts:
    Bilderupload für Galerie per ZIP; anschließend die Bilder in Thumbs und verkleinerte Originale manipulieren.

    Problem:
    Ich bekomme immer "Allowed memory size of 16777216 bytes exhausted (tried to allocate 6000 bytes) " nach einigen Bildern.
    Die ersten x Bilder funktionieren einwandfrei und dann ist eben der temporäre Speicher voll..Ich habe schon alle mir bekannten Möglichkeiten um diesen wieder freizugeben ausprobiert -> Fehlanzeige.
    Auch der Versuch die Aktionen über eingeforderte Mausklicks des Uploaders auszulagern um die automatische Speicherfreigabe nach Scriptende zu nutzen schafft keine Abhilfe.

    Anbei mal der Code:

    PHP-Code:
    define("FOLDER","../images/gallery/$_GET[galname]/");
        
    define("THUMBFOLDER","../images/gallery/$_GET[galname]/thumbs/");
        
        
    $galname $_GET['galname'];
        
        
        
        
    $dir=openDir(FOLDER);
        
        
        
    $handle=opendir (FOLDER);
        
    $i 0;
        while (
    $datei readdir ($handle)) {
            if(
    subStr($datei,-3,3)=="jpg") {
                
    $i++;
                
    //echo $datei;
            
    }
        }
        
    closedir($handle); 
        
        
    $anzahl $i;
        if (empty(
    $anzahl)) $anzahl $_GET['anzahl'];
        echo 
    "ANZAHL: ".$anzahl;
        
    $handle=opendir (FOLDER);
        
    $start $_GET['start'];
        if ((
    $start 7)<$anzahl$ende $start+7; else $ende $anzahl;
        
    $newstart $start+7;
        echo 
    "<br>ENDE: ".$ende;
        
        
    $i 1;
        while (
    $datei readdir ($handle)) {
            if(
    subStr($datei,-3,3)=="jpg") {
                
                    if (
    $i >= $start && $i <= $ende) {
                         
                    
    $orig $datei;
                    
    resize($orig,$datei,100);
                    }
                
    $i++;
                if (((
    $start 7)>=$anzahl) && $i=$anzahl) die ("Alles bearbeitet");
                
    $newstart $ende +1
                if (
    $i $ende) die (
    "<a href=\"uploadpic.php?step=4&start=$newstart&galname=$galname&anzahl=$anzahl\">
    Bitte hier klicken um fortzusetzen</a>"
    );
        
            }
        
        } 
    Dazu noch die Funktion zum Bilder :
    PHP-Code:
    function resize($orig,$filename,$width)
    {

        
    $size=getImageSize(FOLDER.$orig);
        
    $orig_width=$size[0];
        
    $orig_height=$size[1];


        
    $src=imageCreateFromJpeg(FOLDER.$orig);
        


       

        if(
    $orig_width>$width)
        {
            
    $factor=$orig_width/$width;
            echo 
    "bild zu groß";
            
    $new_height =  ($orig_height/$factor);
            
    $new_width = ($orig_width/$factor);
        
        
        } else {
        
    $new_width $orig_width;
        
    $new_height $orig_height;
        echo 
    "bild ok";
        
        }
        

     
        
    $dst=imageCreateTrueColor($new_width,$new_height);

        
    $buffer=imageCopyResized($dst,$src,0,0,0,0,$new_width,$new_height,$orig_width,$orig_height);
        
    $src imagedestroy($src);
        
        
    imageJpeg($dst,FOLDER.$filename,85);
        
    $test imagedestroy($dst);
        if (
    $src==TRUE) echo "PIC WEG"; else echo "ERROR";


    Das ganze läuft atm auf xampp unter Vista mit 16MB Limit.


    Ich hoff jemand von euch steigt da etwas mehr durch.

    Gruß

    EDIT:
    ein zeilenumbruch spendiert von kropff
    Zuletzt geändert von Kropff; 29.02.2008, 16:54.

  • #2
    sieht ganz so aus, als würden die 16MB nicht ausreichen. da kannst du nichts machen im script. du kannst nur in der php.ini die max_upload_size erhöhen.
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      sieht ganz so aus, als würden die 16MB nicht ausreichen. da kannst du nichts machen im script. du kannst nur in der php.ini die max_upload_size erhöhen.
      Hat aber nix damit zu tun. Sondern mehr mit dem maximalen Speicher der gemäss php.ini für ein Script verwendet werden darf. Die von dir genannte Direktive würde afaik keinen Fehler geben, sondern das Bild nach kompletten Upload still und heimlich aus dem Temp Folder löschen
      @Topicstarter:
      Probier mal die folgenden Dinge
      1. Anpassen zur Laufzeit (weiss aber ned ob das wirklich funzt)
      PHP-Code:
      <?
      echo ini_get("memory_limit");
      ini_set("memory_limit","32M");
      echo ini_get("memory_limit");
      ?>
      2. Ändere es direkt in der php.ini
      Code:
      memory_limit = 32M ;
      3. Oder versuche es via .htaccess Datei
      Code:
      php_value memory_limit 32M
      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        @jahlives
        ich meinte ja auch memory_limit. ist echt noch zu früh heute :-) (wie komm ich nur auf max_upload_size???)
        it's not a bug,
        it's a feature!

        Kommentar


        • #5
          Original geschrieben von jahlives
          PHP-Code:
          <?
          echo ini_get("memory_limit");
          ini_set("memory_limit","32M");
          echo ini_get("memory_limit");
          ?>
          Erstmal Danke für eure Antworten.
          Das oben zitierte funktioniert einwandfrei. Aber so einfach kann ich ja nur auf dem xampp das Limit erhöhen. Im produktiven Einsatz dürfte mir diese Lösung somit nicht helfen oder?

          Es muss doch eine Möglichkeit geben eine große Anzahl von Bildern auf mehrere Schritte verteilt zu bearbeiten um mit dem memory_limit klar zu kommen (Mein Testzip beträgt lediglich 4MB).

          Wo verbraucht das Script denn diesen enormen Speicher? Ich lasse das Zip doch extra vorher entpacken um diesem Problem zu entgehen.

          Würde es etwas helfen zwischen 2 PHP-Dateien zu springen während dem Bearbeiten der Bilder?

          Gruß

          Kommentar


          • #6
            php_ini

            Da kann man das doch einstellen ich verstehe nicht
            warum man immer so vieles versucht.
            Der Fehler sagt doch schon alles oder irre ich mich jetzt ????

            memory_limit einfach erhöhen in der phpINI
            Zuletzt geändert von Blitzschlag; 29.02.2008, 16:55.

            Kommentar


            • #7
              Original geschrieben von Blitzschlag
              php_ini

              Da kann man das doch einstellen ich verstehe nicht warum man immer so vieles versucht. Der Fehler sagt doch schon alles oder irre ich mich jetzt ????

              memory_limit einfach erhöhen in der phpINI
              Das Problem an der Sache ist, dass du dir zwar auf deinem localhost alles so konfigurieren kannst damit alles so läuft wie du willst,
              wenn du das ganze aber nun nicht selbst hostest unterliegst du Beschränkungen vom Hoster.
              Und dieser wird dich nicht einfach an der php.ini herumbasteln lassen.
              Sollte das doch gehen belehrt mich (siehe mein Post zuvor).
              Zuletzt geändert von nimroder; 29.02.2008, 17:01.

              Kommentar


              • #8
                Original geschrieben von nimroder
                Das Problem an der Sache ist, dass du dir zwar auf deinem localhost alles so konfigurieren kannst damit alles so läuft wie du willst, wenn du das ganze aber nun nicht selbst hostest unterliegst du Beschränkungen vom Hoster und dieser wird dich nicht einfach an der php.ini herumbasteln lassen.
                Ohja das stimmt. Ich sag da aber gleich immer, wenn man sich entscheiden möchte wirklich was zu hosten sollte man sich zuhause Linux installieren erstmal testen und probieren.
                Dann damit es nicht so teuer ist einen V-Server anmieten und da hat man ja volle root rechte also meine Meinung ist man sollte sich immer über php hinnaus informieren.

                Kommentar


                • #9
                  Brich doch mal die lange Zeile gemäß den Regeln um. (Siehe sticky-Thread, den du ja offensichtlich nicht gelesen hast.)

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    1. Testen nützt überhaupt nichts wenn du das unter völlig anderen Bedingungen machst.
                    Wenn du es unter ähnlichen Bedingungen testest musst du eben bei deinem Script nach Fehlern/Verbesserungen suchen wenn es nicht funktioniert wie geplant.
                    Einfach das Limit zu erhöhen damit es funktioniert ist mit Sicherheit nicht die beste Lösung.

                    2. Ein VServer sorgt für sehr viel mehr Arbeit als ein normales Webhosting-Angebot.
                    Abgesehen davon dass er auch im Vergleich teurer ist.
                    Und ändert nichts daran, dass man das Problem umgeht in dem man die Rahmenbedingungen so lange anpasst bis es funktioniert.

                    Könnten wir nun bitte zum Thema zurück kommen.
                    Wenn du über den Sinn von Fehlersuche/Verbesserungen diskutieren willst mach doch bitte einen neuen Thread auf.
                    In diesem hier geht es eben um genau diese und nicht um eine Diskussion darüber.

                    Danke


                    edit:
                    @ghostgambler
                    Sorry.
                    Ich hab übersehen, dass ich am Notebook eine höhere Auflösung habe, lässt sich bei Widescreen auch nur schwer einschätzen.
                    Sticky wurde sehr wohl zuvor gelesen.
                    Zuletzt geändert von nimroder; 29.02.2008, 17:07.

                    Kommentar


                    • #11
                      hast du mal memory_get_usage() in dein script eingebaut, um den verlauf der speicherausnutzung zu verfolgen?

                      ich denke nicht, dass es an der anzahl der bilder liegt, sondern an einem mit hoher auflösung/farbtiefe, wo es dann knallt.

                      Kommentar


                      • #12
                        Original geschrieben von 3DMax
                        hast du mal memory_get_usage() in dein script eingebaut, um den verlauf der speicherausnutzung zu verfolgen?

                        ich denke nicht, dass es an der anzahl der bilder liegt, sondern an einem mit hoher auflösung/farbtiefe, wo es dann knallt.
                        Danke!
                        Genau da liegt der Fehler:
                        Speicher bei Aufruf der Funktion: 137312
                        Speicher kurz vor dem Fehler: 15182144

                        Wenn ich dieses Bild aus dem Zip herausnehme läuft das ganze wunderbar, bei einer Speicherverwendung zwischen 130000 und 150000.

                        Kommentar


                        • #13
                          Hallo an alle,

                          hat mir sehr geholfen.
                          Ich hatte wohl auch ein Bild mit zu viel entpackter Größe und Farbtiefe.

                          Viele Grüße

                          m i c e l

                          Kommentar

                          Lädt...
                          X