Heips!
Minulla on PHP-koodia, mikä poistaa tietokannasta käyttäjän ja samalla kirjoittaa lokitauluun vähän höpinää. Kirjoitettaessa lokitauluun, kajahtaa ruutuun moinen virheilmoitus:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 154732 bytes) in syslog.php on line 22
Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes).
Mietin tuossa, että lokikirjoitus kutsutaan funktiossa. Tietokannan kirjoitusta ja lukua varten on oma luokka (kaapattu phpBB:stä). Onko mahdollista, että funktion sisällä määrittely
global $db; //jossa $db on mySQL-luokka
syö muistia isoja määriä? Onko jotain hyvää keino PHP:ssä, miten saisi muistia matkan varrella vapautettua?
Muistimäärän rajoitus tulee weppihotellin konfiksista.
Minulla on PHP-koodia, mikä poistaa tietokannasta käyttäjän ja samalla kirjoittaa lokitauluun vähän höpinää. Kirjoitettaessa lokitauluun, kajahtaa ruutuun moinen virheilmoitus:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 154732 bytes) in syslog.php on line 22
Allowed memory size of 33554432 bytes exhausted (tried to allocate 64 bytes).
Mietin tuossa, että lokikirjoitus kutsutaan funktiossa. Tietokannan kirjoitusta ja lukua varten on oma luokka (kaapattu phpBB:stä). Onko mahdollista, että funktion sisällä määrittely
global $db; //jossa $db on mySQL-luokka
syö muistia isoja määriä? Onko jotain hyvää keino PHP:ssä, miten saisi muistia matkan varrella vapautettua?
Muistimäärän rajoitus tulee weppihotellin konfiksista.
Vastaukset 2
Vanhimmat
Onhan sulla jokin pahasti pielessä sielä koodissa, jos noin yksinkertainen toimenpide syö muistia yli 33,5 Mt. Tuon pitäisi mennä reippaasti alta 1Mt kulutuksella riippuen paljon dataa lokitauluun kirjoitetaan.
*global $db; //jossa $db on mySQL-luokka
syö muistia isoja määriä?*
Empä uskoisi, että tuo tietokanta kirjasto paljon muistia söisi, veikkaisin muutaman kilon luokkaa maksimissaan.
* Onko jotain hyvää keino PHP:ssä, miten saisi muistia matkan varrella vapautettua?*
Onhan niitä keinoja vaikka mitä, mutta riippu koodistasi mitä voi käyttää. Esim voit tyhjentää muuttujat $x ='';....
tai sitten mysql_free_result($result); joka tyhjentää myslistä haetut. Sekä sulkea mysql_close($link); mysliin yhteyden. Mutta itse lähtisin etsimään mikä vie muistia noin paljon ja korjaisin sen.
Kysymys miten luvet tietokannasta?
Ei kai kyselyt ole tätä luokkaa SELECT * FROM taulu?
Jos on niin tuo hakee kaiken datan mitä tietokannan taulussa on, ja silloin tuo muistin ylitys ei ole mikään ihme. Joten LIMITillä rajoitusta tai WHEREllä ehtoja.
Katsoppas http://fi.php.net/manual/fi/function.memory-get-usage.php
Laita koodiisi echo memory_get_usage() . ""; useaan kohti, niin näät miten muistinkulutus kasvaa scriptin edetessä jolloin muistisyöpön paikannus helpottuu.
Joo, onhan tuohon samaan rihmastoon includettu melkoinen määrä muuta tavaraa, joten muistia kyllä kuluu.
Sen verran sain paikallistettua, että tässä tapauksessa ei varsinaisesti muistista ollutkaan kyse. Toisessa pätkässä, joka kutsuu tuota funkkaria, oli ehditty sulkea kantayhteys, ja PHP ilmaisia asiansa tuolla tavalla. Mutta myös toisesta yhteydestä tulee samanlainen ilmoitus, eikä siellä (ainakaan en ole löytänyt) suljeta kantayhteyttä.
Mutta kiitokset joka tapauksessa. Täytyy perehtyä tuohon php-ohjepätkään.