it-swarm.com.de

Zulässige Speichergröße von 33554432 Bytes erschöpft (versucht, 43148176 Bytes zuzuweisen) in PHP

Diese Fehlermeldung wird angezeigt, irgendwelche Vorschläge?

Zulässige Speichergröße von 33554432 Bytes erschöpft (versucht, 43148176 Bytes zuzuweisen) in PHP

267
panidarapu

Endlich habe ich die Antwort gefunden:

Fügen Sie dies einfach in die folgende Zeile ein, bevor eine Fehlermeldung in Ihrer Datei angezeigt wird

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

Es dauert unbegrenzte Speichernutzung des Servers, es funktioniert gut.

Vielen Dank für die Empfehlung Freunde.

300
panidarapu

Hier sind zwei einfache Methoden, um das Limit für Shared Hosting zu erhöhen:

  1. Wenn Sie Zugriff auf Ihre PHP.ini-Datei haben, ändern Sie die Zeile in PHP.ini. Wenn Ihre Zeile 32 MB anzeigt, versuchen Sie es mit 64 MB: memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)

  2. Wenn Sie keinen Zugriff auf PHP.ini haben, fügen Sie dies zu einer .htaccess-Datei hinzu: php_value memory_limit 64M

56
Haider Abbas

Ihr Skript belegt zu viel Speicher. Dies kann häufig in PHP auftreten, wenn Sie eine außer Kontrolle geratene Schleife haben und bei jedem Durchlauf der Schleife Objekte erstellen oder Arrays hinzufügen.

Suchen Sie nach Endlosschleifen.

Wenn dies nicht das Problem ist, versuchen Sie, PHP durch Löschen von Objekten, mit denen Sie fertig sind, zu helfen, indem Sie sie auf null setzen. Beispiel: $OldVar = null;

Überprüfen Sie den Code, in dem der Fehler auch tatsächlich auftritt. Würden Sie erwarten, dass diese Zeile eine enorme Menge an Speicherplatz belegt? Wenn nicht, versuchen Sie herauszufinden, was schief gelaufen ist ...

42
Rik Heywood

Tun :

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

ist nie gut. Wenn Sie eine sehr große Datei lesen möchten, empfiehlt es sich, diese nach und nach zu kopieren. Probieren Sie den folgenden Code aus, um bewährte Methoden zu finden.

$path = 'path_to_file_.txt';

$file = fopen($path, 'r');
$len = 1024; // 1MB is reasonable for me. You can choose anything though, but do not make it too big
$output = fread( $file, $len );

while (!feof($file)) {
    $output .= fread( $file, $len );
}

fclose($file);

echo 'Output is: ' . $output;
35
assetCorp

Es ist leider einfach, PHP so zu programmieren, dass Speicher schneller verbraucht wird, als Sie denken. Das Kopieren von Strings, Arrays und Objekten anstelle der Verwendung von Referenzen wird dies tun, obwohl PHP 5 dies eher automatisch tun soll als in PHP 4. Aber der gesamte Umgang mit Ihrem Datensatz ist vorbei Mehrere Schritte sind auch im Vergleich zur gleichzeitigen Verarbeitung der kleinsten logischen Einheit verschwenderisch. Das klassische Beispiel besteht darin, mit großen Ergebnismengen aus einer Datenbank zu arbeiten: Die meisten Programmierer rufen die gesamte Ergebnismenge in ein Array ab und durchlaufen sie dann ein oder mehrere Male mit foreach(). Es ist viel speichereffizienter, eine while() -Schleife zu verwenden, um jeweils eine Zeile abzurufen und zu verarbeiten. Gleiches gilt für die Bearbeitung einer Datei.

17
staticsan

Wenn Sie große Dateien lesen möchten, sollten Sie diese Stück für Stück lesen, anstatt sie sofort zu lesen.
Es ist ganz einfach: Wenn Sie eine 1 MB große Datei gleichzeitig lesen, ist mindestens 1 MB Speicher erforderlich, um die Daten zu speichern.

Sie sollten sie daher Stück für Stück mit fopen & fread lesen.

13
Gumbo

Ich habe das gleiche Problem in PHP 7.2 mit laravel 5.6. Ich erhöhe nur die Menge der Variablen memory_limit = 128M in der php.ini als meine Anwendungen verlangen. Es könnte 256M/512M/1048M sein ..... Jetzt funktioniert es gut.

7
Ziaur Rahman

Ich hatte auch das gleiche Problem, suchte nach phpinfo.ini, php.ini oder .htaccess-Dateien ohne Erfolg. Schließlich habe ich einige PHP-Dateien angeschaut, sie geöffnet und die Codes im Inneren auf Speicher überprüft. Schließlich war diese Lösung das, was ich herausbrachte und es funktionierte für mich. Ich habe WordPress verwendet, daher funktioniert diese Lösung möglicherweise nur für wordpress Speichergrößenbeschränkungsproblem. Meine Lösung: Öffne default-constants.php Datei in / public_html/wp-includes Ordner Öffnen Sie diese Datei mit dem Code-Editor und suchen Sie die Speichereinstellungen unter wp_initial_constants scope oder einfach Strg + F, um das Wort "memory" zu finden. Da kommst du vorbei WP_MEMORY_LIMIT und WP_MAX_MEMORY_LIMIT. Erhöhen Sie es einfach, es war 64 MB in meinem Fall, ich erhöhte es auf 128 MB und dann auf 200 MB.

// Define memory limits.
if ( ! defined( 'WP_MEMORY_LIMIT' ) ) {
    if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
        define( 'WP_MEMORY_LIMIT', $current_limit );
    } elseif ( is_multisite() ) {
        define( 'WP_MEMORY_LIMIT', '200M' );
    } else {
        define( 'WP_MEMORY_LIMIT', '128M' );
    }
}

if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
    if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
        define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
    } elseif ( -1 === $current_limit_int || $current_limit_int > 268435456 /* = 256M */ ) {
        define( 'WP_MAX_MEMORY_LIMIT', $current_limit );
    } else {
        define( 'WP_MAX_MEMORY_LIMIT', '256M' );
    }
}

Übrigens, bitte mach nicht den folgenden Code, denn das ist eine schlechte Übung:

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

Sie können den für PHP-Skripte zulässigen Speicher erhöhen, indem Sie die folgende Zeile über allen Codes im Skript ausführen:

ini_set('memory_limit','-1'); // enabled the full memory available.

Außerdem können Sie die unerwünschten Variablen im Skript freigeben.

Überprüfen Sie diese PHP-Bibliothek: Speicher freigeben mit PHP

5

Wenn Sie versuchen, eine Datei zu lesen, nimmt diese in PHP Speicherplatz ein. Wenn Sie beispielsweise versuchen, eine MP3-Datei zu öffnen und zu lesen (z. B. $ data = file (" http://mydomain.com/path/sample.mp "), ist dies der Fall werde alles in Erinnerung behalten.

Wie Nelson vorschlägt, können Sie daran arbeiten, Ihr maximales Speicherlimit zu erhöhen, wenn Sie tatsächlich so viel Speicher benötigen.

2
Beau Simensen

Wir hatten eine ähnliche Situation und versuchten es oben in den Antworten ini_set ('memory_limit', '-1'). und alles hat gut funktioniert, komprimierte Bilder Dateien größer als 1MB in KB.

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

Ich stelle fest, dass viele Antworten nur versuchen, die Speicherkapazität eines Skripts zu erhöhen, das seinen Platz hat. Meistens bedeutet dies jedoch, dass der Speicher aufgrund einer unvorhergesehenen Menge an Volumen oder Größe zu liberal ist. Offensichtlich, wenn Sie nicht der Autor eines Skripts sind, sind Sie dem Autor ausgeliefert, es sei denn, Sie fühlen sich ehrgeizig :) Die PHP Dokumente sagen sogar, dass Speicherprobleme auf " schlecht geschrieben sind Skripte "

