Diese Fehlermeldung wird angezeigt, irgendwelche Vorschläge?
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
Antworten:
Endlich fand ich die Antwort:
Fügen Sie dies einfach in die folgende Zeile ein, bevor Sie einen Fehler in Ihrer Datei erhalten
ini_set('memory_limit', '-1');
Es wird unbegrenzte Speichernutzung des Servers erfordern, es funktioniert gut.
Vielen Dank für Ihre Vorschläge Freunde.
UNLIMITED
.
Hier sind zwei einfache Methoden, um das Limit für Shared Hosting zu erhöhen:
Wenn Sie Zugriff auf Ihre PHP.ini-Datei haben, ändern Sie die Zeile in PHP.ini. Wenn in Ihrer Zeile 32 Millionen angezeigt werden, versuchen Sie es mit 64 Millionen:
memory_limit = 64M ; Maximum amount of memory a script may consume (64MB)
Wenn Sie keinen Zugriff auf PHP.ini haben, fügen Sie dies einer .htaccess-Datei hinzu:
php_value memory_limit 64M
Ihr Skript verwendet zu viel Speicher. Dies kann in PHP häufig vorkommen, wenn Sie eine außer Kontrolle geratene Schleife haben und bei jedem Durchgang der Schleife Objekte erstellen oder Arrays hinzufügen.
Suchen Sie nach Endlosschleifen.
Wenn dies nicht das Problem ist, versuchen Sie, PHP zu helfen, indem Sie Objekte zerstören, mit denen Sie fertig sind, indem Sie sie auf null setzen. z.B.$OldVar = null;
Überprüfen Sie den Code, in dem der Fehler tatsächlich auftritt. Würden Sie erwarten, dass diese Zeile eine enorme Menge an Speicher reserviert? Wenn nicht, versuchen Sie herauszufinden, was schief gelaufen ist ...
Tun :
ini_set('memory_limit', '-1');
ist niemals gut Wenn Sie eine sehr große Datei lesen möchten, empfiehlt es sich, sie Stück für Stück zu kopieren. Versuchen Sie den folgenden Code für Best Practice.
$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;
while
Schleife zu schließen:fclose($file)
Es ist leider einfach, in PHP so zu programmieren, dass Speicher schneller verbraucht wird, als Sie denken. Das Kopieren von Zeichenfolgen, Arrays und Objekten anstelle von Referenzen reicht aus, obwohl PHP 5 dies automatischer als in PHP 4 tun soll. Der vollständige Umgang mit Ihrem Datensatz über mehrere Schritte ist jedoch auch verschwenderisch im Vergleich zur Verarbeitung der kleinsten logischen Einheit zu einer Zeit. Das klassische Beispiel ist das Arbeiten mit großen Ergebnismengen aus einer Datenbank: Die meisten Programmierer rufen die gesamte Ergebnismenge in ein Array ab und durchlaufen sie dann ein- oder mehrmals mit foreach()
. Es ist viel speichereffizienter, eine while()
Schleife zu verwenden, um jeweils eine Zeile abzurufen und zu verarbeiten. Gleiches gilt für die Verarbeitung einer Datei.
Wenn Sie große Dateien lesen möchten, sollten Sie sie 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, wird mindestens 1 MB Speicher gleichzeitig benötigt, um die Daten zu speichern.
Sie sollten sie also Stück für Stück mit fopen
& lesen fread
.
$fh = fopen($folder.'/'.$filename, "rb") or die(); $buffer = 1024*1024; while (!feof($fh)) { print(fread($fh, $buffer)); flush(); } fclose($fh);
Ich habe das gleiche Problem in PHP7.2 mit Laravel 5.6 gehabt. Ich erhöhe nur die Anzahl der Variablen memory_limit = 128M
in php.ini, wie es meine Anwendungen erfordern. Es könnte 256M / 512M / 1048M sein ..... Jetzt funktioniert es gut.
Ich hatte auch das gleiche Problem, suchte erfolglos nach phpinfo.ini, php.ini oder .htaccess-Dateien. Schließlich habe ich mir einige PHP-Dateien angesehen, sie geöffnet und die darin enthaltenen Codes auf Speicher überprüft. Schließlich war diese Lösung das, was ich herausgebracht habe und es hat für mich funktioniert. Ich habe WordPress verwendet, daher funktioniert diese Lösung möglicherweise nur bei Problemen mit der Speicherbeschränkung für WordPress. Meine Lösung: Öffnen Sie die Datei default-constants.php im Ordner / public_html / wp-includes . Öffnen Sie diese Datei mit dem Code-Editor und suchen Sie die Speichereinstellungen im wp_initial_constants
Bereich oder drücken Sie einfach Strg + F, um das Wort "Speicher" zu finden. Dort kommst du rüber WP_MEMORY_LIMIT
und WP_MAX_MEMORY_LIMIT
. Erhöhen Sie es einfach, es war 64 MB in meinem Fall, ich habe es auf 128 MB und dann auf 200 MB erhöht.
// 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 machen Sie nicht den folgenden Code, weil das eine schlechte Praxis ist:
ini_set('memory_limit', '-1');
wp-config.php
, dass sie durch zukünftige WordPress-Updates nicht überschrieben werden. Außerdem werden sich einige Sicherheits-Plugins (wie zum Beispiel WordFence) beschweren, wenn 'Kern'-WordPress-Dateien geändert werden ...
wp-config.php
und fügen Sie einfach die beiden Zeilen dort hinzu (d. H. define( 'WP_MEMORY_LIMIT', '200M' );
Und define( 'WP_MAX_MEMORY_LIMIT', '256M' );
. Im Gegensatz zu den Dateien auf dem ' Kern' -WP (nämlich alles unter wp-includes
), die durch WP-Upgrades überschrieben werden, wp-config.php
nicht - es ist genau dafür da der genaue Zweck des Überschreibens von WP-Konstanten!
-1
ist gut für kurzfristige Prozesse. Zum Beispiel ein PHP-Builder-Container, der zum Ausführen von Komponententests oder zur Installation von / etc. Führen Sie Ihre Produktionsstätte nur nicht so aus.
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.
Und ordnen Sie auch die unerwünschten Variablen im Skript zu.
Überprüfen Sie diese PHP-Bibliothek: Speicher mit PHP freigeben
Ich stelle fest, dass viele Antworten nur versuchen, die Menge an Speicher zu erhöhen, die einem Skript zugewiesen wird, das seinen Platz hat, aber meistens bedeutet dies, dass etwas aufgrund einer unvorhergesehenen Menge an Volumen oder Größe zu liberal mit Speicher ist. Wenn Sie nicht der Autor eines Skripts sind, sind Sie natürlich dem Autor ausgeliefert, es sei denn, Sie fühlen sich ehrgeizig :) Die PHP-Dokumente sagen sogar, dass Speicherprobleme auf " schlecht geschriebene Skripte " zurückzuführen sind.
Es sollte erwähnt werden, dass ini_set('memory_limit', '-1');
(keine Begrenzung) Serverinstabilität verursachen kann als 0 bytes free = bad things
. Finden Sie stattdessen ein angemessenes Gleichgewicht zwischen dem, was Ihr Skript versucht, und der Menge des verfügbaren Speichers auf einem Computer.
Ein besserer Ansatz: Wenn Sie der Autor des Skripts sind (oder ehrgeizig), können Sie solche Speicherprobleme mit xdebug debuggen . Die neueste Version (2.6.0 - veröffentlicht am 29.01.2018) brachte eine Speicherprofilerstellung zurück, die zeigt, welche Funktionsaufrufe viel Speicher verbrauchen. Es zeigt Probleme im Skript auf, die sonst schwer zu finden sind. Normalerweise befinden sich 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, besteht jedoch aus drei Schritten:
apt-get
und yum
etc.xdebug.profiler_enable = 1
,xdebug.profiler_output_dir = /where/ever/
Wenn Sie versuchen, eine Datei zu lesen, belegt dies Speicher in PHP. Wenn Sie beispielsweise versuchen, eine MP3-Datei zu öffnen und zu lesen (z. B. $ data = file (" http://mydomain.com/path/sample.mp3 "), wird alles in den Speicher gezogen .
Wie Nelson vorschlägt, können Sie daran arbeiten, Ihr maximales Speicherlimit zu erhöhen, wenn Sie tatsächlich so viel Speicher benötigen.
Wir hatten eine ähnliche Situation und haben versucht, oben in den Antworten ini_set ('memory_limit', '-1') angegeben; und alles funktionierte gut, komprimierte Bilddateien größer als 1 MB in KBs.
Wenn Sie ein Shared Hosting verwenden, können Sie das Inkrement der PHP-Größenbeschränkung 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.
WordPress-Benutzer fügen Zeile hinzu:
@ini_set('memory_limit', '-1');
in wp-settings.php finden Sie im im WordPress installierten Stammordner
Ich hatte mein Hosting nicht erneuert und die Datenbank war schreibgeschützt. Joomla musste die Sitzung schreiben und konnte es nicht tun.
Ich hatte das gleiche Problem, das PHP in der Kommandozeile laufen ließ. Vor kurzem hatte ich Änderungen an der Datei php.ini und habe einen Fehler beim Ändern der Datei php.ini gemacht
Dies ist für PHP7.0
Pfad zu php.ini, wo ich Fehler gemacht habe:
/etc/php/7.0/cli/php.ini
Ich hatte gesetzt memory_limit = 256
(was bedeutet 256 bytes
)
statt memory_limit = 256M
(was bedeutet 256 Mega bytes
).
;; Maximale Speichermenge, die ein Skript belegen darf (128 MB)
; http://php.net/memory-limit
memory_limit = 128M
Nachdem ich es korrigiert hatte, lief mein Prozess einwandfrei.
Führen Sie diesen Befehl in Ihrem Magento-Stammverzeichnis aus php -d memory_limit=4G bin/magento
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
public function getClientsListApi(Request $request){
print_r($request); // it show error as above mention
}