Kako riješiti PHP fatalnu pogrešku: Dopuštena veličina memorije od 8388608 bajtova je iscrpljena

Jedna od najčešćih i frustrirajućih pogrešakana koje nailaze PHP koderi glasi: "Fatalna greška: Dozvoljena veličina memorije od 8388608 bajtova je iscrpljena ...", nakon čega slijedi nešto poput "(pokušao dodijeliti XXXX bajtova) u /home/www/file.module u retku 12." Ova kobna PHP greška usjeva gore, jer PHP prema zadanom ima ograničenje potrošnje memorije od 8 MB za bilo koju skriptu. To je dobra stvar, zapravo, jer ne želite da lopta PHP skripta sruši vaš poslužitelj tako što ćete provući svu memoriju. No povremeno ćete imati PHP skriptu koja obično prelazi granicu od 8 MB (recimo, za uvoz ili prijenos). Da biste zaobišli poruku pogreške "Fatal error: Dopuštena veličina memorije od 8388608 bajtova ...", jednostavno umetnite ovu liniju koda u svoju skriptu na vrhu:

ini_set ( „memory_limit”,”16M„);

memory_limit

Time ćete postaviti svoju memoriju na 16 MBviše od 8 MB. Možete i trebate usporediti ovaj broj tako da bude što niži bez ponavljanja te poruke o pogrešci. To će samo promijeniti ograničenje memorije za tu PHP datoteku.

Alternativno, možete promijeniti svoju php.ini datoteku tako da povećate ograničenje memorije. To će utjecati na sve skripte na vašem poslužitelju. Jednostavno otvorite php.ini i pronađite liniju koja glasi "memory_limit" i promijenite je:

memory_limit = 16M

Fatalna pogreška: Dopuštena veličina memorije 134217728 je iscrpljena

Primijetio sam na vlastitom PHP-u.ini datoteku da je moja zadana postavka puno veća na 128M. Dakle, ako ikad primim ovu poruku o pogrešci, glasilo bi: "Fatalna greška: Dopuštena veličina memorije od 134217728 bajtova ..." i očito bi bio puno veći problem. Ali ono ima isti smisao kao "Fatalna pogreška: Dopuštena veličina memorije od 8388608 bajtova je iscrpljena ..." ili "Fatal error: Dopuštena veličina memorije od 16777216 bytes-a ..." ili bilo što drugo. Očigledno je da je default_ memory_limit povećan s 8M na 16M u PHP 5.2.0 i sada je 128M za PHP 5.3.0, što bi objasnilo zašto možda uopće ne dobivate ovu poruku o pogrešci.

Također možete onemogućiti ograničenje memorije tako da postavite memory_limit na –1 u PHP.ini.

memory_limit = -1

To, međutim, iz očitih razloga obično nije dobra ideja.

Napomena: Također možete koristiti liniju memory_limit na svojoj .htaccess stranici.

Zapamtite, ovo je samo zaobilazno rješenje. Zaista, vaš PHP skripta bi trebao ne biti veći od 8 MB, osim ako datoteke za prijenos iliraditi nešto drugo što očito zauzima puno memorije. Ono što biste stvarno trebali raditi je pokušati otkriti zašto vaš scenarij koristi toliko memorije i pokušati ga popraviti. Jedan od načina da shvatite koliko memorije koristi vaša PHP skripta je korištenje PHP funkcije memory_get_usage (). Jednostavno je odjeknite u bilo kojem trenutku svoje skripte kako biste saznali na koji način se povećava vaša memorija:

echo memory_get_usage ();

Ako vam se ova poruka o pogrešci prikazuje u Drupalu ili Joomli, vjerojatni krivac je novi modul ili paket. Na primjer, u Drupalu se učitava stranica administratora / modula svaki modula u vašoj instalaciji Drupal, koji možete dobitidlakavi ako je prilagođeni modul buggy, korumpiran ili hakiran. Pokušajte onemogućiti modula jedan po jedan da biste utvrdili što vodi stranku. Također će neki davatelji usluga hostinga ignorirati vaše pokušaje izmjene memorijskih ograničenja za vaš PHP kôd, tako da ćete možda trebati da se obrate vašoj usluzi hostinga da vam pomogne. Nalazio sam ponekad da trebam urediti datoteku php.ini, a ponekad staviti kôd u datoteku .htaccess. Bilo kako bilo, nadam se da je ovakva informacija ovdje dovoljna da vas krene na put!

0

Slični članci

Ostavite komentar