» ini_set('memory_limit') je nach Auflösung, Farbtiefe, usw

Signaturgröße automatisch ermitteln und bei Bedarf ablehnenNeuen Thread eröffnenNeue Antwort erstellenpreg_replace / preg_match Benchmark
AutorNachricht
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
20.02.2009, 02:43
zitieren

Hi,

viele erhöhen schnell ihr memory_limit in PHP, wenn beim Komprimieren von Bildern ein höheres Limit nötig wird.

Das sollte man NICHT machen. Warum? Ganz einfach. Jedes andere Script kann dann ebenfalls so viel Speicher fressen. Hat man also Fehler in den Scripten, löst sich der Arbeitsspeicher schnell in Luft auf und man weiß gar nicht warum der Server ständig am Limit arbeitet bzw. man greift direkt zum größeren Speicherriegel.

Besser ist es das memory_limit niedrig anzusetzen. 5MB sollten eigentlich für alle Scripte reichen. Wenn nicht, dann sollte man seine Scripte verbessern.

Nun hat man noch das Problem mit dem Bilderupload. Dazu hier diese Zeilen, die das memory_limit je nach Bedarf anpassen:
// check image dimensions
$getimagesize = @getimagesize($src_file);
$width = $getimagesize[0];
$height = $getimagesize[1];
$bits = isset($getimagesize['bits']) ? $getimagesize['bits'] : 32;
$channels = isset($getimagesize['channels']) ? $getimagesize['channels'] : 8;
$K64 = pow(2,16); // number of bytes in 64K
$factor = 1.7;
// check orientation
$exif = exif_read_data($src_file);
$exif_orientation = isset($exif['Orientation']) ? $exif['Orientation'] : 0;
unset($exif);
$memory_twice = $exif_orientation > 1 && $exif_orientation < 9 ? 2 : 1;
$memory_needed = ($width * $height * $bits * $channels / 8 + $K64) * $factor * $memory_twice;
$memory_limit = intval(ini_get('memory_limit')) * pow(1024, 2); // if --disable-memorylimit is set this is 0
$memory_usage = function_exists('memory_get_usage') ? memory_get_usage() : 0;
$memory_new_limit = min(536870912, $memory_needed + $memory_usage);// do not set more than 512 MB
if ($memory_limit && $memory_new_limit > $memory_limit) {
ini_set('memory_limit', ceil($memory_new_limit / pow(1024, 2)) . 'M')) {
}

Diesen Code habe ich mit ca. 50.000 Bildern abgeglichen, um ihn zu perfektionieren. Über den Faktor könnt ihr noch kleinere Anpassungen vornehmen.

Wer aufgepasst hat, sieht, dass ich noch die Exif-Daten zur Orientierung auslese. Das ist nur wichtig, wenn ihr die Bilder mit imagerotate() je nach Richtung dreht, denn diese Funktion verdoppelt den RAM-Verbrauch. Siehe auch hier:
https://bugs.php.net/bug.php?id=75382

Gruß


pn email
Gast 
20.02.2009, 02:43
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "ini_set('memory_limit') je nach Auflösung, Farbtiefe, usw" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
Ähnliche BeiträgeRe:
Letzter Beitrag
KM/Limit
Moin Jungs, mal eine ganz blöde Frage, wie benutze ich die Geschwindigkeitsbegrenzung? Wie der Gescheindigkeitswarner funktioniert ist klar, doch wie funktioniert der Begrenzer? Ich schaffe es einfach nicht das Ding mit Werten zu füttern. Danke...
von Diekgraaf
3
359
10.02.2019, 11:00
opelfahrer
 Tempo-Limit auf der AB
Soll ein Tempo-Limit (wie heute von der Politik gefordert) für Deutsche AB eingeführt werden? Natürlich entscheiden dies nicht " Wir " die Autofahrer lol .......aber mich interessiert Eure Meinung! Zu dem "FüR & WIDER"...
von *iceman
7
325
12.03.2011, 10:59
Der_Chrischi
Limit Visa
Hallo, folgende Frage: Ich habe mir bei meiner Sparkasse eine Visa Karte ausstellen lassen. Nach einigen Tests habe ich folgendes herausgefunden: Monatliches Limit- 1000&euro; Abheben von Bargeld- 200&euro; pro Tag ( mit Pin am...
von Lemon100
1
458
29.06.2012, 20:39
Saschka
Limit Visa
Hallo, Frage: Das Limit von 1000 Euro meiner Sparkassen- Visakarte war verbraucht. Da ich die Karte für weitere Zahlungen brauche ( Bahnfahrkarte ) hab ich von meinem Girokonto einen Betrag auf meine Visacard per Überweisung transferiert. Das...
von Silver
2
1.394
13.04.2011, 19:41
mgutt
Dragon Ball Z: Burst Limit
Bereits auf auf der PS2 gelang es Bandai-Namco mit der ,,Budokai" bzw. ,,Budokai Tenkaiichi" -Serie eine breite Masse mit ihren, auf der Dragonball-Saga basierenden Beat em ups zu erreichen. Cel Shading Optik und sehr schnelles und simples...
von Panda
6
500
16.08.2008, 14:53
Revolver Ocelot
DKB: Wann/Wie kann man Dispo-Limit erhöhen?
Ich will ungern nach einem Monat nachfragen, aber 500,- EUR sind nicht gerade viel und irgendwann will ich mein vorheriges Konto ja auch mal los werden ;) Weiß jemand wann bzw. ob das automatisch passiert oder ab wann man überhaupt eine Erhöhung...
von mgutt
7
7.848
04.05.2012, 15:29
mgutt
Windows Backup auf NAS: Speicherplatz-Limit festlegen (es geht)
Ich habe in Windows 10 den Dateiversionsverlauf und das Image-Backup (Windows 7 Sichern und Wiederherstellen) aktiv. Gerade bei der Dateiversionierung nervt es mich aber, dass mit der Zeit mein NAS vollläuft. Allerdings habe ich nun die Lösung...
von mgutt
10
846
12.04.2016, 08:34
mgutt
Hart am Limit- Nein ich will keine Filmdiskosion anfangen ;)
Hallo Zusammen, gestern kam ja der super, mega, hammer Blockbuster Hart am Limit auf Pro7! Das Einzige was mich jetzt aber noch interessiert ist das Turbinen Getriebene silberne Motorrad was da am Ende so realistisch durch meinen Fernseher...
von Neutron
24
18.744
30.01.2007, 17:12
Fireblade
In memory...my ej9
Da ich meinen Ej9 verkauft habe wollte ich zum abschied noch einen Bilderthread aufmachen :cry: . Naja das gute daran ist, ich bin jetzt endlich eh6 Fahrer...
von AC/DC
6
231
28.10.2008, 20:50
AC/DC
Sonos Musik-Bibliothek / MP3 Limit von 65000 Titeln umgehen
Wer mehr als 65.000 Musikdateien hat, kann sie nicht mehr bei Sonos indexieren lassen. Es gibt aber ein paar Tricks das zu umgehen. Einmal könnte man lokal einen Plex Server installieren. Das finde ich aber relativ aufwendig und würde mir auch zu viel...
von mgutt
0
688
14.11.2018, 09:53
mgutt
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |