Chyba, asi pretizeni?
25 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 1734 bytes) in /home/httpd/html/www.brhel.info/dolomity/admin/a/galerie/fotky_add.php on line 38 Kdyz nahravam 4 obrazky najednou ve formatu JPG 1700x1100 přes webové rozhraní píše se tato chyba. Prosim co to znamena a jak by to slo vyresit?
-
max 2 MB, musis to nahrat po castiach
-
No problem ale je ze samotnej obrazek ma 413kb a paklize nahravam 4 najednou tak to stejne neda dohromady 2mb a pres to to hlasi chybu..
-
Opravdu nahráváš 4 obrázky a každý má 413kB? JPG je komprimovaný formát a velikosti obrázků se výrazně liší podle toho, co na nich je.
-
samotný upload není problém, horší je, když s tím obrázkem pracuješ pomocí image_xxx Obrázek vytvořený v paměti z něčeho, co má 1700x1100 px je pak dost velký (při 16 bit hloubce bude mít obrázek skoro 4MB, předpokládám, že hloubka bude aspoň 32 bit, tj skoro 12MB. Plus režie navíc a už narážíš na limit, který je, předpokládám, na zdejším php stanoven na 20MB, jak praví chybová hláška. Takže: rušit obrázky v paměti? Rozumnější algoritmy? Nějak se s tím popereš.
-
Na WZ je memory_limit nastaven na 40M. Běžně PHP resizuji 3MPix fotky. Příklady 3 Mpix fotek (2048 x 1536 px, 24bit/pixel): Malá: 337kB na disku - 5,5 MB v paměti Velká: 668kB na disku - 9MB v paměti Tady asi problém nebude, obzvlášť, když chybové hlášce se jedná o 2MB limit. Na WZ je 2MB limit nastaven: post_max_size upload_max_filesize Tady bych zkusil zapátrat.
-
je to na jiném serveru. Díky za všechny rady.
-
zbi, 20 MB limit a přímo tam v té hlášce je napsané, že jsi překročil povolený objem paměti....
-
SRI, přehlédl jsem se o řád! Za tou dvojkou bylo příliš čiselek. Provozuji nějaké domény na pípni.cz a tam je memory_limit jen 6MB. To je naprosto nepoužitelné pro jakoukoli image funkci už pro 2 Mpix fotku! Musím si vždy fotky zmenšovat na lokále na finální velikost, než je tam nahraji - hrůza. Ještě, že na WZ je 40 MB.
-
zbi, v poho, jenom aby tazatel nebyl uveden v omyl, stejně si myslím, že tam má borderl ve skriptech....
-
MzM: když resampluješ několik fotek v jednom skriptu a důsledně neuvolňuješ paměť (ImageDestroy), tak dokážeš překročit jakýkoli memory_limit...
-
taktak...
-
No tak to teda nevím jak už to přeskočit. ImageDestroy samozřejmě používám. Tak díky všem za rady
-
Xili: Co máš za příkaz na řádku 38?
-
33 $in_name = "fotky/".$nahodna.$koncovka; ... 38 $in = ImageCreateFromJpeg($in_name); Prakticky je to o tom že se obrázky nahrajou na web do galerie a vytvoří se malé náhledy.
-
Hmm, to je docela logické, že ti to klekne právě tady. PHP si alokuje paměť na operace s obrázky. U JPGů to jsou řádově MB. Mám na WZ docela podobný skript (tvorba náhledů) a funguje bez problémů. Ale já vždy zpracovávám jen jednu fotku. Zkus si ve svém skriptu na více místech treknout, kolik paměti ti to žere funkcí memory_get_usage(). http://us2.php.net/memory_get_usage
-
No jo ale jak by to šlo jinak udělat? Jde o to že mám galerii. Pak je tam odkaz pro přidání fotek. Fotky lze přidávat po 10,aby se nemuselo pořád vracet sem tam.. potíž je v tom že mně to hlásí i chybu u jednoho obrázku, který je v rozlišení 1789x1165. :-(
-
Dělá to, když tam pustíš tu jedinou fotku 1789x1165? Nebo, když zpracováváš několik fotek po sobě v jednom skriptu a sekne se to na této fotce?
-
nahrávám poze jednu fotku 1789x1165 a píše to chybu jakmile ji zmensim na 1700x1100 tak to je bez chyby a vse probehne dobre
-
Ta věta je zamotaná. Asi je dobré používat tečky na koncích vět. Co jsi zkusil? Není ta fotka poškozená? Zkusil jsi větší fotku? Kolik máš volné paměti před ImageCreateFromJpeg?
-
Takhle jestliže nahrávám fotku 1789x1165 tak to napíše chybu. Jakmile fotku zmensim na 1700x1100 vse je OK. Fotka poškozená není zkoušel jsem to s více ve stejném rozlišení. Volné paměti? No měla by být volná celá.
-
Prostě je tam problém s pamětí. Zkus ten memory_get_usage() úplně na začátku skriptu a potom před řádkem 38. Uvidíš, jak se mění alokace paměti. Nezbývá ti než zkoušet, pátrat a zjišťovat. Funguje ten tvůj skript s většími fotkami (třeba 3Mipx = 2048x1536)?
-
3mipx No nfunguje jelikos uz je to asi moc velky
-
No, takže jsi asi na hranici memory_limit. Dle mého názoru máš následující možnosti. 1. Zoptimalizovat skript: důsledně rušit všechny nepotřebné proměnné (unset), rušit proměnné image (imagedestroy). Pokroky můžeš sledovat přes ten memory_get_usage(). 2. Pokusit se zvýšit si memory_limit. Pokud je to tvůj server, nebo to není zakázáno, můžeš zkusit příkaz: ini_set("memory_limit","40M"); nebo nastavit php.ini Pravděpodobně to ale nepůjde. 3. Fotky před uploadem zmenšit na lokále (ušetříš aspoň čas uploadu).
-
Tak jo zitre se do toho pustim. Diky vsem a hlavně zbi. ;-)