Autor Zpráva
Fisak
Profil
Dobrý den. Rád bych se zeptal jestli lze nějak zacachovat obrázky na stránce tak aby se načetli pouze jednou a pak už se jen kopírovali. Myslím že to šlo nějak pomocí jquery $('<img/>').attr('src', 'obrazek.gif'); ale tím si nejsem jistý. Prosím o radu.
honzaik
Profil
myslim že to si zajištuje prohlížeč sám :D když budeš mit obrázek se stejnou url tak ho to nebude stahovat znova
Fisak
Profil
honzaik:
aha no já mam na stránce 7171 kostiček obrázků ale je tam pouze 31 obrázků.. z větší části se opakují... A právě píše mi to "Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 57065474 bytes) in /data/web/virtuals/30303/virtual/www/subdom/chadmin/system/function/function.main.php on line 305"
honzaik
Profil
no tak ale to je chyba v php ne?
Fisak
Profil
honzaik:
No je to memory limit.. Já ho mám nastavený na 128MB a pokud se nemýlím tak pokud přesáhne skript tento limit tak se zvolá tato hláška. A pokud počítám správně tak by to měli způsobovat ty obrázky...
honzaik
Profil
hm a ty tam ty obrázky přidáváš hned zezačátku čistě přes html, nebo průběžně js? zkus někam do body dát <img src="url" style="display:none">
Fisak
Profil
honzaik:
no tahám z db url a pak je vkládám do <img src="url" />


<style type="text/css">
body {overflow :hidden;}
.presun_mne    {position:relative; cursor:move; width: 9999999px;}
.admin_nastroje {
position: absolute;
top: 0;
left: 0;
z-index: 10;
border: 1px solid;
border-color: #000000;
background-color:white;
}
</style>

<div class="admin_nastroje">

<form method="post">
    <input name="plus_y" type="submit"  value="Přidat horní řadu" /> <input name="minus_y" type="submit"  value="Přidat dolní řadu" /> <input name="minus_x" type="submit"  value="Přidat levý sloupec" /> <input name="plus_x" type="submit"  value="Přidat pravý sloupec" />  ||  velikost: <input name="px_type" type="text" size="4" value="<?php if(empty($_GET['size'])) { echo "100"; } else { echo $_GET['size']; } ?>" />px || okraje: <input name="border_type" type="checkbox" <?php if(!empty($_GET['br']) and $_GET['br'] == "on") echo "checked=\"checked\""; ?>/> <input name="save_type" type="submit"  value="Uložit" />
</form>
</div>


<div class="presun_mne">

<?php 
//výpis výškových souřadnic
$map_y_sql = DB::query("SELECT DISTINCT [position_y] FROM [ch_map] ORDER BY position_y")->fetchAll();
foreach ($map_y_sql as $n => $row_map_y) {

//výpis šířkových souřadnic
$map_x_sql = DB::query("SELECT * FROM [ch_map] where [position_y] = %i", $row_map_y->position_y, "ORDER BY position_x")->fetchAll();
foreach ($map_x_sql as $n => $row_map_x) { 

$map_img_echo = DB::query("SELECT [url_img] FROM [ch_map_img] where [id] = %i", $row_map_x->img_id);


?><a href="#" onDblClick="openModalFrame('<?php echo $row_map_x->id; ?>');"><img src="./images/textures/<?php echo $map_img_echo->fetchSingle('url_img'); ?>" alt="<?php echo $row_map_x->position_x.":".$row_map_x->position_y; ?>" title="<?php echo $row_map_x->position_x.":".$row_map_x->position_y; ?>" width="<?php if(empty($_GET['size'])) { echo "100"; } else { echo $_GET['size']; } ?>" height="<?php if(empty($_GET['size'])) { echo "100"; } else { echo $_GET['size']; } ?>" <?php if(!empty($_GET['br']) and $_GET['br'] == "on") echo "border=\"1\""; ?> /></a><div id="dialog-<?php echo $row_map_x->id; ?>" style="min-height: 500px; width: 1200px; z-index:10000; display:none;" title="Změna textury"><div id="contentmodal"><?php 
$map_img_echo_now = DB::query("SELECT [*] FROM [ch_map_img]")->fetchAll();
foreach ($map_img_echo_now as $n => $row_img_ech) {
echo "$('<img/>').attr('src', './images/textures/".$row_img_ech->url_img."');"; 
echo "<a href=\"#\" onclick=\"sendAjaxTextures('".$row_img_ech->id."', '".$row_map_x->id."');\"><img src=\"./images/textures/".$row_img_ech->url_img."\" /></a>"; 
}
?></div></div><?php 

}
echo "<br>"; 
}

?>

</div>
honzaik
Profil
tohle se mi moc nechce luštit, jako nejsem takovej odborník ale prostě poradim že obrázek se dá nacachovat jak už jsem psal nebo pokud to dělá s js tak bych si udělal
var el = document.createElement("img");
el.src= url;
a pak bych javascriptem vypsal pořád jen ten element. ale když je to chyba php tak to nebude mit s cachovanim nic společnýho, ten obrázek se ani neodešle prohlížeči od serveru (ani neví kterej, protože php neodeslalo dokument). chybu bych hledal někde v celkový struktuře toho php skriptu, popřípadě předelal :D
Fisak
Profil
honzaik:
No googlil jsem a právě všude psali že to je memory limitem.. já ho mám nastavený na 128MB a přemýšlím co jiného by mi ho mohlo překročit než to že by se mi nažetlo 7000krát 31 obrázků. tzn když mam
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
<img src="obrazek.png" />
tak se mi taky načte obrázek desetkrát ne jen jednou a pak se kopíruje ještě 9x ale vim že pomocí jquery tohle jde udělat že se načte jednou nějak takto: $('<img/>').attr('src', 'obrazek.png'); a pak se už jen kopíruje na stránce
honzaik
Profil
tobě se to načte 10x? já teda když si zkusim udělat třeba 6 obrázků za sebou se stejnou url tak chrome mi vypíše že se stahoval jen jeden obrázek :D (jeden má vel 6,5kB)
<img src="http://www.zing.cz/images/thumbnails/article178/7347b64b-17247-17208-nfs.jpg">
<img src="http://www.zing.cz/images/thumbnails/article178/7347b64b-17247-17208-nfs.jpg">
<img src="http://www.zing.cz/images/thumbnails/article178/7347b64b-17247-17208-nfs.jpg">
<img src="http://www.zing.cz/images/thumbnails/article178/7347b64b-17247-17208-nfs.jpg">
<img src="http://www.zing.cz/images/thumbnails/article178/7347b64b-17247-17208-nfs.jpg">
<img src="http://www.zing.cz/images/thumbnails/article178/7347b64b-17247-17208-nfs.jpg">
viz http://i.imgur.com/tvFjot4.png
jenikkozak
Profil
O obrázek žádá prohlížeč až poté, co získá zdrojový HTML kód. Tvůj skript ale patrně selže dřív, než stihne HTML vygenerovat. Přemýšlet v takové situaci nad cachováním obrázků nebo nějakými výmysly v JS je zbytečné.
pcmanik
Profil
Fisak:
Máš tam nejak veľa vnorených cyklov, ktorý každý vyťahuje niečo z db. Zrejme php neuvoľnuje prostriedky a tebe to tak zaplní celú pameť.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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