Es sollte erwähnt werden, dass ini_set('memory_limit', '-1'); (keine Begrenzung) Serverinstabilität verursachen kann, wie 0 bytes free = bad things. Finden Sie stattdessen ein angemessenes Gleichgewicht, indem Sie die Aufgabe Ihres Skripts und den verfügbaren Arbeitsspeicher auf einem Computer abwägen.

Ein besserer Ansatz: Wenn Sie der Autor des Skripts sind (oder ehrgeizig sind), können Sie solche Speicherprobleme mit beheben. xdebug . In der neuesten Version (2.6.0 - veröffentlicht am 29.01.2018) wurde die Speicherprofilerstellung wiederhergestellt, die zeigt, welche Funktionsaufrufe viel Speicher belegen. Es enthüllt Probleme im Skript, die ansonsten schwer zu finden sind. Normalerweise liegen die Ineffizienzen in einer Schleife, die das empfangene Volumen nicht erwartet, aber jeder Fall wird dem Leser als Übung überlassen :)

Die xdebug Dokumentation ist hilfreich, aber es läuft in 3 Schritten ab:

  1. Installiere es - Verfügbar über apt-get Und yum etc
  2. Konfiguriere es - xdebug.ini: xdebug.profiler_enable = 1, xdebug.profiler_output_dir = /where/ever/
  3. Zeigen Sie die Profile in einem Tool wie QCacheGrind , KCacheGrind an.
2
SeanDowney

Ich habe die gleiche Fehlermeldung erhalten, nachdem ich in Wordpress zu einem neuen Thema gewechselt habe. PHP hat Version 5.3 ausgeführt, daher habe ich auf 7.2 umgestellt. Damit wurde das Problem behoben.

1
DavGarcia

Ich hatte das selbe problem welches php in der befehlszeile ausführt. Vor kurzem hatte ich die php.ini-Datei geändert und einen Fehler beim Ändern der php.ini gemacht

Dies ist für PHP 7.0

pfad zu php.ini, wo ich einen Fehler gemacht habe: /etc/php/7.0/cli/php.ini

Ich hatte memory_limit = 256 Eingestellt (was 256 bytes Bedeutet)
anstelle von memory_limit = 256M (was 256 Mega bytes bedeutet).

; Maximaler Speicherbedarf eines Skripts (128 MB)
; http://php.net/memory-limit
memory_limit = 128M

Nachdem ich es korrigiert hatte, lief mein Prozess einwandfrei.

0
theBuzzyCoder

Das Umstellen des Servers auf PHP 7.x löste das Problem in meinem Fall

0
Tech Nomad

Wenn Sie ein Shared Hosting verwenden, können Sie die Erhöhung der PHP-Größe nicht erzwingen.

Gehen Sie einfach zu Ihrem cpanel und aktualisieren Sie Ihre PHP-Version auf 7.1 und höher, dann können Sie loslegen.

0
successtar

Führen Sie diesen Befehl in Ihrem Magento-Stammverzeichnis aus php -d memory_limit=4G bin/magento

0

wordPress-Benutzer fügen Zeile hinzu:

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

in der wp-settings.php, die du im wordpress installierten root ordner findest

0
Praveesh P

Schreiben

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

in deiner index.php oben nach dem öffnen des php tags

0
Prafull

wenn Sie laravel verwenden, verwenden Sie diese Methoden

public function getClientsListApi(Request $request){ print_r($request->all()); //for all request print_r($request->name); //for all name }

anstatt von

public function getClientsListApi(Request $request){ print_r($request); // it show error as above mention }

0
Ajay

Ich hatte mein Hosting nicht erneuert und die Datenbank war schreibgeschützt. Joomla musste die Sitzung schreiben und konnte es nicht tun.

0
Alberto M