| | |
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 07.08.06 Prihlásený: 18.11.21 Príspevky: 947 Témy: 268 Bydlisko: Levice |
mam klasicky upload suboru do max. 6 MB /php_value upload_max_filesize 6M som nastavil, takze server akceptuje takuto velkost suboru/.
Problem je ten, ze pred tym ako sa uploadnuty obrazok ulozi na server, prebehne funkcia RESIZE. ktora zmensi v pomere obrazok.
A tu je problem, ze pri pokuse o vykonanie RESIZE vypise toto Fatal error: Allowed memory size of 157286400 bytes exhausted (tried to allocate 32000 bytes)
Dany obrazok pri ktorom to vypisuje ma rozmer 8000x10000 px, avsak velkost ma len 1,6 MB.
Bez funkcie RESIZE to uploadne v poriadku bez chyby, memory vypisuje len ked je tam aj ta funkcia resize, ktora asi potrebuej viac pamate na zmensenie takeho rozmeru..si myslim...
Pomocou ini_set("memory_limit","500M"); som nastavil limit pamate az na 500MB aby to preslo, ale nepokladam to za spravne riesenie zbytocne zvysovat takto limit. Viete niekto poradit ako to inak vyriesit?
Pre uplnost tu mam ten script RESIZE - problem s pamatou je len pri obrazkoch velkych rozmerov
Kód: function resize( $subor, $KamUlozit, $MaxSirka, $MaxVyska)
{ //povodna velkost obrazku list($sirka, $vyska) = getimagesize($subor); //hodnota 0 v parametroch MaxWidth resp. MaxHeight znamena, //ze sirka resp. vyska vysledku moze byt lubovolna if ($MaxSirka == 0){ $MaxSirka = $sirka;} if ($MaxVyska == 0){ $MaxVyska = $vyska;} //vyratame pomer $pomer_sirka = $sirka / $MaxSirka; //pomer sirka $pomer_vyska = $vyska / $MaxVyska; //pomer vyska if ($pomer_sirka > $pomer_vyska) { $pomer = $pomer_sirka;} else { $pomer = $pomer_vyska;} if ($pomer < 1) {$pomer = 1;} //v pomer mame pomer pre zmensenie //vypocitame vysku a sirku zmenseneho obrazku
$NovaSirka = (int)$sirka / $pomer; $NovaVyska = (int)$vyska / $pomer;
//vytvorime novy obrazok pozadovanej vysky a sirky $image_p = imagecreatetruecolor($NovaSirka, $NovaVyska); $image = imagecreatefromjpeg($subor); //a okopirujeme zmenseny povodny obrazok do noveho imagecopyresampled($image_p, $image, 0, 0, 0, 0, $NovaSirka, $NovaVyska, $sirka, $vyska); //a ulozime imagejpeg($image_p, $KamUlozit, 80); }
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 19.02.2010 23:38 | |
|
Ten obrázok bude v pamäti zbalený, rozbalený a aj ten menší nezabalený a aj zbalený a to pri tak veľkom obrázku bude minimálne niekoľko desiatok megabajtov (koľko presne sa nedá určiť, záleží to od mnohých faktorov). Toto je aj dôvod, prečo sa často používajú externé programy (veľmi často napr ImageMagick), ale musí to podporovať aj webhosting.
|
|
Registrovaný: 07.08.06 Prihlásený: 18.11.21 Príspevky: 947 Témy: 268 Bydlisko: Levice | Napísal autor témy neopagan: 19.02.2010 23:45 | |
|
aha, takze radsej pri klasickom uploade obmedzit rozmer obrazku na rozumny rozmer... inak tento rozmer som len cisto nahodne mal po ruke a riesil som tu chybu s pamatou..ok..diky
|
|
Registrovaný: 26.11.06 Prihlásený: 22.01.24 Príspevky: 4118 Témy: 319 Bydlisko: HE/BA | Napísal Flety: 19.02.2010 23:47 | |
|
Tiež mám podobný problém. Chrono, vieš riešenie, ako ten limit obísť?
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 20.02.2010 20:43 | |
|
Tú kontrolu asi nijako neoklameš. A ak server neumožňuje používanie ImageMagick, NetPBM... tak veľké obrázky asi nebudeš vedieť spracovať.
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 |
Nastavíš v PHP max_upload_file na trebars 500MB a PHP skontorluješ aký ten súbor v skutočnosti je.
|
|
Registrovaný: 26.11.06 Prihlásený: 22.01.24 Príspevky: 4118 Témy: 319 Bydlisko: HE/BA | Napísal Flety: 21.02.2010 23:18 | |
|
A pri zmenšovaní sa to znova zasekne.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|