| Autor | Zpráva | ||
|---|---|---|---|
| Watchick Profil |
#1 · Zasláno: 2. 4. 2009, 20:30:03
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 |
#2 · Zasláno: 2. 4. 2009, 21:35:27
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 * |
#3 · Zasláno: 2. 4. 2009, 21:52:42
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 |
#4 · Zasláno: 2. 4. 2009, 22:17:18
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 |
#5 · Zasláno: 2. 4. 2009, 22:28:26
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 |
#6 · Zasláno: 3. 4. 2009, 06:28:14
Š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 |
#7 · Zasláno: 3. 4. 2009, 07:21:43
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 |
#8 · Zasláno: 3. 4. 2009, 09:49:57
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 |
#9 · Zasláno: 3. 4. 2009, 09:58:09
aha... http://uzivatele.damak.cz/fotky/osobni/57.jpg Takže tohle je moc, jasný...
|
||
| Mike8748 Profil |
#10 · Zasláno: 3. 4. 2009, 10:06:01 · Upravil/a: Mike8748
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 |
#11 · Zasláno: 3. 4. 2009, 10:58:13
„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 |
#12 · Zasláno: 3. 4. 2009, 18:49:52
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 |
#13 · Zasláno: 3. 4. 2009, 19:04:37
Dá se pak nějak ověřit, zda-li to funguje, než že to zase vyhodí error?
|
||
| Watchick Profil |
#14 · Zasláno: 3. 4. 2009, 19:08:59
Davex
Supr moc ;) memory_limit Local: 60M; Master 16M už to jde v pohodě :) |
||
|
Časová prodleva: 17 let
|
|||
0