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);
}