Kuinka ratkaista PHP Luotettava virhe: Sallittu muisti koko 8388608 tavua loppuun

Yksi tavallisimmista ja turhauttavista virheistä, joita PHP-koodaajat kohtaavat, lukee: "Kuolemaan johtanut virhe: Sallittu muistin koko 8388608 tavua loppuun ..." ja sen jälkeen jotain "(yritti jakaa XXXX tavua) /home/www/file.module on line 12. "Tämä kuolemaan johtava PHP-virhe johtuu siitä, että oletuksena PHP: llä on 8 MB: n muistin käyttöraja mille tahansa käsikirjoitukselle. Tämä on hyvä asia, koska et halua väärennettyä PHP-komentosarjaa tuhoamaan palvelimesi hukkamalla koko muistia. Mutta joskus sinulla on PHP-skripti, joka tavallisesti ylittää 8 Mt: n rajan ( esimerkiksi tuoda tai ladata ). Voit kiertää ongelman "Kuolemaan johtanut virhe: Sallittu muisti koko 8388608 tavua loppuun ..." -virheilmoitus, lisää tämä koodi riviin käsikirjassasi ylhäällä:

ini_set ("memory_limit", " 16M ");

Tämä asettaa muistin rajan 16 MB, ei 8 MB. Voit ja sinun pitäisi viilata tämän numeron niin, että se on mahdollisimman alhainen toistamatta tätä virhesanomaa. Tämä muuttaa vain kyseisen tietyn PHP-tiedoston muistirajaa.

Vaihtoehtoisesti voit muokata php.ini-tiedostoasi muistirajan yläpuolelle. Tämä vaikuttaa kaikkiin palvelimesi komentosarjoihin. Avaa php.ini ja etsi rivi, joka lukee "memory_limit" ja muuttaa sitä:

memory_limit = 16M

Olen huomannut omassa PHP.ini-tiedostossa, että oletusarvo on paljon suurempi 128M: ssä. Joten jos saisin tämän virheilmoituksen, se luki: "Kuoleva virhe: Sallittu muistin koko 134217728 tavua loppuun ..." ja ilmeisesti paljon suurempi ongelma. Mutta sillä on sama kiertotapa kuin "Kuolemaan johtanut virhe: Sallitun muistin koko 8388608 tavua loppuun ..." tai "Kuolemaan johtanut virhe: sallittu muistin koko 16777216 tavua loppuun ..." tai mitä tahansa. Ilmeisesti muistin_limit-oletusarvo nousi PHP: stä 5.2.0: sta 8M: sta 16M: iin ja on nyt 128M PHP 5.3.0: lle, mikä selittää, miksi et ehkä saa tätä virhesanomaa lainkaan.

Voit myös poistaa muistirajoituksen asettamalla muistin_limit -1-arvoon PHP.ini.

memory_limit = -1

Tämä ei yleensä ole hyvä ajatus, vaikka se johtuu ilmeisistä syistä.

Huomaa: Voit myös käyttää memory_limit-linjaa .htaccess-sivulla.

Muistakaa, että tämä on vain kiertotapa. Todellakin, PHP-skripti ei saisi ylittää 8 Mt: tä, ellet lataa tiedostoja tai tee jotain muuta, joka luonnollisesti vie paljon muistia. Se, mitä sinun pitäisi todella tehdä, yrittää selvittää, miksi skripti käyttää niin paljon muistia ja yrittää korjata sen. Yksi tapa selvittää, kuinka paljon muistia PHP-skripti käyttää on memory_get_usage () PHP-funktio. Kokeile vain komentojesi mistä tahansa kohtaa, jos haluat selvittää, missä muistin käyttö on piristävää:

echo memory_get_usage ();

Jos saat tämän virheilmoituksen Drupalissa tai Joomla, todennäköinen syy on uusi moduuli tai paketti. Esimerkiksi Drupalissa admin / modules-sivu lataa jokaisen Drupal-asennuksen moduulin, joka voi olla karvainen, jos mukautettu moduuli on buginen, korruptoitunut tai hakkeroitu. Kokeile poistaa moduulit yksitellen tunnistamaan, mikä tuo puolueen alas. Myös jotkut palveluntarjoajat eivät ota huomioon yrityksesi muokata PHP-koodin muistirajoituksia, joten sinun on ehkä otettava yhteyttä hosting-tukeen auttaaksesi sinua. Olen löytänyt joskus minun täytyy muokata php.ini-tiedostoa ja joskus laittaa koodi .htaccess-tiedostoon. Joko niin, toivottavasti tämä info riittää sinut mukaan!