Sono rimasto bloccato per giorni (e notti) con questo problema.
Inoltre, il limite di memoria dei provider differisce da uno all'altro. E cambiare il memory_limit
in PHP non funziona su server condivisi, i provider di solito limitano la ram anche se phpinfo()
dice che hai 128Mo (1 e 1 limiti di RAM a 60Mo per processo per esempio).
Ma finalmente ho trovato qualcosa di molto efficiente qui: http://www.imagemagick.org/Usage/files/#massive
Ha bisogno imagemagick
, ma ho scoperto che la maggior parte dei provider fornisce nativamente presente sui propri server, anche quelli condivisi.
exec('env MAGICK_TMPDIR=<tmp_dir> nice -5 convert -limit memory 32 -limit map 32 -resize 800x600 huge.jpg reasonable.jpg');
Come si dice:
env MAGICK_TMPDIR=<tmp_dir>
impostare una directory temp per imagemagick per simulare ram (tipo di)
nice -5
è anche un comando unix per modificare la priorità di un processo (http://en.wikipedia.org/wiki/Nice_(Unix))
convert ...
è la linea di comando ImageMagick
Il vero affare è di circa -limit memory 32
e -limit map 32
. Questo è il modo in cui limiti la memoria usata dal binario (qui: 32Mo). Probabilmente dovrai adattare i valori per farli corrispondere ai valori del tuo server (in genere PHP ti dice la memoria massima allocata quando ti dà l'errore fatale. Ti suggerisco di dividere questo valore per 2 o 4 per essere confortable).
Ho anche bisogno di mettere un po 'altre linee nel mio PHP per evitare alcuni problemi collaterali:
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
speranza tutto ciò che vi aiuterà ...
sapere se convert
è accessibile il server, è possibile provare questo (in PHP):
$out = array();
exec('which convert 2>&1', $out);
print_r($out);
Quella volontà ti da Pat h del binario, se esiste.
fonte
2014-03-21 01:42:45
ImageMagick consente il ridimensionamento efficiente in fase di caricamento, vedere ulteriori dettagli in questa risposta: http://stackoverflow.com/questions/12661/efficient-jpeg-image-resizing-in-php/4613341#4613341 –