Wie PHP zu lösen ist Schwerwiegender Fehler: Erlaubte Speichergröße von 8388608 Bytes erschöpft

Einer der häufigsten und frustrierendsten Fehler von PHP-Codierern lautet: "Fataler Fehler: Erlaubte Speichergröße von 8388608 Byte erschöpft ..." gefolgt von etwas wie "(versuchte XXXX Bytes zuzuweisen) in /home/www/file.module online 12. "Dieser fatale PHP-Fehler tritt auf, weil PHP standardmäßig ein Speicherbenutzungslimit von 8 MB für jedes Skript hat. Das ist in der Tat eine gute Sache, weil Sie nicht wollen, dass ein Rogue-PHP-Skript Ihren Server herunterbringt, indem Sie den gesamten Speicher in Beschlag nehmen. Aber gelegentlich haben Sie ein PHP-Skript, das normalerweise die Grenze von 8 MB überschreitet ( zum Beispiel zum Importieren oder Hochladen ). Zur Umgehung der Fehlermeldung "Fataler Fehler: Erlaubte Speichergröße von 8388608 Bytes erschöpft ..." fügen Sie diese Codezeile einfach oben in Ihr Skript ein:

ini_set ("memory_limit", " 16M ");

Dadurch wird das Speicherlimit auf 16 MB und nicht auf 8 MB festgelegt. Sie können und sollten an dieser Nummer fummeln, so dass sie so niedrig wie möglich ist, ohne diese Fehlermeldung zu wiederholen. Dies ändert nur das Speicherlimit für diese bestimmte PHP-Datei.

Alternativ können Sie Ihre php.ini-Datei ändern, um das Speicherlimit zu erhöhen. Dies betrifft alle Skripte auf Ihrem Server. Öffne einfach php.ini und finde die Zeile "memory_limit" und ändere sie:

memory_limit = 16M

Ich habe in meiner eigenen PHP.ini-Datei bemerkt, dass mein Standardwert bei 128M viel höher ist. Also, wenn ich diese Fehlermeldung jemals erhalten würde, würde es lesen: "Fataler Fehler: Erlaubte Speichergröße von 134217728 Bytes erschöpft ..." und offensichtlich ein viel größeres Problem sein. Aber es hat die gleiche Problemumgehung wie "Schwerwiegender Fehler: Erlaubte Speichergröße von 8388608 Bytes erschöpft ..." oder "Schwerwiegender Fehler: Erlaubte Speichergröße von 16777216 Bytes erschöpft ..." oder was auch immer. Anscheinend wurde der Standardwert memory_limit in PHP 5.2.0 von 8M auf 16M erhöht und ist jetzt 128M für PHP 5.3.0, was erklären würde, warum Sie diese Fehlermeldung überhaupt nicht erhalten.

Sie können das Speicherlimit auch deaktivieren, indem Sie memory_limit in der PHP.ini auf -1 setzen.

memory_limit = -1

Dies ist jedoch aus offensichtlichen Gründen normalerweise keine gute Idee.

Hinweis: Sie können auch die Zeile memory_limit auf Ihrer .htaccess-Seite verwenden.

Nun, denken Sie daran, dies ist nur ein Workaround. Wirklich, Ihr PHP-Skript sollte nicht größer als 8 MB sein, es sei denn, Sie laden Dateien hoch oder machen etwas anderes, das offensichtlich viel Speicher belegt. Was Sie wirklich tun sollten, ist herauszufinden, warum Ihr Skript so viel Speicher verbraucht und versucht, es zu beheben. Eine Möglichkeit, herauszufinden, wie viel Speicher Ihr PHP-Skript verwendet, ist die Verwendung der PHP-Funktion memory_get_usage (). Echo einfach an einer beliebigen Stelle in deinem Skript, um herauszufinden, wo deine Speicherbelegung spitzt:

echo memory_get_usage ();

Wenn Sie diese Fehlermeldung in Drupal oder Joomla erhalten, ist der wahrscheinlichste Täter ein neues Modul oder Paket. Zum Beispiel lädt in Drupal die Seite admin / modules jedes Modul in Ihrer Drupal-Installation, das haarig werden kann, wenn ein benutzerdefiniertes Modul fehlerhaft, beschädigt oder gehackt ist. Versuchen Sie, einzelne Module nacheinander zu deaktivieren, um festzustellen, was die Party herunterbringt. Einige Hosting-Anbieter werden Ihre Versuche, die Speicherbegrenzungen für Ihren PHP-Code zu ändern, ignorieren, so dass Sie möglicherweise Ihren Hosting-Support kontaktieren müssen, um Sie zu unterstützen. Ich habe manchmal festgestellt, dass ich die php.ini-Datei bearbeiten muss und manchmal den Code in die .htaccess-Datei einfügen muss. Wie auch immer, hoffentlich reicht diese Info hier, um Sie auf den Weg zu bringen!