habe ich für Tage (und Nächte) mit diesem Problem stecken.
Darüber hinaus unterscheidet sich Anbieter Speichergrenze von einem zum anderen. Und die memory_limit
in PHP ändert sich nicht auf gemeinsam genutzten Servern arbeiten, begrenzen Anbieter in der Regel den Widder selbst wenn phpinfo()
sagt, dass Sie 128Mo (1und1 Grenzen RAM 60Mo pro Prozess zum Beispiel) bekam.
Aber ich fand schließlich etwas ganz effizient hier: http://www.imagemagick.org/Usage/files/#massive
Es imagemagick
braucht, aber ich entdeckte, dass die meisten Anbieter nativ diese auf ihren Servern bietet, auch geteilt diejenigen.
exec('env MAGICK_TMPDIR=<tmp_dir> nice -5 convert -limit memory 32 -limit map 32 -resize 800x600 huge.jpg reasonable.jpg');
Wie gesagt:
env MAGICK_TMPDIR=<tmp_dir>
ein temporäres Verzeichnis für imagemagick RAM zu simulieren einzurichten (Art)
nice -5
ist auch ein Unix-Befehl, um die Priorität zu ändern ein Prozess (http://en.wikipedia.org/wiki/Nice_(Unix))
convert ...
ist die ImageMagick Befehlszeile
The real deal ist über -limit memory 32
und -limit map 32
. Auf diese Weise begrenzen Sie den von der Binärdatei verwendeten Speicher (hier: 32Mo). Sie müssen wahrscheinlich die Werte anpassen, um die Werte Ihres Servers zu entsprechen (Im Allgemeinen teilt Ihnen PHP den maximal zugewiesenen Speicher mit, wenn Sie den Fatalen Fehler erhalten. Ich empfehle Ihnen, diesen Wert durch 2 oder 4 zu teilen, um bequem zu sein).
ich brauche auch einige andere Linien in meinem PHP setzen einige Sicherheiten Probleme zu vermeiden:
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
hoffen, dass alle, die helfen ...
Um zu wissen, ob convert
auf verfügbar ist Ihr Server, können Sie versuchen, dies (in PHP):
$out = array();
exec('which convert 2>&1', $out);
print_r($out);
Das wird Ihnen die pat h der Binärdatei, falls vorhanden.
ImageMagick ermöglicht eine effiziente Größenanpassung bei Belastung, siehe weitere Details in dieser Antwort: http://stackoverflow.com/questions/12661/efficient-jpeg-image-resizing-in-php/4613341#4613341 –