PHP Memory Limit - was ist das und wie kann ich es ändern

Autor:   |  28.12.2018


php-memory-limit.png PHP ist eine Programmiersprache, die optimale Voraussetzungen für Webanwendungen bietet. Sie wird von nahezu allen Content Management Systemen (CMS) wie TYPO3, WordPress, Joomla oder Contao und von Shop-Systemen wie Shopware und Magento verwendet. Wesentliche Einstellungen werden in einer zentralen Konfigurationsdateie php.ini gespeichert, die sich häufig über das CMS oder auch direkt über einen Texteditor bearbeiten lässt. Ein wichtiger Parameter dieser Datei ist das PHP Memory Limit.

Wie funktioniert PHP?

PHP gehört zu den sogenannten Skriptsprachen. Das bedeutet, dass Programme als leicht verständlicher Code geschrieben werden. Anschließend übernimmt ein Interpreter die Verarbeitung, in dem er ein Programm Zeile für Zeile liest und die Anweisungen entsprechend seiner php.ini ausführt. CMS wie Magento, WordPress oder Joomla bestehen aus einer Vielzahl von Skripten, die jeweils eine bestimmte Aufgabe übernehmen. Sie werden in einen bestimmten Bereich des Arbeitsspeichers geladen, der durch das PHP Memory Limit begrenzt wird und sich individuell erhöhen lässt. Die PHP Skripte dienen dazu, aus verschiedenen Quellen wie einer Datenbank, externen Dateien und speziellen Stilvorlagen - den css-Dateien - eine Webseite im HTML Format zu erstellen. Diese wird durch anwenderseitige Skripte ergänzt, die in anderen Sprachen wie Java oder JavaScript geschrieben sind und zum Beispiel interaktive Bedienung wie Spiele oder animierte Menüs ermöglichen. Hier geht es zum PHP Webhosting Vergleich.

Was ist das PHP Memory Limit und welchen Zweck dient es?

Wie bereits erwähnt, reserviert PHP einen Teil des Arbeitsspeichers, um dort Skripte ablegen und ausführen zu können. Die Größe dieses Bereichs wird durch das PHP Memory Limit in der php.ini definiert. Die Limitierung durch das PHP Memory Limit schützt einen Computer davor, durch eine schlechte oder fehlerhafte Programmierung in seiner Performance beeinträchtigt zu werden. Ein einfaches Beispiel dafür wäre eine Schleife, die eine Variable anlegt und speichert, deren Namen und Wert sich bei jedem Durchgang um 1 erhöhen. Ohne ein PHP Memory Limit in der php.ini würde diese dazu führen, dass der gesamte Arbeitsspeicher im Laufe der Zeit durch diese eine Schleife belegt wird. In der Folge sinkt die Performance und unter Umständen kann sogar das Betriebssystem selbst instabil werden, da kein Speicher für dessen Daten zur Verfügung steht.

Wie hoch sollte ein PHP Memory Limit im produktiven Betrieb sein?

Bei einem Webhosting beträgt die Standardgröße des PHP Memory Limit meist zwischen 32 MB und 64 MB. Dies ist für die Basisinstallation eines CMS wie WordPress, Contao, Joomla oder TYPO3 ausreichend und erlaubt einen stabilen Betrieb. Aufwendige Plugins, große Datenbanken oder viele Erweiterungen führen dazu, dass mehr Speicher für die Skripte und deren Daten benötigt werden. In diesem Fall gibt PHP statt einer Webseite nur eine Fehlermeldung aus, die beispielsweise folgendes besagt:

Fatal error: Allowed memory size of XXXXXX bytes exhausted (tried to allocate XXXXXX bytes) in /var/www/html/skript.php

In diesem Fall ist es notwendig, das PHP Memory Limit zu erhöhen, damit dem Interpreter ausreichend temporärer Speicher für die Ausführung aller Skripte zur Verfügung steht. Empfohlene Limits für ein CMS liegen zwischen 32 MB (WordPress) und 256 MB (Shopware) - mehr als 512 MB sind nur selten notwendig und weisen häufig auf Probleme in der Programmierung hin.

Wie lässt sich das PHP Memory Limit erhöhen?

Die meisten Webhoster erlauben es ihren Kunden, das PHP Memory Limit innerhalb gewisser Grenzen erhöhen. Dafür gibt es verschiedene Wege, die nicht alle gleichzeitig von jedem Internet Service Provider angeboten werden:

  • Methode 1: Änderung in der php.ini

    Die php.ini enthält eigentlich die "globale" Konfiguration des PHP Interpreters - das bedeutet, Änderungen in der php.ini gelten prinzipiell für den gesamten Server. Allerdings erlauben einige Provider auch das Anlegen einer individuellen php.ini, in der ihre Kunden lokale Einstellungen treffen können. Die php.ini besteht zu ihrem größten Teil aus Kommentaren, die die Datei und ihre Funktionen sehr umfangreich und anschaulich dokumentieren. Sie enthält einen Abschnitt Resource Limits, in dem sich neben der maximalen Laufzeit eines Skriptes auch das PHP Memory Limit erhöhen lässt. Es wird mit dem Eintrag

    memory_limit = 64M

    festgelegt - hier sind es 64 MB. Bei einem eigenen Root Server oder VPS sind Kunden selbstverständlich frei, das PHP Memory Limit beliebig zu erhöhen. Bei einem Webspace wird der Anbieter seinen Kunden jedoch selbstverständlich in der Regel verbieten, globale Konfigurationen (die auch andere Nutzer betreffen) zu verändern.
  • Methode 2: Eine .htaccess Datei
    Neben der php.ini lässt sich das PHP Memory Limit auch in einer .htaccess Datei erhöhen. Diese liegt in dem untersten Verzeichnis von WordPress, TYPO3, Contao oder anderen CMS und beinhaltet Anweisungen, die vor dem Ausführen eines Skriptes gelesen und angewendet werden. Die entscheidende Einschränkung ist, das .htaccess lediglich von einem Apache 2 Webserver unterstützt wird. Um das PHP Memory Limit zu erhöhen, reicht das Anlegen einer Datei mit dem Namen .htaccess und dem Inhalt

    php_value memory_limit 64M
  • Methode 3 (WordPress): Definition in der config.php
    Einige CMS wie WordPress erlauben es, das PHP Memory Limit in ihrer lokalen Konfigurationsdatei zu erhöhen. Dazu muss die Datei Installation/wp-config.php (WordPress) geöffnet und folgende Neudefintion eingefügt werden

    define('WP_MEMORY_LIMIT', '64M');

Es ist zu beachten, dass jeder Webspace und jeder Internet Service Provider das maximale PHP Memory Limit seiner Kunden einschränkt, um den Speicherverbrauch zu kontrollieren. Die zulässige Höchstgrenze liegt meist je nach Anbieter zwischen 128 und 512 MB. Eine Serverüberwachung sollte beim professionellen betreiben einer Website ein Must-Have sein.

Foto: Boskampi | pixabay.com