Erlaubte Speichergröße von X Bytes erschöpft

Fataler Fehler: Erlaubte Speichergröße von 67108864 Bytes erschöpft (versucht, 13965430 Bytes zuzuweisen)

PHPInfo zeigt, dass ich ein memory_limit von 128M habe, also bin ich verwirrt, warum der Fehler sagt, dass ich nur 64M habe. Ist es möglich, dass phpinfo falsch berichtet? Oder für PHP zwei separate php.inis zu verwenden?

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

   

Die PHP-Konfiguration kann an mehreren Stellen eingestellt werden:

  1. Master-System php.ini (normalerweise in / etc irgendwo)
  2. irgendwo in Apaches Konfiguration (httpd.conf oder eine per-site .conf Datei, über php_value )
  3. CLI & CGI können eine andere php.ini (benutzen Sie den Befehl php -i | grep memory_limit um das CLI conf zu überprüfen)
  4. lokale .htaccess-Dateien (auch php_value )
  5. In-Skript (über ini_set() )

In der Ausgabe von PHPinfo ist der “Master” -Wert der kompilierte Standardwert und der “Local” -Wert ist der tatsächliche Wert. Es kann entweder von der Standardeinstellung unverändert sein oder an einer der oben genannten Stellen außer Kraft gesetzt werden.

Beachten Sie auch, dass PHP im Allgemeinen verschiedene INI-Dateien für die Befehlszeilen- und Webserver-basierte Operation hat. Wenn Sie phpinfo() von der Befehlszeile aus phpinfo() , werden andere Werte gemeldet, als wenn Sie es in einem webbasierten Skript ausführen würden.

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

oder

 php.ini => memory_limit = 128M 

oder

 php_value memory_limit 128M 

Ich hatte dasselbe Problem. Ich habe die Antwort gefunden:

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

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

Update: Verwenden Sie dies sorgfältig, da dies zu einer Verlangsamung Ihres Systems führen kann, wenn das PHP-Skript übermäßig viel Arbeitsspeicher verwendet und viel Swap-Speicherplatz verbraucht. Sie können dies verwenden, wenn Sie wissen, dass das Programm nicht viel Speicher benötigt und Sie auch nicht wissen, wie viel Sie es jetzt einstellen müssen. Aber Sie werden schließlich finden, wie viel Speicher Sie für dieses Programm benötigen.

Sie sollten immer Speicherlimit als einen Wert, wie von @ şarkı dinle beantwortet.

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

Unbegrenzte Speicher zu geben ist eine schlechte Übung, stattdessen sollten wir ein Maximum geben, das wir ertragen und dann unseren Code optimieren oder einige RAMs hinzufügen können.

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 von memory_limit lösen

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

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

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

Vermeiden Sie das Laden großer Datasets in ein Array. Gehen Sie stattdessen zur Verarbeitung kleinerer Teilmengen des größeren Datasets vor und halten Sie Ihre Daten bei Bedarf in einer database fest, um den Speicherverbrauch zu verringern.

Probieren Sie die neueste Version oder Minor-Version einer Bibliothek eines Drittanbieters aus (z. B. 1.9.3 im Vergleich zu 1.8.2) und verwenden Sie den jeweils stabileren. Manchmal werden neuere Versionen von Bibliotheken effizienter geschrieben.

Wenn Sie eine ungewöhnliche oder instabile PHP-Erweiterung haben, versuchen Sie es zu aktualisieren. Möglicherweise ist ein Speicherleck vorhanden.

Wenn Sie mit großen Dateien zu tun haben und diese nicht Zeile für Zeile 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.

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

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

 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