Ben PHP kullanarak JPEG görüntülerin bir dizin (50k dan 500k kadar kabaca 600 +) işlemek için çalışıyorum: yeniden boyutlandırmak ve görüntüleri kaydetmek için GD ama oldukça erken sürecini sekteye biraz isabet ettik. Sonra doğru sadece 3 görüntüleri (30K, 18K ve 231K) işlem bir Allowed memory size of 16777216 bytes exhausted PHP Ölümcül hata olsun.
Ben görüntüleri ile bisiklet ve aşağıdaki kodu arıyorum:
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);
Ben imagedestroy fonksiyonu ile belleği boşaltmak için denedim ama herhangi bir etkiye sahip görünmemektedir. Komut sadece sürekli kod imagecreatefromjpeg çizgisinde boğulma tutar.
Ben php.ini kontrol ve doğru tutuyor gibi memory_limit = 16M ayar görünüyor. Bellek doluyor Ama neden ben çözemiyorum. Geri çöpçüyle belleği serbest gerekmiyor mu? Gerçekten memory_limit ayarını artırmak istemiyorum. Bu potansiyel gelecekte daha fazla sorunlara yol açabilecek kötü bir çözüm gibi görünüyor.
Bilginize: Ben bir komut isteminden benim komut koşuyorum. Bu işlevselliği etkilemez ama ben bunu belirtmek gerektiğini düşündüm bu yüzden yanıtı etkileyebilir.
Ben sadece basit veya burada bir tasarım kusuru varsa bir şey eksik ise herkes görebilir miyim? Bu oldukça basit bir görev olacağını düşünmek istiyorum. Elbette bu mümkün olmalı, değil mi?