wake-up-neo.com

Zulässige Speichergröße von X Byte erschöpft

Schwerwiegender Fehler: Die zulässige Speichergröße von 67108864 Byte ist erschöpft (es wurde versucht, 13965430 Byte zuzuweisen).

PHPInfo zeigt, dass ich ein memory_limit von 128M habe, daher bin ich verwirrt, warum der Fehler besagt, dass ich nur 64M habe. Kann phpinfo falsch berichten? Oder für PHP zwei separate php.inis verwenden?

Der Fehler wurde durch einen ini_set-Aufruf in einer der primären PHP-Dateien verursacht, die ein Kollege von mir ohne mein Wissen hinzugefügt hat.

39
Nathan

Die PHP-Konfiguration kann an mehreren Stellen festgelegt werden:

  1. mastersystem php.ini (normalerweise irgendwo in/etc)
  2. irgendwo in der Apache-Konfiguration (httpd.conf oder eine .conf-Datei pro Site über php_value)
  3. CLI & CGI können einen anderen php.ini Haben (verwenden Sie den Befehl php -i | grep memory_limit, Um die CLI-Konfiguration zu überprüfen)
  4. lokale .htaccess-Dateien (auch php_value)
  5. in-Script (über ini_set())

In der Ausgabe von PHPinfo ist der "Master" -Wert der kompilierte Standardwert, und der "Local" -Wert ist der tatsächliche Wert. Sie kann entweder unverändert von der Standardeinstellung abweichen oder an den oben genannten Stellen überschrieben werden.

Beachten Sie auch, dass PHP im Allgemeinen unterschiedliche INI-Dateien für den befehlszeilen- und den webserver-basierten Betrieb hat. Wenn Sie phpinfo() in der Befehlszeile markieren, werden andere Werte gemeldet als bei Ihnen Führen Sie es in einem webbasierten Skript aus.

36
Marc B
ini_set('memory_limit', '128M'); 

oder

php.ini  =>  memory_limit = 128M

oder

php_value memory_limit 128M
23
şarkı dinle

Ich hatte das gleiche Problem. Ich habe die Antwort gefunden:

ini_set('memory_limit', '-1');

Hinweis: Es wird eine unbegrenzte Speichernutzung des Servers benötigt.

pdate: Gehen Sie vorsichtig vor, da dies Ihr System verlangsamen kann, wenn das Skript PHP übermäßig viel Arbeitsspeicher belegt und viel Swap-Speicher benötigt Verwenden Sie diese Option, wenn Sie wissen, dass das Programm nicht viel Speicher benötigt und Sie auch nicht wissen, wie viel Speicher Sie gerade einstellen sollen.

Sie sollten den Speicher immer auf einen Wert begrenzen, der mit @ şarkı dinle Beantwortet wird.

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

Unbegrenzter Speicher ist eine schlechte Praxis. Wir sollten jedoch eine maximale Grenze festlegen, die wir aushalten können, und dann unseren Code optimieren oder RAMs hinzufügen.

15
Somnath Muluk

Der Speicher muss an mehreren Stellen konfiguriert werden.
Setzen Sie memory_limit Auf 512M:

Sudo vi /etc/php5/cgi/php.ini
Sudo vi /etc/php5/cli/php.ini
Sudo vi /etc/php5/Apache2/php.ini Or /etc/php5/fpm/php.ini

Dienst neu starten:

Sudo service service php5-fpm restart
Sudo service service nginx restart

oder

Sudo service Apache2 restart

Schließlich sollte es das Problem des memory_limit Lösen.

5
oussaka

Wenn Sie sicher sind, dass Sie Apache nach der Konfiguration von php.ini neu gestartet haben, sehen Sie sich möglicherweise die falsche php.ini-Datei an

3
bcosca
1 check current limit:
(in my os)php -i | grep limit  => memory_limit => 256M => 256M

2  locate php.ini 
php --ini =>   
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/curl.ini 
...

3 change memory_limit in php.ini
vi /etc/php.ini
memory_limit = 512M

4 restart nginx and (php-fpm if being used)
service php-fpm restart
service nginx restart
2
terwxqian

