Matze: wie diesen Fatal Error abfangen?

Beitrag lesen

Hey Vinzenz!

und halt eben * einem empirisch zu ermittelnden Overhead, der größer ist als 1.
Tom schlägt für den Overhead einen Faktor von 1.65 vor.

Wozu ist der Overhead?

Tom seine schöne Funktion (leider fehlen ein paar Kommentare, ich versuch sie mal nachzuvollziehen):

  
// ich denk mal:  
// $_imageinfo = Array aus getimagesize()  
// $memleft = ?? mein PHP kennt keine solche Konstante  
function image_check_memory($_imageinfo, $memleft = MEMORY_LEFT)  ## X, Y, bits, channels  
{  
    ## fehlende Angaben durch Raten ergänzen  
    if (!isset($_imageinfo['bits'])) $_imageinfo['bits'] = 8;  
    if (!isset($_imageinfo['channels']) and $_imageinfo['bits'] == 24) $_imageinfo['channels'] = 1;  
    if (!isset($_imageinfo['channels'])) $_imageinfo['channels'] = 3;  
    // benötigten Speicherplatz berechnen:  
    // (durch 8 teilen für Bits zu Bytes)  
    // wozu ist +65536 ??  
    // wozu ist der Overhead? Größer 1 ist klar, aber wieso 1.65?  
    // Bildbreite * Bildhöhe * Bits * Farbkanäle / 8Bits + 65536) * Overhead  
    // Ergebniss abrunden  
    $memoryNeeded = round(($_imageinfo[0] * $_imageinfo[1] * $_imageinfo['bits'] * $_imageinfo['channels'] / 8 + 65536) * 1.65);  
    // maximal Speicher der zur Verfügung steht * 1048576  
    // wieso 1048576 ??  
    $memoryLimit = intval(ini_get('memory_limit')) * 1048576;  
    // wenn der von PHP verbrauchte Speicher + berechnetem Speicher + $memleft(??) größer als maximal zur Verfügung stehender Speicher  
    if ((memory_get_usage() + $memoryNeeded) + $memleft > $memoryLimit)  
    {  
        // ist das schlecht  
        error_log('..');  
        return false;  
    }  
    // sonst "sollte" mit dem Bild nix schief gehn ;)  
    return true;  
}

Kannst du mir die Stellen mit den Fragezeichen erklären?
Die Funktion sieht super aus, vielleicht sollte mal jemand einen Artikel über das Problem schreiben. (oder gibts schon?)

Danke und Grüße, Matze