Ben bu sorun ile gün (ve gece) takılıp var.
Moreover, providers memory limit differs from one to another.
And change the memory_limit
in PHP does not work on shared servers, providers usually limit the ram even if phpinfo()
says that you got 128Mo (1and1 limits RAM to 60Mo per process for example).
Ama sonunda burada oldukça verimli bir şey bulundu: http://www.imagemagick.org/Usage/files/#massive
Bu imagemagick
gerekiyor, ama ben sağlayıcıların çoğu özgün, kendi sunucularında bile paylaşılan olanlar bu sağladığını keşfetti.
exec('env MAGICK_TMPDIR=<tmp_dir> nice -5 convert -limit memory 32 -limit map 32 -resize 800x600 huge.jpg reasonable.jpg');
Bu söyleniyor gibi:
env MAGICK_TMPDIR=<tmp_dir>
set up a temp directory for imagemagick
to simulate ram (kind of)
nice -5
is also a unix command to change the priority of a process
(http://en.wikipedia.org/wiki/Nice_(Unix))
convert ...
imagemagick komut satırı
Gerçek anlaşma yaklaşık -limit memory 32
ve -limit map 32
olduğunu. Bu (: 32Mo burada) ikili tarafından kullanılan bellek sınırlamak yoludur. Muhtemelen sunucu değerlerini maç değerlere uygun gerekecektir (size Ölümcül Hata verir Genellikle PHP size maksimum ayrılan bellek söyler. Senin konforlu olması için 2 ya da 4 ile bu değeri bölmek öneririm).
Ben de bazı teminat sorunları önlemek için, benim PHP diğer bazı satırları koymak için gerekli:
ignore_user_abort(true); // ignore user abort : let the script finish resizing even if user aborts
set_time_limit(0); // ignore server timeout
putenv('MAGICK_THREAD_LIMIT=1'); // limit the number of thread for the binary. Very important in my case
Yardımcı olacak tüm umuyoruz ...
convert
sizin sunucuda kullanılabilir olup olmadığını bilmek için, (PHP) Bu deneyebilirsiniz:
$out = array();
exec('which convert 2>&1', $out);
print_r($out);
Varsa o olacak, size ikili yolunu verir.