Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Speicher beim Bild einlesen überzogen.

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Speicher beim Bild einlesen überzogen.

    Hi.
    Folgendes Problem hatte ich schon des öfteren, weiss aber leider nicht mehr, wie ich das behoben hab.

    Folgendes: Ich erstelle ein Image-Resource via imagecreatefromjpeg. Allerdings bekomm ich dann die Meldung
    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 6720 bytes) in /Users/lumio/Sites/tomate/User/Modules/synology/previews.php on line 25
    Wie man merkt ist das Bild kleiner als die Erlaubte Grösse des zu verwendenden Speicher.

    Der Code sieht zur Zeit wie folgt aus:
    PHP-Code:
            public function previewImage($file)
            {
                if (!
    is_readable($file)) return false;
                
                
    $registry    = &$GLOBALS['registry'];
                
    $template    = &$registry->objTemplate;
                
    $templateDirbasename($template->whereAmI(CIWII_DEFAULTTEMPLATE));
                
                
    $info        getimagesize($file);
                
    $width        $info[0];
                
    $height        $info[1];
                
    $type        $info['mime'];
                
                
    $base        imagecreatefrompng($registry->confWebRoot.'/User/Templates/'.$templateDir.'/images/defaultFile.png');
                switch(
    $type)
                {
                    case 
    'image/jpeg':
                        
    $im        imagecreatefromjpeg($file);
                        break;
                }
                
                
    imagedestroy($base);
                
    imagedestroy($im);
            } 
    Kann mir wer sagen, an was das liegen könnte?

  • #2
    Wie man merkt ist das Bild kleiner als die Erlaubte Grösse des zu verwendenden Speicher.
    Genau umgekehrt, das Bild ist zu Gross für den Speicher (tried to allocate 6720 bytes).

    Kannst versuchen die php.ini Einstellung für den nutzbaren Speicherplatz im PHP Script höher zu setzen.
    PHP-Code:
    ini_set("memory_limit","50M"); // 50 MB 
    Das kann auch permanent in der php.ini eingestellt werden mit : memory_limit = 50M

    Überzeug Dich nochmal mit phpinfo(); über den höchst nutzbaren Speicherplatz.

    Kommentar


    • #3
      Wenn man mehrere Bilder im Speicher hält oder irgendwo ein dickes XML-File bearbeitet, kriegt man auch die 8MB schnell voll.

      Die Größe des angeforderten Speichers hat übrigens nichts damit zu tun, wieviel man schon belegt hat. Wenn von den 8MB nur noch 200 Bytes frei sind, hilft es nix, dass 6720 Bytes kleiner als 8MB sind. Sie passen einfach nicht mehr rein.

      Kommentar


      • #4
        CIX88 hat irgendwo mal gepostet wie sich das mit dem Speicher-Verbrauch verhält, meines wissens war es: (Höhe in Pixel * Breite in Pixel) * 4Byte (RGB + Alpha)

        Sprich unabhängig der Dateigröße, die Größe kommt von der Auflösung des Bildes, dazu kommt dann noch etwas overhead von der gdlib + speicherverbrauch für das was du mit dem bild machst.

        //edit:
        hier gibt es das ganze ausführlich:
        Grundlagen Gdlib und große Bilder

        Kommentar


        • #5
          Aber das Bild hat nur wenige KB... 516KB hat es.

          Kommentar


          • #6
            Das Bild oder die Datei?

            Kommentar


            • #7
              Zitat von Lumio Beitrag anzeigen
              Aber das Bild hat nur wenige KB... 516KB hat es.
              Weil es jpeg ist und komprimiert wird, aber gdlib muss das ganze aber ja pixel für pixel aufbauen, dabei ist egal wie klein die Datei ist. Les dir den Link den ich oben gepostet habe durch, dort ist das erklärt.

              Kommentar


              • #8
                Okay, das macht Sinn

                Kommentar

                Lädt...
                X