Inställningen memory_limit i PHP anger maximalt tillåten minnesanvändning för ett PHP-skript.
Om ett skript försöker allokera mer minne än detta kommer ett felmeddelande att visas och skriptet kommer att avbrytas. Standardvärdet är 128MB, men det kan ändras i PHP-konfigurationsfilen php.ini.
Webbhotell som erbjuder delad servermiljö med klassiska webbhotellskonton har ofta stor variation hur mycket minne dina PHP-skript kan använda. Här kan det finnas en god anledning att jämföra webbhotellen så du hittar något som passar dig.
Ändra memory_limit för PHP
Det finns flera sätt att ändra memory_limit för PHP, några exempel är:
- Ändra inställningen i PHP-konfigurationsfilen, php.ini. Du kan söka efter memory_limit och ändra värdet till det du önskar, till exempel memory_limit = 256M.
- Använd ini_set()-funktionen i PHP-skriptet. Du kan lägga till följande rad i början av ditt skript för att ändra minnesgränsen till 256MB: ini_set(’memory_limit’, ’256M’);
- Använd .htaccess-filen om du kör PHP i en Apache-miljö. Lägg till följande rad i .htaccess-filen för att ändra minnesgränsen till 256MB: php_value memory_limit 256M
- Använd en server-konfigurationsfil som php-fpm.conf om du kör PHP med FPM (FastCGI Process Manager) . Lägg till följande rad i konfigurationsfilen för att ändra minnesgränsen till 256MB: pm.memory_limit = 256M
Observera att ändringar i PHP-konfigurationen kan kräva att servern startas om för att ta effekt. Om du har ett delat webbhotellskonto är det inte säkert att du fritt kan ändra detta själv utan måste antagligen uppgradera till ett webbhotellskonto med mer resurser.
Så används minnet av PHP
PHP använder minne för att hantera olika aspekter av skriptet, till exempel att lagra variabler och data i minnet under exekvering av skriptet. Det kan också använda minne för att hålla öppna filhanterare, anslutningar till databaser eller andra externa resurser.
En vanlig orsak till att PHP behöver använda mycket arbetsminne är att den utför tyngre beräkningar som t.ex. bildhantering. Mer avancerad bildhantering är vanlig i CMS för bloggar och e-butiker. I kombination med flera tillägg och andra förberedelser är det inte ovanligt att det behövs mer än 256 MB minne och ibland även mer än 512 MB.
Därför är minnesbegränsning bra
En minnesbegränsning för PHP är väldigt bra och viktigt så inte ett enskilt PHP-skript kan allokera för mycket av serverns resurser och orsaka problem.
Det är även viktigt att anpassa mängden efter serverns resurser och vad som i praktiken faktiskt behövs av PHP. Det är ingen bra idé att tillåta mycket mer minnesanvändning än vad som faktiskt behövs vilket blir en viktig faktor när man konfigurerar en webbserver.
Om du t.ex. har en webbserver med 16 GB primärminne där redan 4 GB används av operativsystemet och övrig mjukvara på servern. Med 12 GB kvarvarande krävs det endast att 6 samtidiga PHP-skript som använder upp 2048 MB minne för att serverns resurser ska ta helt slut.
Oavsett om du befinner dig på en delad server eller har en egen dedikerad server så är rätt inställningar här viktigt för att inte få problem i driften av servern.
Resurskrävande skript kan innehålla fel
PHP-skript som kräver orimligt mycket minne kan vara dåligt programmerade vilket orsakar att taket för mängden minne slås i.
Ett vanligt fel kan vara att man under utvecklingsfasen slarvar med sin hantering av SQL-förfrågningar och hämtar mer data än vad som egentligen behövs. När skriptet sen används i praktiken och mer data hanteras än under testmiljön så slås taket i samtidigt som exekveringarna som faktiskt lyckas använder onödigt mycket resurser.
Det är t.ex. väldigt ovanligt att PHP-skript behöver mer än 512 MB minne och definitivt mer sällan att 1024 MB behövs. Det finns alltid undantag och här gäller det att fundera över vad som ska göras och om det är rimligt att den uppgiften använder så mycket minne.
En ökning av minnesanvändning kan också vara ett tecken på ett problem i skriptet, såsom en minnesläcka eller en oändlig loop. Den typen av problem gör det viktigt att begränsa minnet som varje PHP-skript får lov att använda.