Wenn Sie durch Erhöhen des Speicherlimits den Fehler behoben haben und Ihr Code jetzt funktioniert, müssen Sie Maßnahmen ergreifen, um die Speichernutzung zu verringern. Hier sind ein paar Dinge, die Sie tun können, um es zu verringern:

Wenn Sie Dateien lesen, lesen Sie diese Zeile für Zeile, anstatt die gesamte Datei in den Speicher einzulesen. Schauen Sie sich fgets und SplFileObject :: fgets an. Aktualisieren Sie auf eine neue Version von PHP, wenn Sie PHP 5.3. PHP 5.4 und 5.5 verwenden viel weniger Speicher .

Vermeiden Sie es, große Datasets in ein Array zu laden. Verarbeiten Sie stattdessen kleinere Teilmengen des größeren Datasets und speichern Sie Ihre Daten gegebenenfalls in einer Datenbank, um die Speichernutzung zu verringern.

Probieren Sie die neueste Version oder eine kleinere Version einer Drittanbieter-Bibliothek aus (z. B. 1.9.3 gegenüber 1.8.2) und verwenden Sie die stabilere Version. Manchmal werden neuere Versionen von Bibliotheken effizienter geschrieben.

Wenn Sie eine ungewöhnliche oder instabile PHP) - Erweiterung haben, versuchen Sie, diese zu aktualisieren. Möglicherweise ist ein Speicherverlust aufgetreten.

Wenn Sie es mit großen Dateien zu tun haben und diese einfach nicht zeilenweise lesen können, versuchen Sie, die Datei in viele kleinere Dateien aufzuteilen und diese einzeln zu verarbeiten. Deaktivieren Sie PHP Erweiterungen, die Sie nicht benötigen.

Deaktivieren Sie im Problembereich Variablen, die große Datenmengen enthalten und später im Code nicht benötigt werden.

FROM: https://www.airpair.com/php/fatal-error-allowed-memory-size

1
user3806549

Dieses Problem tritt auf, weil die in php.ini festgelegte Grenze überschritten wurde, aber es gibt eine Menge Lösungen für dieses Problem, aber einfach ist, den Ordner Ihres lokalen Servers zu finden und auf diesem den php-Ordner zu finden und in diesem Ordner die php.ini-Datei zu haben, die alle Deklarationen enthält dieser Art Setups. Sie müssen nur einen finden und diesen Wert ändern. Aber in dieser Situation gibt es ein großes Problem, wenn Sie Ihre localhost-Datei ändern, aber was ist mit dem Server, wenn Sie Ihre Site auf den Server stellen möchten, führt dies erneut zum gleichen Problem, und Sie befolgen dasselbe für den Server. Aber Sie wissen auch über .htaccess-Dateien Bescheid, dies ist einer der besten und einzigen Orte, an denen Sie eine Menge Dinge tun können, ohne die Kerndateien zu ändern. Wie Sie das WWW-Routing ändern, .php oder andere Erweiterungen aus der URL entfernen oder eine hinzufügen. Ebenso können Sie hier auch die Standardwerte für php.ini wie folgt festlegen: - Zuerst müssen Sie die .htaccess-Datei in Ihrem Stammverzeichnis öffnen. Wenn Sie diese Datei nicht haben, erstellen Sie eine im Stammverzeichnis Ihrer Website und fügen Sie sie ein Code drauf -

php_value upload_max_filesize 1000M
php_value post_max_size 99500M
php_value memory_limit 500M
php_value max_execution_time 300

nach Änderungen, wenn Sie die Änderungen überprüfen möchten, führen Sie einfach den PHP-Code

<?php phpinfo(); ?> 

es zeigt Ihnen die PHP-Cofigrationen alle Details. So finden Sie Ihre Änderungen.

Hinweis: Um Unbegrenzt zu definieren, fügen Sie einfach -1 wie php_value memory_limit -1 hinzu. Das ist nicht gut und verlangsamt meistens Ihren Server. Aber wenn Sie weniger limitieren möchten, ist diese eine Option auch für Sie geeignet. Wenn Ihre Seitenänderungen nach dem Aktualisieren nicht übernommen werden, müssen Sie Ihren lokalen Server einmal neu starten, um Änderungen vorzunehmen.

Viel Glück. Hoffe es wird helfen. Möchten Sie die .htaccess-Datei herunterladen, klicken Sie darauf.

0