Slik løser du PHP Fatal feil: Tillatt minnestørrelse på 8388608 byte utmattet

En av de vanligste og mest frustrerende feilene som PHP-kodere opplever, lyder: "Fatal error: Tillatt minnestørrelse på 8388608 byte utmattet ..." etterfulgt av noe som "(prøvde å tildele XXXX bytes) i /home/www/file.module on line 12. "Denne dødelige PHP-feilen avhenger fordi PHP som standard har en begrensningsbegrensning på minst 8 MB for et gitt skript. Dette er en god ting, faktisk fordi du ikke vil ha et falskt PHP-skript for å få ned serveren din ved å hogge alt minnet. Men noen ganger vil du ha et PHP-skript som vanligvis overskrider 8 MB grensen ( si, for import eller opplasting ). For å løse feilmeldingen "Feil feil: Tillatt minnestørrelse på 8388608 bytes utmattet ...", legg inn denne linjen med kode i skriptet ditt øverst:

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

Dette vil angi minnegrensen til 16 MB, i stedet for 8 MB. Du kan, og bør, flappe med dette nummeret slik at det er så lavt som mulig uten å gjenta feilmeldingen. Dette vil bare endre minnegrensen for den aktuelle PHP-filen.

Alternativt kan du endre php.ini-filen din til hukommelsesgrensen. Dette vil påvirke alle skript på serveren din. Bare åpne php.ini og finn linjen som leser "memory_limit" og endre den:

memory_limit = 16M

Jeg har lagt merke til i min egen PHP.ini-fil at min standard er mye høyere ved 128M. Så, hvis jeg noen gang skulle motta denne feilmeldingen, ville den lese: "Fatal error: Tillatt minnestørrelse på 134217728 bytes utmattet ..." og åpenbart være et mye større problem. Men det har samme løsning som "Feil feil: Tillatt minnestørrelse på 8388608 byte utmattet ..." eller "Fatal feil: Tillatt minnestørrelse på 16777216 bytes utmattet ..." eller hva som helst. Tilsynelatende var memory_limit-standarden opped fra 8M til 16M i PHP 5.2.0 og er nå 128M for PHP 5.3.0, som ville forklare hvorfor du kanskje ikke får denne feilmeldingen i det hele tatt.

Du kan også deaktivere minnegrensen ved å sette memory_limit til -1 i PHP.ini.

memory_limit = -1

Dette er vanligvis ikke en god ide, men av åpenbare grunner.

Merk: Du kan også bruke linjen memory_limit på siden .htaccess.

Nå, husk, dette er bare en løsning. Egentlig, PHP-skriptet ditt bør ikke overstige 8 MB, med mindre du laster opp filer eller gjør noe annet som åpenbart tar opp mye minnebruk. Det du virkelig bør gjøre, prøver å finne ut hvorfor skriptet ditt bruker så mye minne og forsøker å fikse det. En måte å finne ut hvor mye minne PHP-skriptet ditt bruker er å bruke memory_get_usage () PHP-funksjonen. Bare ekko det når som helst i skriptet ditt for å finne ut hvor minnesbruken din spiking:

ekko memory_get_usage ();

Hvis du får denne feilmeldingen i Drupal eller Joomla, er den sannsynlige skyldige en ny modul eller pakke. For eksempel, i Drupal, laster admin / modul siden hver modul i Drupal-installasjonen, som kan bli hårete hvis en tilpasset modul er buggy, korrupte eller hacked. Prøv å deaktivere moduler en etter en for å identifisere som bringer festen ned. Noen hostingleverandører vil også ignorere forsøkene dine på å modifisere minnegrensene for PHP-koden din, slik at du kanskje trenger å kontakte din hosting-støtte for å hjelpe deg. Jeg har funnet noen ganger jeg må redigere php.ini-filen og noen ganger sette koden i .htaccess-filen. Uansett, forhåpentligvis er denne informasjonen nok til å få deg på vei!