Hallo!
Ich habe im Moment mit einer etwas schwierigen Kunden zu kämpfen. Für diese habe ich ein Skript gebaut, mit dem sie Bilder hochladen kann, diese werden automatisch verkleinert, und dann in eine Galerie zugeordnet.
Das funktioniert, bis zu einer gewissen Bildgröße, auch wunderbar. Jedoch meint diese Dame dass auch unbedingt Bilder mit 10MegaPixel verarbeitet werden müssen.
Und da steigt das Skript, an der Stelle wo die Bilder verkleinert werden, mit folgendem Fehler aus:
Den Grund für den Fehler habe ich nach kurzer Suche im Internet gefunden. Es wird einfach zu viel Arbeitsspeicher verwendet.
Eine Lösung auch:
setzt den zu Verfügung gestellten Arbeitsspeicher auf 256MB hoch.
Leider klappt dies bei 1&1 nicht. Diese stellen nur 40MB - 8MB für irgendwas also 32MB zur Verfügung.
Gibt es irgendeine Möglichkeit diesen Code zu optimieren damit er auch mit größeren Bildern klar kommt?
Ein Providerwechsel geht leider nicht. Es muss bei 1&1 bleiben.
Grüße!
Ich habe im Moment mit einer etwas schwierigen Kunden zu kämpfen. Für diese habe ich ein Skript gebaut, mit dem sie Bilder hochladen kann, diese werden automatisch verkleinert, und dann in eine Galerie zugeordnet.
Das funktioniert, bis zu einer gewissen Bildgröße, auch wunderbar. Jedoch meint diese Dame dass auch unbedingt Bilder mit 10MegaPixel verarbeitet werden müssen.
Und da steigt das Skript, an der Stelle wo die Bilder verkleinert werden, mit folgendem Fehler aus:
Code:
Fatal error: Out of memory (allocated 32768000) (tried to allocate 13056 bytes) in .....
Den Grund für den Fehler habe ich nach kurzer Suche im Internet gefunden. Es wird einfach zu viel Arbeitsspeicher verwendet.
Eine Lösung auch:
Code:
ini_set("memory_limit", "256M");
Leider klappt dies bei 1&1 nicht. Diese stellen nur 40MB - 8MB für irgendwas also 32MB zur Verfügung.
Gibt es irgendeine Möglichkeit diesen Code zu optimieren damit er auch mit größeren Bildern klar kommt?
PHP:
function image_resize($source, $filename, $maxW, $maxH)
{
list($w, $h) = getimagesize($source); // Größe auslesen
if ($h >= $w) {
$wn = round($w/($h/$maxH));
$hn = $maxH;
}
else {
$hn = round($h/($w/$maxW));
$wn = $maxW;
}
$dst_img=ImageCreateTrueColor($wn,$hn);
$src_img=ImageCreateFromJpeg($source);
ImageCopyResampled($dst_img,$src_img,0,0,0,0,$wn,$hn,$w,$h);
imagejpeg($dst_img, $filename); // Ausgabe
// Löscht die temporär erstellten Bilder
imagedestroy($src_img);
imagedestroy($dst_img);
}
Ein Providerwechsel geht leider nicht. Es muss bei 1&1 bleiben.
Grüße!