PHP GD Zulässige Speichergröße erschöpft

Ich versuche, ein Verzeichnis mit JPEG-Bildern (ca. 600+, zwischen 50.000 und 500.000) mit PHP: GD zu verarbeiten, um die Größe der Bilder zu ändern und sie zu speichern. Nach korrekter Verarbeitung von nur 3 Bildern (30K, 18K und 231K) erhalte ich einErlaubte Speichergröße von 16777216 Bytes erschöpft PHP Schwerwiegender Fehler.

Ich fahre durch die Bilder und rufe den folgenden Code auf:

    list($w, $h) = getimagesize($src);

    if ($w > $it->width) {
        $newwidth = $it->width;
        $newheight = round(($newwidth * $h) / $w);
    } elseif ($w > $it->height) {
        $newheight = $it->height;
        $newwidth = round(($newheight * $w) / $h);
    } else {
        $newwidth = $w;
        $newheight = $h;
    }

    // create resize image
    $img = imagecreatetruecolor($newwidth, $newheight);
    $org = imagecreatefromjpeg($src);

    // Resize
    imagecopyresized($img, $org, 0, 0, 0, 0, $newwidth, $newheight, $w, $h);
    imagedestroy($org);

    imagejpeg($img, $dest);

    // Free up memory
    imagedestroy($img);

Ich habe versucht, Speicher mit dem @ freizugebimagedestroy Funktion, aber es scheint keine Auswirkungen zu haben. Das Skript verschluckt sich ständig amimagecreatefromjpeg Codezeile.

Ich habe die php.ini und das @ überprümemory_limit = 16Mie @ -Einstellung scheint korrekt zu sein. Aber ich kann nicht herausfinden, warum sich die Erinnerung füllt. Sollte es nicht sein, den Speicher an den Müllsammler zurückzugeben? Ich möchte die memory_limit-Einstellung nicht wirklich erhöhen. Dies scheint ein schlechter Workaround zu sein, der möglicherweise in Zukunft zu weiteren Problemen führen kann.

FYI: Ich führe mein Skript an einer Eingabeaufforderung aus. Es sollte die Funktionalität nicht beeinträchtigen, könnte aber Ihre Reaktion beeinflussen. Ich dachte, ich sollte es erwähnen.

Kann jemand sehen, ob ich nur etwas Einfaches vermisse oder ob es hier einen Designfehler gibt? Sie würden denken, dass dies eine ziemlich einfache Aufgabe wäre. Das muss doch möglich sein, oder?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage