Så här löser du PHP Dödligt fel: Tillåtet minnesstorlek på 8388608 byte utmattad

En av de vanligaste och frustrerande fel som PHP-kodare stöter på: "Felaktigt fel: Tillåtet minnesstorlek på 8388608 byte uttömda ..." följt av något som "(försökt att fördela XXXX bytes) i /home/www/file.module on line 12. "Detta felaktiga PHP-fel uppstår eftersom PHP som standard har en begränsningsminne på 8 MB för ett visst skript. Det här är en bra sak, faktiskt, för att du inte vill ha ett skumligt PHP-skript för att ta ner din server genom att krossa hela minnet. Men ibland kommer du att ha ett PHP-skript som normalt överskrider gränsen på 8 MB ( t.ex. för import eller uppladdning ). För att lösa problemet "Felaktigt fel: Tillåten minnesstorlek på 8388608 bytes utmattad ...", lägg bara in den här koden i ditt skript längst upp:

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

Detta ställer in minnesgränsen till 16 MB, i stället för 8 MB. Du kan och bör fina med det här numret så att det är så lågt som möjligt utan att upprepa det felmeddelandet. Detta ändrar bara minnesgränsen för den specifika PHP-filen.

Alternativt kan du ändra din php.ini-fil för att öka minnesgränsen. Detta påverkar alla skript på din server. Öppna bara php.ini och hitta raden som läser "memory_limit" och ändra den:

memory_limit = 16M

Jag har märkt i min egen PHP.ini-fil att min standard är mycket högre vid 128M. Så om jag någonsin skulle få det här felmeddelandet skulle det läsa: "Felaktigt fel: Tillåtet minnesstorlek på 134217728 bytes utmattad ..." och uppenbarligen ett mycket större problem. Men det har samma lösning som "Fatal error: Tillåtet minnesstorlek på 8388608 bytes utmattad ..." eller "Fatal error: Tillåtet minnesstorlek på 16777216 bytes exhausted ..." eller vad som helst. Uppenbarligen var default_limit-standarden upped från 8M till 16M i PHP 5.2.0 och är nu 128M för PHP 5.3.0, vilket skulle förklara varför du kanske inte får detta felmeddelande alls.

Du kan även inaktivera minnesgränsen genom att ange memory_limit till -1 i PHP.ini.

memory_limit = -1

Det är dock vanligtvis inte en bra idé, av uppenbara skäl.

Obs! Du kan också använda linjen memory_limit på din .htaccess-sida.

Kom nu ihåg, det här är bara en lösning. Egentligen bör ditt PHP-skript inte överstiga 8 MB, om inte dina uppladdningsfiler eller gör något annat som uppenbarligen tar upp mycket minneanvändning. Vad du verkligen ska göra försöker lista ut varför ditt skript använder så mycket minne och försöker fixa det. Ett sätt att räkna ut hur mycket minne ditt PHP-skript använder är att använda memory_get_usage () PHP-funktionen. Hoppa enkelt på det när som helst i ditt skript för att ta reda på var din minnesanvändning spikar:

echo memory_get_usage ();

Om du får detta felmeddelande i Drupal eller Joomla är den troliga skyldige en ny modul eller ett paket. Till exempel i Drupal laddar admin / modulsidan varje modul i din Drupal-installation, vilket kan bli hårigt om en anpassad modul är buggy, korrupt eller hackad. Försök att inaktivera moduler en efter en för att identifiera vilka som leder festen ner. Dessutom kommer vissa webbhotell att ignorera dina försök att ändra minnesgränserna för din PHP-kod så att du kanske behöver kontakta din hosting support för att hjälpa dig. Jag har hittat ibland måste jag redigera php.ini-filen och ibland sätta koden i .htaccess-filen. Hur som helst, förhoppningsvis är den här informationen tillräckligt för att få dig på väg!