Ralfi: PHP - Allowed memory size ... exhausted

Hallo zusammen,

folgendes Problem:

Ein Portal enthält einen Upload-Bereich für Grafiken.
Ein paar Abfragen bzgl. Größe, Verhältnis Länge : Breite etc. werden schon abgefragt, aber jetzt gibt es beim Upload größerer Grafiken dennoch noch folgenden Fehler:

Fatal error: Allowed memory size of 68157440 bytes exhausted (tried to allocate 15592 bytes  in ... on line ...

An dieser Stelle findet sich eine Anweisung
ImageCreateFromJPEG ( ... );

Speicher-Konfiguration des (wie immer gehosteten) PHP-Servers:
memory_limit 65M 65M

Kennt jemand eine Seite, die eine probate, zuverlässige Abfrage (konkrete Formel) präsentiert, die geeignet ist, Grafiken kritischer Größe zu ermitteln, bevor im Weiteren durch Operationen wie ImageCreateFromJPEG diese unschöne Meldung erscheint?

MfG Ralfi

  1. Hallo,

    ich denke filesize sollte dir die Größe der Datei/Bildes ermitteln können...

    http://de2.php.net/manual/de/function.filesize.php

    1. Hallo Jan,

      ich denke filesize sollte dir die Größe der Datei/Bildes ermitteln können...
      http://de2.php.net/manual/de/function.filesize.php

      leider ist diese Größe für den erforderlichen Platz im Hauptspeicher irrelevant. Dort muss das Bild unkomprimiert vorliegen, d.h. belegt mindestens

      Anzahl Pixel * Farbtiefe (Byte/Pixel)

      Speicher. Dazu kommt noch ein Overhead.

      Freundliche Grüße

      Vinzenz

      1. Hallo Vinzenz,

        danke für diesen Hinweis, man lernt nie aus...

        Gruß Jan

        1. Hallo Jan,

          danke für diesen Hinweis, man lernt nie aus...

          ich lerne hier bei fast jedem Besuch dazu, auch wenn ich selten selbst frage :-)
          Das Thema Speicherverbrauch bei GD-Lib gabs auch schon öfter, dem OP könnte vielleicht dieser Archivthread weiterhelfen, speziell Globes Hinweis auf ImageMagick (falls vorhanden).

          Freundliche Grüße

          Vinzenz

  2. Hallo

    Kennt jemand eine Seite, die eine probate, zuverlässige Abfrage (konkrete Formel) präsentiert, die geeignet ist, Grafiken kritischer Größe zu ermitteln, bevor im Weiteren durch Operationen wie ImageCreateFromJPEG diese unschöne Meldung erscheint?

    hast Du Dir schon einmal die Benutzerkommentare zu imagecreatefromjpeg durchgelesen?

    Grundsätzlich musst Du ermitteln, wieviel Speicher Dir vor Aufruf der Funktion überhaupt noch zur Verfügung steht, hier hilft Dir http://www.php.net/manual/de/function.memory-get-usage.php und natürlich das Memory Limit.

    Für das Bild brauchst Du mindestens:

    Anzahl Pixel ( = Höhe * Breite) * Farbtiefe in Bytes pro Pixel
    und halt eben * einem empirisch zu ermittelnden Overhead, der größer ist als 1.

    Höhe * Breite * Farbtiefe = noch zur Verfügung stehender Speicher
    ist eine sichere Obergrenze. Dann wirst Du die Fehlermeldung mit Sicherheit erhalten.

    Freundliche Grüße

    Vinzenz