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

    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 gränsvärde för minnesbegränsning 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 får du ett PHP-skript som normalt överstiger 8 MB-gränsen (säg, för att importera eller ladda upp). För att lösa problemet "Fatal error: Allowed memory size of 8388608 bytes exhausted ...", lägg helt enkelt in den här koden i ditt skript längst upp:

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

    Detta ställer in din minnesgräns till 16 MB, snarare än 8 MB. Du kan, och borde, 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 utmattad ..." 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 det här felmeddelandet alls.

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

    memory_limit = -1

    Detta ä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 vara över 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 funktionen memory_get_usage () PHP. E-posta det bara 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 laddas admin / modulen sidan 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!