| Autor | Zpráva | ||
|---|---|---|---|
| amorekj Profil |
#1 · Zasláno: 3. 2. 2014, 20:07:07
Dobrý den,
předem se omlouvám za hloupou otázku, ale opět nevím, kde dělám chybu. Limit je navýšen na 64MB a stejně nestačí. Údaje bych si chtěl ukládat do PHP z důvodu dalšího použití. Chyba: Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 536 bytes) on line 23 $i=1;
$vypis = mysql_query("SELECT * FROM `--`");
while ($zaznam = mysql_fetch_array($vypis )){
$datum = strtotime($zaznam["od"]);
$zarazka = strtotime($zaznam["do"] . ' + 1 day');
while($datum < $zarazka) {
$formatovany = date('d.m.Y', $datum);
$cas[$i] = $zaznam["apartman"];
$cas[$i."_datum"] = $formatovany;
$cas[$i."_jmeno"] = $zaznam["jmeno"];
$cas[$i."_poznamky"] = $zaznam["poznamky"];
$cas[$i."_id"] = $zaznam["id"];
$i++;
}
}Děkuji za Vaše odpovědi. Za vše jsem moc rád. |
||
| Micruss Profil |
#2 · Zasláno: 3. 2. 2014, 20:13:03
Co zkusit omezit počet vypisovaných dat ? A nebo opět navýšit limit na 128mb -.-
|
||
| Fisir Profil |
#3 · Zasláno: 3. 2. 2014, 20:13:23
Reaguji na amorekje:
Možná by pomohlo nastavit „zarážku“ přímo v SQL dotazu a pokud nevybíráte všechny sloupce, tak specifikovat, které ano. „on line 23“ Značí, že se paměť zaplnila na této řádce. S největší pravděpodobností bude ale problém někde výše v kódu. |
||
| amorekj Profil |
#4 · Zasláno: 3. 2. 2014, 20:28:39
Občas to píše:
Fatal error: Maximum execution time of 30 seconds exceeded on line 23 Z databáze to tahám vše s tím, že se to dole pak přehodnocuje, co je v danou chvíli užitečné - příp. se to zvýrazní a odkazuje na další stránku. Data se ukládají do PHP tím, že se vypíší všechny datumy (co jsou mezi od do) - dalo by se to omezit max. že by se vypisovali jen datumy, kterých se to týká v daném měsíci - tam mám proměnnou $month, nevím ale jak by SQL dotaz měl znít. Webový hosting mi napsal, že většině stačí 32 MB. Já mám 64 MB a prý v kódu mám zbytečnosti, které by se daly odstranit a určitě by pomohly i k rychlosti chodu aplikace. Nahoře je tedy část kódu, která paměť tolik zaplní. |
||
| Mike8748 Profil |
#5 · Zasláno: 3. 2. 2014, 21:39:58
amorekj:
já ti nevím, ale ten vnitřní cyklus na řádkách 7-16 podle mě nikdy neskončí (donekonečna plní pole $cas stejnýma datama) dokud ti nedojde pamět (nevidim tam změnu proměnné $datum takže podmínka cyklu bude vždy platit) navíc tam opakovaně vkládáš z DB poznámky (což ti v případě dlouhých textů akorat rychleji sežere paměť) |
||
| Micruss Profil |
#6 · Zasláno: 3. 2. 2014, 22:11:24
A taky, místo while($datum....), nechtěl jste dát if?
|
||
| janbarasek Profil |
#7 · Zasláno: 3. 2. 2014, 22:35:40
amorekj:
Zkus udělat úplně jednoduchou kontrolu, jestli to náhodou není nekonečný cykl, já to zjišťuji obvykle úplně jednoduše: <?php
$i = 0;
while (...) {
$i++;
if ($i >= 5000) { echo 'BACHA: Přetýká zásobník!'; break; }
} |
||
| amorekj Profil |
#8 · Zasláno: 4. 2. 2014, 00:11:23
Máte pravdu - místo while tam mělo být if :) Děkuji za upozornění.
Ta ochrana je dobrá věc - to určitě začnu používat :) Už mi to jede normálně. Moc dík :) moc moc :) |
||
| Keeehi Profil |
#9 · Zasláno: 4. 2. 2014, 00:18:43
amorekj:
„Ta ochrana je dobrá věc“ Mě to zase až tak moc úžasné nepřijde. Při vývoji a testování možná, ale ve finálním kódu to není potřeba. Nejlepší je si nastavit limit už při výběru z databáze jelikož se nepřenáší zbytečná data. |
||
| Alphard Profil |
amorekj:
„Ta ochrana je dobrá věc - to určitě začnu používat“ Těžko, neřeší to problém blbě navržené konstrukce, raději investujte více času do návrhu algoritmu samotného. Nesouhlasím ani s tím, že je to rozumné používat to při testování, naopak by to mohlo skrývat chyby. |
||
| aDAm Profil |
#11 · Zasláno: 4. 2. 2014, 08:52:31
Přetýká to je dobrej češtin ;)
|
||
|
Časová prodleva: 12 let
|
|||
0