Letztens rief mich ein Kollege aus der Nachbarschaft an und bat mich um Rat bei einem Problem. Er hat einen WordPress-Blog. Sein Hostinganbieter ist T-Online mit dem Produkt T-Online Homepage.


Automatisches Plugin-Update ging schief

Er wollte einfach nur ein automatisches Update eines seiner installierten WordPress-Plugins durchführen. Es handelte sich hier um das WordPress Plugin NextGEN Gallery. Dieses Plugin war in der Version 1.5.4 installiert und sollte auf die neue Version  1.6.2 Upgedatet werden.

Soweit ging auch alles gut. Die automatische Update-Routine von WordPress deaktivierte das Plugin, lud die neue Version herunter,  installierte es neu und wollte NextGEN Gallery 1.6.2 dann wieder aktivieren.

Genau diese Aktivierung ging dann schief. Es erschien nur die Fehlermeldung:

Das Plugin kann nicht aktiviert werden, da es einen fatalen Fehler erzeugt.


Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 23040 bytes) in /home/www/wp-content/plugins/nextgen-gallery/lib/ngg-db.php on line 566

Ich schaute mir das Ganze an und mir war auch natürlich ;) sofort klar, was das Problem ist.


Das Problem – zu wenig Speicher

Es gibt in PHP eine konfigurierbare Obergrenze (Limit) des maximal erlaubten Speicherplatzverbrauchs von Arbeitsspeicher eines PHP-Scripts. Das ganze verhindert, dass etwaige zu speicherhungrige Anwendungen, sei es nun gewollt oder aus schlechter Programmierung heraus, zu viel Speicher verbrauchen.

Diese Speichergrenze lässt sich bei PHP mit dem Wert „memory_limit“ einstellen. Bei vielen Hostern, welche nur ein Basispaket mit installiertem PHP und Apache anbieten ist der Wert mit z.B. „32M“ (32 Megabyte) recht niedrig eingestellt.

Hat man nun auf seinem WordPress zu viele Plugins installiert, welche sich jeweils eine gewisse Menge an Arbeitsspeicher reservieren, oder es sind Plugins installiert, welche sehr Speicherhungrig sind, dann kann der benötigte Speicher schnell diesen Wert übersteigen. In diesem Fall kommt es dann zu einer solchen Fehlermeldung wie z.B. bei meinem Kollegen.


Der Lösungsansatz

Die Lösung war also denkbar einfach. Ich habe mir das typische PHP-Info Script (phpinfo.php) geschrieben und ins Root-Verzeichnis seiner Seite kopiert.

<?php
 echo(phpinfo  ());
?>

Aufzurufen ist das Ganze dann einfach unter www.[#deinedomain].de/phpinfo.php.

Und siehe da, als ich es aufgerufen war unter „memory_limit“ der Wet „32M“ eingetragen. Bingo dachte ich, ab in die php.ini und einfach den Wert ändern. Aber das stellte sich bei dem Paket T-Online Homepage gar nicht so einfach da.

Natürlich existierte keine php.ini im Root-Verzeichnis. Aber das ist fast immer so. Dann wird einfach die entsprechende Default php.ini der PHP-Installation genommen. Diese haben die Hosting-Anbieter meist Sicherheitstechnisch und auf Grund eigener Vorgaben angepasst und damit auf Ihr System optimiert.

T-Online selbst schreibt aber dazu

Eigene php.ini-Dateien
Sie haben die Möglichkeit, alle PHP-Einstellungen selbst zu definieren. Legen Sie im Stammverzeichnis Ihrer Homepage eine Datei mit dem Namen “php.ini” an.

Allerdings wollte ich ja schon die Default-Ini nutzen und nur diesen einen Wert ändern. Ich hatte jetzt nicht vor eine eigene php.ini zu erstellen. Mein Hosting-Anbieter www.goneo.de bietet dafür eine Möglichkeit genau diese Goneo-Default php.ini-Datei ins eigene Web-Root zu kopieren. Dort kann sie dann nach Belieben geändert werden.

Bei T-Online habe ich so etwas nicht gefunden.


Die Lösung

Also habe ich mir kurzerhand selbst ein Script geschrieben. Dafür hab ich mir mittels der oben schon erwähnten phpinfo.php den Pfad der Default-Datei  geholt.

Dieser steht oben in der Info unter dem Punkt „Configuration File (php.ini) Path“. Dort stand „/etc/php4/php.ini“.

Den Pfad zum Web-Root konnte ich in der Info unter der Sektion „Environment“ und dort unter „SCRIPT_FILENAME“ finden. Das ist genau der Pfad zu dem aufgerufenen Script. Da wir dieses ins Web-Root gepackt haben ist es genau das was wir brauchen. Dort stand „/home/www/phpinfo.php“.

Jetzt hatte ich alles und das Web-Root war unter „/home/www/“ zu finden. Schnell noch das Copy-Script (CopyPhpIni.php) geschrieben …

<?php
copy("/etc/php4/php.ini","/home/www/php.ini");
?>

… und dann konnte es auch schon ausgeführt werden –  www.[#deinedomain].de/CopyPhpIni.php. Und siehe da, es lag die T-Online Default php.ini im Root-Verzeichnis des Webs. Jetzt musste ich in unserem Fall nur noch den Wert „memory_limit“ in der Sektion „[PHP]“ der php.ini-Datei von „32M“ auf „64M“ ändern.

Danach ließ sich das Plugin wieder aktivieren, da ja nun 64 Megabyte den PHP-Scripten zur Verfügung standen und das in diesem Fall anscheinend ausreichte.


P.S.

Ich habe auch schon gelesen, dass es funktionieren soll, wenn man (als WordPress-Nutzer) in der wp-config.php von WordPress einer der beiden folgenden Einträge vornimmt.

@ini_set("memory_limit",'64M')

oder

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

Bei dem Problem mit T-Online hat das allerdings nichts gebracht. Die Änderungen hatten keinerlei Auswirkungen auf die PHP-Einstellungen und somit auch nicht auf den maximal erlaubten Speicherplatzverbrauchs im Arbeitsspeicher.

Einzig mein Trick mit der kopierten php.ini-Datei hat hier funktioniert.

Ähnliche Artikel: