Zip :: Memory_limit

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

  • Zip :: Memory_limit

    hi ,
    folgendes Szenario:

    Ich lade eine 400kb zip Datei mit 5 Bildern à ca. 80kb auf meinen Server.
    Danach wird diese entpackt und aus den Bildern werden Thumbs gemacht.

    Dann erscheint Fehlermeldúng, da eins der Bilder eine sehr hohe auflösung hat.
    Fatal error: Allowed memory size of 47185920 bytes exhausted(tried to allocate 10584 bytes)


    Kurze Frage:
    1) Wie unterdrücke ich die Fehlermeldung und bringe statt dessen ne andere von mir erstellte( wenns nich zu kompliziert is, dann wärs nett, wenn man mir das direkt im Forum erklärt, ansonsten bin ich für Links dankbar die ERROR Handling ausführlich und verständlich behandeln)

    2) Kann ich irgendwie abfragen wie viel resourcen verbraucht werden - also mir einen Wert in ne Variable schreiben lassen
    Zuletzt geändert von sypr0; 16.08.2007, 22:01.

  • #2
    1) ist im manual ganz gut erklärt alles. finde aber lieber die stelle, die den fehler verursacht und korrigiere sie. 400 kb ist jetzt nicht so die welt, dass es in ordnung wäre, dass man dabei fehler produziert. ich tippe darauf, dass irgendwelche resourcen nicht freigegeben werden.

    2) ja (steht im manual, einfach mal suchen), aber wofür? fehler beheben ist immer besser, als umgehen.

    Kommentar


    • #3
      Re: Zip :: Memory_limit

      Allowed memory size of 47185920 bytes exhausted(tried to allocate 10584 bytes)
      Hmm, die 45mb kommen aber bestimmt nicht durch deine 400k zustande! Da musst du, wie penizillin schon gesagt hat, irgendwelche resourcen nicht freigegeben haben!

      Kommentar


      • #4
        irgendwelche Ressourcen
        kannst mir das bitte bisschen genauer erläutern ? So hilft es mir nämlich leider nicht weiter, wo sollt ich mal nachschaun?(hab php.ini eigentlich so wie se mit XAMPP Lite geliefert wird gelassen, ausser dass ich Memory size auf 45 MB, upload Size auf 45 MB gesetzt hab.

        Kommentar


        • #5
          Was macht dein Script? Liste mal alle Punkte auf.

          Kommentar


          • #6
            Re: Re: Zip :: Memory_limit

            Original geschrieben von PHP-Desaster
            Hmm, die 45mb kommen aber bestimmt nicht durch deine 400k zustande! Da musst du, wie penizillin schon gesagt hat, irgendwelche resourcen nicht freigegeben haben!
            Für mich sieht das nach einer hübschen Endlosschleife aus, die beim Erreichen des Memory Limits mit der oben genannten Fehlermeldung beendet wird.

            Gruß Poscht

            Kommentar


            • #7
              Original geschrieben von penizillin
              1) ist im manual ganz gut erklärt alles. finde aber lieber die stelle, die den fehler verursacht und korrigiere sie.
              es handelt sich hier um einen fatal error, ist mir neu, dass man die abfangen kann.

              Original geschrieben von sypr0
              Kann ich irgendwie abfragen wie viel resourcen verbraucht werden - also mir einen Wert in ne Variable schreiben lassen
              mit memory_get_usage() kannst du den speicherverbrauch ermitteln.

              Kommentar


              • #8
                Für mich sieht das nach einer hübschen Endlosschleife aus, die beim Erreichen des Memory Limits mit der oben genannten Fehlermeldung beendet wird.
                Nein, keine Endlosschleife, weil es nur bei Bildern mit einer Auflösung von mehr als 2500 x 3000 vorkommt. Aber das ist ja nicht das Thema dieses threads.

                Es ist normal, dass viel Resourcen verbraucht werden bei nem Bild mit 100kb und ner auflösung von 2646 x 3742, zumindest wurde das schon einmal hier geklärt und ausdiskutiert.


                mit memory_get_usage() kannst du den speicherverbrauch ermitteln.
                Thx :-) das hilft mir weiter

                Was macht dein Script? Liste mal alle Punkte auf.
                1. Bilder hochladen- funktioniert immer.
                2. Wenn Bilder eine bestimmte Dateigröße nicht überschreiten, den richtigen Typ besitzen dann werden Thumbs erstellt...

                Aber das funktioniert ja alles, wollte ja nur Hilfe bei den zwei oben genannten Fragen.

                Kommentar


                • #9
                  im zweiten schritt (beim verkleinern der bilder) wird das problem liegen. aber besser ist, du korrigierst es, statt speicher zu messen.

                  Kommentar


                  • #10
                    Ich denke, du wirst versehentlich zu viele image-resourcen anlegen, offen lassen, erzeugen, was auch immer! Wenn du dann sogar noch mit recht großen bildern arbeitest, kann da schnell die Grenze überschritten sein.

                    2646x3742 Pixel ah 100kb im JPEG sind als reine Pixeldaten schon ca. 10mb. Die ganzen Daten noch in einem PHP-Imagehandle bestimmt nochmal 20-40% drauf. Hast du zwei dieser Handle geöffnet, bist du schnell bei 30mb. Noch ein bisschen skalieren etc., Speicher voll.

                    Ich kenne den internen Aufbau der Imagehandle jetzt nicht, aber ich kann mir gut vorstellen, dass dies der Grund für den Speicherverbrauch sein wird.


                    Edit: Wenn es sogar eine ZIP-Datei mit etwas kleineren Bildern ist, kann es ganz fix zu viel werden, wenn du die Handle nicht rechtzeitig frei gibst oder mehrere gleichzeitig anlegst!

                    Kommentar


                    • #11
                      PHP-Code:
                      function create_thumb($imagefile$thumbfile,$type)
                      {
                          if (
                      file_exists($thumbfile)) return FALSE;
                          if (
                      $type == "image/gif")
                                     {
                                          
                      $Img imagecreatefromgif($imagefile);
                              
                      $Imgsize getimagesize($imagefile);
                              
                      $oBreite $Imgsize[0];
                              
                      $oHöhe $Imgsize[1];
                          }
                          if ((
                      $type == "image/pjpeg") or ($type == "image/jpeg"))
                                     {
                             
                      $Img imageCreateFromJPEG($imagefile);
                             
                      $oBreite imageSX($Img);
                             
                      $oHöhe imageSY($Img);
                          }
                          
                      $nBreite 200;
                          
                      //zwischenrechung
                          
                      $verhältnis $oBreite $nBreite;
                          
                      $nHöhe $oHöhe $verhältnis;

                          
                      $Out imageCreateTrueColor($nBreite$nHöhe);

                      if (
                      $type == "image/gif")
                      {
                                
                      imagecopyresized($Out$Img0000$nBreite$nHöhe$oBreite$oHöhe);
                                
                      imagegif($Out,$thumbfile);
                          }
                      if ((
                      $type == "image/pjpeg") or ($type == "image/jpeg"))
                      {
                                  
                      imageCopyResampled($Out$Img0000$nBreite$nHöhe$oBreite$oHöhe);
                                   
                      imageJPEG($Out$thumbfile);                                
                          }
                                  return 
                      true;

                      Das is meine Funktion, bei der wohl so viel Resourcen verbraucht werden
                      @PHP-Desaster, könntest du mir helfen und sagen, wo ich hier was optimieren könnte, thx
                      Zuletzt geändert von sypr0; 18.08.2007, 16:43.

                      Kommentar


                      • #12
                        Bau mal für die beiden Resourcen ein imagedestroy.
                        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                        Kommentar


                        • #13
                          thx für den Tip,

                          da man die Datei auch nicht einzeln über dieses Thumb script laufen lassen kann, folgere ich mal, dass man im Script nicht mehr viel machen kann oder ?

                          Kommentar


                          • #14
                            da man die Datei auch nicht einzeln über dieses Thumb script laufen lassen kann ...

                            Kommentar


                            • #15
                              Hast du die Handle am Ende der Funktion mal wieder freigegeben? Kann mir vorstellen, dass dies schon die Lösung ist.

                              Sonst mach mal ein paar Ausgaben innerhalb der Funktion, damit du siehst, an welcher Codestelle der Speicher endet!

                              Kommentar

                              Lädt...
                              X