Autor Zpráva
Watchick
Profil
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 9216 bytes) in /var/www/web2/damak.cz/uzivatele.damak.cz/resizer.php on line 25

V souboru:
function Resizer($filename,$copypath,$MaxWidth,$MaxHeight) {
//zjistime puvodni velikost obrazku  
list($OrigWidth, $OrigHeight) = getimagesize($filename); 
//hodnota 0 v parametrech MaxWidth resp. MaxHeight znamena, 
//ze sirka resp. vyska vysledku muze byt libovolna  
if ($MaxWidth == 0) $MaxWidth = $OrigWidth; 
if ($MaxHeight == 0) $MaxHeight = $OrigHeight; 
//nyni vypocitam pomer zmenseni  
$pw = $OrigWidth / $MaxWidth; 
$ph = $OrigHeight / $MaxHeight; 
if ($pw > $ph)
 $p = $pw; 
 else  
 $p = $ph; 
if ($p < 1) 
$p = 1; 
//v p ted mame pomer pro zmenseni 
//vypocitame vysku a sirku zmenseneho obrazku  
$NewWidth = (int)$OrigWidth / $p; 
$NewHeight = (int)$OrigHeight / $p; 
//vytvorime novy obrazek pozadovane vysky a sirky  
$image_p = imagecreatetruecolor($NewWidth, $NewHeight); 
//otevreme puvodni obrazek se souboru  
$image = imagecreatefromjpeg($filename); 
//a okopirujeme zmenseny puvodni obrazek do noveho  
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $NewWidth, $NewHeight, $OrigWidth, $OrigHeight); 
//a ulozime  
imagejpeg($image_p, $copypath, 100); 
}


Jde ta "paměť" nějak zvětšit, nebo v čem by mohl být problém?

Děkuji
Joker
Profil
Watchick
Blbý, no, taky mám se zmenšováním velkých obrázků podobný problém.

Maximální velikost paměti pro skript zvětšit jde, ale je na to potřeba mít přístup k php.ini, což na webhostingu bývá docela problém.
V php.ini by to mělo být nastavení memory_limit.
watchick
Profil *
a kdyby se mi to povedlo, tak kolik by tak bylo dobre nastavit, aby to stacilo... cca?
popripade jak se da poznat, kolik uz je moc, a zastavit to podminkou, aby se neobjevil error?

diky
Joker
Profil
watchick
a kdyby se mi to povedlo, tak kolik by tak bylo dobre nastavit, aby to stacilo... cca?
V případě obrázků se to liší kus od kusu. Hlavně záleží na velikosti (~ rozměrech v pixelech) obrázku.

popripade jak se da poznat, kolik uz je moc, a zastavit to podminkou, aby se neobjevil error?
Upřímně řečeno, tohle by mě taky zajímalo.
AM_
Profil
Lze to vzít takzvaně "baj voko" - zjistit, při jaké velikosti v bytech zhruba nastává problém, a vyšší velikost prostě zakázat. Nebude to přesné, ale aspoň něco.
Watchick
Profil
Špatný na tom je to, že se vytváří vlastně 2 obrázky, jeden větší, a jedna mala ikonka, ale vytvori se jen ikonka a zkopíruje se velký obrázek, takže střední velikost chybí... njn al chyba nastává už při 600KB...
Joker
Profil
Watchick
Špatný na tom je to, že se vytváří vlastně 2 obrázky, jeden větší, a jedna mala ikonka, ale vytvori se jen ikonka a zkopíruje se velký obrázek, takže střední velikost chybí
Ale kdyby se ten střední obrázek vytvářel jako první, tak se vytvoří buď všechny nebo žádný, ne?
Mike8748
Profil
Watchick
njn al chyba nastává už při 600KB...
omyl
chyba nastává od určitého rozlišení obrázku v pixelech, na tom kolik soubor zabírá na disku vubec nezáleží
Watchick
Profil
aha... http://uzivatele.damak.cz/fotky/osobni/57.jpg Takže tohle je moc, jasný...
Mike8748
Profil
Watchick
hrubej vypocet pro "bezny" obrazky je (sirka x vyska x 3) = velikost pameti v bajtech, kolik pro to potrebuje GD knihovna. sirka a vyska v pixelech.
a jeste je treba pocitat s tim ze tolik pameti ti zabere otevreni zdrojoveho obrazku. pak jeste potrebujes pamet na vytvoreni ciloveho obrazku, ty zmenseniny. vypocet bude stejnej. k tomu jeste pricist par desitek(spis stovek) kilobajtu pro skript jako takovej, a to cely se ti musi vejit do memory limitu
AM_
Profil
chyba nastává od určitého rozlišení obrázku v pixelech, na tom kolik soubor zabírá na disku vubec nezáleží
Mike8748
Jo, pochopitelně jde o pixely, místo na disku ale může sloužit pro hrubý odhad (psal jsem, že by to nebylo přesné). Nejdřív mi nedošlo, že vlastně rozlišení lze zjistit přes funkci getimagesize() - s tím už to půjde docela přesně.
Davex
Profil
Watchick
Joker
Pokud to admin serveru nezakázal, tak můžete zvětšit velikost paměti v souboru .htaccess pomocí volby php_value:
php_value memory_limit 30M
Watchick
Profil
Dá se pak nějak ověřit, zda-li to funguje, než že to zase vyhodí error?
Watchick
Profil
Davex
Supr moc ;)

memory_limit Local: 60M; Master 16M

už to jde v pohodě :)

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: