Das PHP Memory Limit in WordPress – eine kurze Betrachtung

Veröffentlicht am:

5 Kommentare

Ein System wie WordPress bläht sich mit jedem zusätzlich installieren Plugin immer weiter auf. Mittlerweile erledigt WordPress mit Hilfe diverser Plugins so viele unterschiedliche Aufgaben, dass Fehlermeldungen wie

Fatal Error: Allowed memory size of xxxxxx bytes exhausted

nicht ungewöhnlich sind. Hier ist es der Arbeitsspeicher, der mit einem fatalen Fehler aussteigt.
Vieles beim Webhosting läuft auch heute noch über die Masse. Bezahlbares Webhosting hat oft einen Pferdefuss: die billigen Tarife bei IONOS, Strato und Co können nie das leisten, was sich viele Anwender erhoffen. Die Kunden haben oft keine Ahnung, was sie eigentlich an Leistung und Ausstattung bräuchten und welche Plugins oder Themes ressourcensparend sind und welche nicht.
Und dann gibt es die vielen Tipps, wie man den Arbeitsspeicher von PHP erhöhen kann.

Es gibt mindestens 3 Möglichkeiten, um mehr Speicher für PHP zu reservieren und diese Fehlermeldungen wie oben zu vermeiden. Bei gewöhnlichem shared Webhosting muss aber nichts davon funktionieren. Das ist vom Anbieter mit seiner Philosophie abhängig. Da hilft oft nur ein klärendes Gespräch mit dem Provider oder ein Anbieterwechsel.

Den PHP Memory erhöhen

Die php.ini

Bei shared Hosting Paketen hat man eher selten die Chance, etwas in der php.ini Konfigurationsdatei zu ändern. Wenn man keinen Zugriff darauf hat, kann man zumindest versuchen, eine eigene Version zu erstellen und die in das Root-Verzeichnis seiner Webseite zu schieben. Dort schreibe man folgende Deklaration hinein:

memory_limit = 256M;

Dies setzt den für PHP Skripte verfügbaren Speicher auf 256 Megabyte (das „M“ in der Notation nicht vergessen) und zwar rekursiv für das Verzeichnis, in dem die php.ini liegt.

Die .htaccess

Gängigste Variante ist die Speicheraufstockung durch die .htaccess Datei, weil das gleich den gesamten PHP Speicher für alle Skripte (also nicht nur WordPress) beeinflusst. Das ist aber auch eine wahre Wundertüte, diese .htaccess:

php_value memory_limit 256M;

Dies setzt den für PHP Skripte verfügbaren Speicher wiederum auf 256 Megabyte (das „M“ in der Notation nicht vergessen) und zwar rekursiv für das Verzeichnis, in dem die .htaccess liegt.

Die wp-config.php

Kommt man weder an die .htaccess noch an die php.ini, so kann man sein Glück noch über die WordPress Konfigurationsdatei wp-config.php versuchen:

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

Wieder wird der für PHP verfügbare Speicher auf 256 Megabyte gesetzt, allerdings nur für WordPress eigene PHP Skripte.

Die meisten Tutorien hören an diesem Punkt auf. Ich habe allerdings den Verdacht, dass gerade die letzte Deklaration die entscheidende ist. Warum? Ich hatte in den letzten Tagen ein Problem mit dem Speicherüberlauf von WordPress, so dass ich ergründen musste, weshalb mir WordPress nach dem Veröffentlichen oder Aktualisieren eines Beitrages eine Fehlermeldung ausgab. Trotz eines Memory Wertes von 256 Megabyte!

Den Speicherbedarf und -verbrauch mit Plugins bestimmen

Viele Leute installieren sich dann das WP Memory Usage Plugin, was an sich auch eine gute Sache ist.
Ich habe aber ein Multisite fähiges Memory Plugin gesucht und bin bei diesem hier gelandet: WP Overview (lite) MS. Es existieren für diese Zwecke sicherlich noch andere gute Plugins, aber das macht erst einmal genau das, was ich haben will.
Es listet nämlich zum allgemeinen Server PHP Memory noch einen weiteren Wert auf: WP Memory.

WP Overview (lite) MS
das Plugin listet mehrere Memory Werte auf

Dieser Wert stand bei mir auf 64M. Diese 64 Megabyte hatte ich aber nirgendwo deklariert, im Gegenteil – ich hatte ja alles per .htaccess auf 256 Megabyte eingestellt (Der Screenshot wurde später mit anderen Werten gemacht)

Des Rätsels Lösung

WordPress bastelt sich den PHP Memory Wert folgendermaßen zusammen. In wp-settings.php werden durch den Funktionsaufruf mng_17_initial_constants(); Standardwerte für bestimmte Konstanten gesetzt. Die Funktion selbst findet man in wp-includes/default-constants.php, wo bei mir ein PHP Memory Limit von 64M voreingestellt wird:

function mng_17_initial_constants() {
	global $blog_id;

	// set memory limits
	if ( !defined('WP_MEMORY_LIMIT') ) {
		if( is_multisite() ) {
			define('WP_MEMORY_LIMIT', '64M');
		} else {
			define('WP_MEMORY_LIMIT', '40M');
		}
	}

	if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
		define( 'WP_MAX_MEMORY_LIMIT', '256M' );
	}

Weiter unten im Code erkennt man dann auch, dass dieser Wert solange verwendet wird, bis er von der entsprechenden Deklaration in wp-config.php überschrieben wird.
Aber liebe WordPress Entwickler … 64 Megabyte für eine Multisite und 40 Megabyte für eine Einzelinstallation? Wirklich?
Das frisst ja schon allein die deutsche Sprachversion auf :o)

Kann es nun sein, dass WordPress die Angaben in der .htaccess oder auch php.ini ignoriert und letztlich nur den Wert in der wp-config.php berücksichtigt? Als ich nämlich in der wp-config.php den PHP Speicher neu gesetzt habe, änderte sich auch der Wert in der WP Overview (lite) MS Anzeige. Auch die Probleme mit dem Speicherüberlauf verschwanden (teilweise).
Das heisst für mich, dass Einträge in der .htaccess und/oder php.ini schön und gut sind, aber ausschlaggebend die

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

Angabe in der wp-config.php ist?

Wenn ich mit dieser Vermutung falsch liege, so möge man mich bitte korrigieren. Am besten per Kommentar, damit es alle lesen können.

Bitte beachten Sie: die Informationen in diesem Artikel wurden zum Zeitpunkt seiner Erstellung nach bestem Wissen und Gewissen zusammengetragen, aufbereit und niedergeschrieben.
Diese können heute, abhängig vom Zeitpunkt der Veröffentlichung und des behandelnden Themas, überholt und ungültig sein.
Es obliegt den Lesern, diese Inhalte mit dem aktuellen Wissensstand abzugleichen.

Artikel online seit: 10 Jahren
Letzte Änderung: 23.03.2023

5 Gedanken zu „Das PHP Memory Limit in WordPress – eine kurze Betrachtung“

  1. Hallo Lars,

    genau diese Info habe ich gesucht! Trotz Angabe von 2048M in der wp_config.php zeigte WP nur 512 MB an. Nach der Änderung in der default-constants.php habe ich nun die geforderten 2048 MB zur Verfügung, erogo wird (bei mir) die Angabe in der config.php nicht berücksichtigt.

    Gruß, Stan.

    • Das ist eine Änderung, die ich nicht empfehlen würde. Nach einem WP Update ist die Angabe in der default-constants.php wieder überschrieben.
      Wobei, welcher Hoster unterstützt denn ein Memory Limit von 2 GigaByte?

  2. Ok aber anders geht es ja nicht, der Wert in der config.php sowie in der php.ini wird ja nicht berücksichtigt. Hast du sonst noch eine idee?

    Ich betreibe meinen eigenen Server, da habe ich insgesamt 8GB zur Verfügung.

    • Berücksichtig wird letztlich der Wert aus der wp-config.php.
      Ich würde das also koppeln: einmal per .htaccess und zusätzlich per config-Datei.
      Das sollte eigentlich ausreichen und man muss keine Core-Files verändern.

  3. Vielen Dank für den wirklich hilfreichen Artikel.
    Ich habe auch schon nach diesem Fehler gesucht. Denn obwohl ich sowohl in der php.ini als auch in der .htaccess das Limit auf 256M gesetzt habe, wurde dieser immer ignoriert.
    Nachdem ich diese Codezeile in die config.php eingefügt habe, wird es endlich korrekt angezeigt, und die Fehlermeldungen von WPML sind verschwunden.

Kommentare sind geschlossen.