Autor Zpráva
Pavel Straka
Profil
Dobrý večer, rád bych poprosil zkušenější o pomoc.
Na téma vyčerpaná paměť jsem našel zde na fóru několik vláken, ale ne odpověď na mou otázku.

Chyba se objevuje, pokud uživatel nahraje fotografie ve vysokém rozlišení (4600 x 3000). Zvýšit limit pomocí ini_set("memory_size","XXX") není možné, zřejmě je potřeba to řešit přes hosting. Můj dotaz ale směřuje trochu jinam - existuje způsob, jak zamezit zobrazení chybové hlášky bez omezení velikosti velikosti nahrávaného soboru? Je dobrým řešením jednoduše navýšit limit paměti?

Děkuji za raqdy.
Davex
Profil
Pavel Straka:
Chyba se objevuje, pokud uživatel nahraje fotografie ve vysokém rozlišení (4600 x 3000).
Tu chybu nemůže způsobit samotné nahrání obrázků, ale až jeho zpracování funkcemi z GD knihovny.

Můj dotaz ale směřuje trochu jinam - existuje způsob, jak zamezit zobrazení chybové hlášky bez omezení velikosti velikosti nahrávaného soboru?
Ano, místo GD knihovny se dá pro práci z obrázky použít ImageMagick, pokud je na webhostingu dostupný. Na něj se memory_limit většinou nevztahuje.

Je dobrým řešením jednoduše navýšit limit paměti?
Taky je to jedno z možných řešení.
Alphard
Profil
Když kouknete do Nejčastější potíže s PHP (FAQ), je tam i odkaz na kalkulačku, kolik poměti bude pro danou fotku potřeba.
Pavel Straka
Profil
Davex:
Ano, špatně jsem se vyjádřil, chybu způsobuje až samotné zpracování.

Jako nejjednodušší způsob se mi jeví tedy prosté navýšení limitu paměti. Pokud tomu ale rozumím správně - teoreticky žádné navýšení není dostatečné. Existuje způsob, jak před vyčerpáním paměti (dosažením limitu) zobrazit nějakou chybovou hlášku a nenechat skript spadnout Fatal Errorem?

Díky.
Davex
Profil
Pavel Straka:
Pokud tomu ale rozumím správně - teoreticky žádné navýšení není dostatečné.
Prakticky navýšení na vhodnou hodnotu je dostatečné. Stačí si jen uvědomit, kolik bude v paměti současně obrázků a kolik místa každý zabere.

+ velký obrázek v TrueColor zabere 4600 * 3000 * 3 *1.8 ~ 71 MB
+ zmenšený obrázek 1500 * 1000 * 3 * 1.8 ~ 8 MB
= dohromady by tedy měl stačit memory_limit kolem 80 MB

Existuje způsob, jak před vyčerpáním paměti (dosažením limitu) zobrazit nějakou chybovou hlášku a nenechat skript spadnout Fatal Errorem?
Mělo by to jít odchytit kombinací register_shutdown_function() a error_get_last().

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: