PHP: Memory Limit erhöhen

Wer schon mal solch eine Fehlermeldung bekommen hat und gern wissen möchte wie man das Problem behebt, sollte sich diesen Beitrag genau durchlesen.

Fatal error: Allowed memory size of X bytes exhausted (tried to allocate X bytes) in /var/www/index.php on line 123

Die Fehlermeldung bedeutend dass PHP versucht mehr Arbeitsspeicher zu benutzten als es laut Konfiguration darf. Ich stelle im folgenden Artikel 3 Wege vor wie man dieses Limit erhöhen kann.

1. Mit der php.ini

Diese Datei ist die Hauptkonfigurationsdatei von PHP, sie liegt meist in /etc/php/php.ini, /etc/php4/php.ini, /etc/php4/php.ini und/oder auch /etc/php/apache2/php.ini
Um diese Datei zu ändern braucht man root Rechte, wenn Sie die nicht haben oder bekommen können Sie diese Methode gleich abschreiben.
Standardmäßig sollte drin stehen:

memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)

Um jetzt einen neuen Wert anzugeben ändern wir diesen Wert einfach wie gewünscht ab:

;memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
memory_limit = 32M

und nach einem Webserver neustart sollte der neue Wert übernommen werden:

/etc/init.d/apache2 restart

Achtung!
Diese Methode ändert das Memory_Limit Global, also für jeden PHP-Prozess vom geänderten Typ (cli, cgi, mod_php) auf dem System. Wenn das nicht gewünscht ist ist eine der folgenden Methoden wohl besser geeignet.

2. Mit einer .htaccess / direkt im VHost

Das Limit lässt sich bei Verwendung des Apache2 Webserver direkt im Vhost oder der .htaccess für jedes Verzeichnis einzeln ändern.
Dazu ist folgende Anweisung nötig:

php_value memory_limit 32M

Hinweis:
Es kann sein dass Ihr Hoster diese Anweisung deaktiviert hat, in dem Fall fragen Sie diesen um eine Änderung.

3. Direkt mit PHP

Wenn die PHP-Funktion ini_set() nicht deaktiviert wurde, können Sie auch direkt im betreffenden PHP-Script den Wert ändern. Dies geht wie folgt:

ini_set('memory_limit', '32M');

Änderungen werden sofort übernommen.
Diese Methode bietet die beste Kontrolle über den Resourcenverbrauch von PHP und ist daher zu empfehlen.

Hinweis:
damit das Memory-Limit von PHP funktioniert muss PHP mit --enable-memory-limit compiliert worden sein, was aber bei allen gängigen Paketformaten der Fall sein sollte.

Related posts:


 
 
 

14 Kommentare zu “PHP: Memory Limit erhöhen”

  1. Nextgen Gallery: Keine Thumbs trotz 128MB PHP Memory | Das Leben des "Samuel´s" 23. Februar 2009 um 23:32

    [...] man das PHP Memory Limit erhöhen. Welche Möglichkeiten funktionieren, ist abhängig vom Provider, hier klick zum nachlesen. In meinem Fall klappt die 2. Möglichkeit über die .htaccess. Sie sollte mit folgendem erweitert [...]

  2. Hendrik 27. März 2009 um 16:20

    Vielen Dank für das Tutorial! Beim Provider Netbuild funktioniert nur die Variante php ini_set(), man kann aber den Support bitten, das Limit in der php.ini hochzudrehen.

  3. Irrtümer über den Speicherverbrauch von WordPress | Kim Huebel - Online 16. Juni 2009 um 15:47

    [...] liegt. Wie man diesen Wert evtl. abändern kann, hat Julius Beckmann in seinem Beitrag “PHP: Memory Limit erhöhen” [...]

  4. Thumb-Errors bei NextGen Gallery mit 1&1 | blogoperium.de 25. Juli 2009 um 13:40

    [...] Memory Limit” bekommt. Auch hier gibt es eine Lösung, schaut Euch das einfach mal bei Julius Beckmann [...]

  5. Mufflon 11. August 2009 um 09:47

    Herzlichen Dank für dieses leicht verständliche Tut. So konnte ich nun endlich mein Problem lokalisieren und beheben. Funktioniert wunderbar.

  6. Fatal Error: allowed memory size of bytes exhausted… | unter.Strom.bz 12. Dezember 2009 um 23:29

    [...] memory_limit erhöhen: entweder in der php.ini oder direkt in PHP mit dem [...]

  7. How to configure the memory_limit for Wordpress? at avp::ptr weblog 4. Juni 2011 um 21:18

    [...] memory limit of 32MB which can be to less if you run the automatic updates. As discussed here and here there are different ways to change the configuration. Though, for us it only works when we change [...]

  8. Chris Peto 15. August 2011 um 23:29

    No matter, what I set the limit to even -w, I get a message:
    Fatal error: Out of memory (allocated 6029312) (tried to allocate 1109318761 bytes) in H:\ApacheFlix\htdocs\CreateZipFile.inc.php on line 222

  9. Chris Peto 15. August 2011 um 23:29

    meant even: -1

  10. Julius 15. August 2011 um 23:31

    You also need to reaload the server. Or maybe you are not allowed to use ini_set();

  11. [MySQL] Gr 13. Februar 2012 um 09:28

    [...] [...]

  12. Bine485 28. Juli 2012 um 15:49

    Hi, ich hatte keine Befugnisse, die Rechte der .htaccess zu ändern - durfte somit auch nicht reinschreiben - habe Trick angewand : die Datei runtergeladen (anzeigen versteckter Dateien nötig) und dort umgeschrieben mit

    php_value memory_limit 128M

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    # END WordPress

    und dann die alte .htaccess auf dem Server im wp-blog umbenannt und die neue hochgeladen ...

    Man muß sich nur zu helfen wissen.

    Aber leider zeigte mir das auch keine Thumbnails und so mußte der Provider den Memory-limit hochsetzen (war schon 64 MB - da ich aber viel mit mache, jetzt 128 MB), damit NextGen-Gallery die Thumbnails zeigte.

    LG Bine

  13. Fatal error: Allowed memory size of 104857600 bytes exhausted - codesprint GmbH 20. Januar 2013 um 12:36

    [...] man vollen Zugriff auf dem Server hat kann man das Memory Limit in der php.ini verändern. Speziell bei Shared Webspace oder Managed Servern hat man allerdings meistens keinen Zugriff auf [...]

  14. Arno Heider 26. September 2014 um 14:04

    Bei meinem Hoster Webspace4All muss man nach dem Kundenlogin
    den Apachen über Menüs und Formulare administrieren. Nur so lässt sich das PHP Memory Limit erhöhen: http://www.arno-heider.de/?p=941