PDA

Bekijk Volledige Versie : PHP 5.2.1 en imagecreatefromjpg()



Digiover
19/02/07, 22:13
Zijn hier toevallig collega's die PHP versie 5.2.1 uitgerold hebben en (ook) problemen ondervinden met o.a. de imagecreatefromjpg() (http://nl2.php.net/manual/nl/function.imagecreatefromjpeg.php) functie(*)? De php.ini instelling memory_limit is ingesteld op 16M. In de "oude" PHP 5.2.0 was deze instelling 8M en gaf dit geen problemen, nu schijnbaar wel
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 3464 bytes) in D:\www\path.com\www\to\upload_script.php on line 71Nu heb ik al zo begrepen dat de GD library erg veel (geheugen) overhead bevat, de bestandsgrootte is niet relevant maar het gaat om het aantal pixels. Zo heeft een image van 640x480 al bijna 5 MB nodig. Kan men daarom spreken van een nieuwe bug, of van het fixen van een bestaande bug (waarin PHP dan meer geheugen kon gebruiken dan beschikbaar was).

OS: Windows 2003, met IIS 6.

(*) Om nog maar niet te spreken van de geintroduceerde str_ireplace() bug... En om alle flames, rants e.d. alvast tegen te gaan: In onze testomgeving gaf PHP 5.2.1 geen enkel probleem, ook niet in het begin met een memory_limit van 8M. Maar goed, het is onmogelijk om ieder willekeurig script te kunnen testen, dus onze test omgeving bevat enkel standaard scripts, blogs, gastenboeken, etc.

It-Biz
19/02/07, 22:32
Wat voor resolutie gaat het om? 2048x1536, 1,66 mb werkt goed met mem limiet van 20MB.
(linux btw).

Digiover
19/02/07, 22:38
De resolutie verschilt, neem 10 klanten en je hebt tig verschillende resoluties... De volgende doet het bijvoorbeeld niet:
$ jpeginfo vuurwerk2.jpg
vuurwerk2.jpg 2272 x 1704 24bit Exif N 1033659
Volgens phpthumb faq (vraag 5) (http://phpthumb.sourceforge.net/demo/docs/phpthumb.faq.txt) zou je dan uitkomen op ~ 18 MB:
2272 x 1704 x 5 = 19357440

Max
19/02/07, 22:44
De compressie wordt door GD eraf gehaald, en het geheugen dat hij gebruikt is te berekenen door breedte * hoogte * 4. Omdat per pixel 4 bytes gebruikt wordt.

Dit is altijd al zo geweest, en is ook terug te vinden op de website van GDlib zelf, ik geloof in de FAQ maar dat weet ik zo 123 niet meer zeker.


Most often, the problem is that the memory_limit parameter in php.ini is set to something very conservative, like 8M (eight megabytes). Increase that setting and restart the web server.

Of course, opening truly huge images can cause real memory problems, if several are open at once. 8,000 pixels times 8,000 pixels times four bytes for truecolor equals a walloping 256 megabytes.

almar
19/02/07, 23:14
1024 x 1200 x 4 bytes (24bit) = 4915200 bytes = 5 MB
3504 x 2336 x 4 bytes (24bit) = 32741376 bytes = 40 MB

Digiover
19/02/07, 23:20
Heh, ik was Max net een minuutje voor :P Allemaal iig bedankt :) Maar stel dat PHP de functie nu correct afhandelt (exit vanwege te veel geheugen gebruik), kan ik dan stellen dat PHP 5.2.0 het niet goed afhandelde? Dezelfde scripts werkten toen en ik kan me niet voorstellen dat men van de ene op de andere dag foto's van (veel) hogere resoluties upload.