Schwerwiegender Fehler: Zulässige Speichergröße von 134217728 Bytes erschöpft (CodeIgniter + XML-RPC)

618

Ich habe eine Reihe von POS-Systemen (Client Point of Sale), die regelmäßig neue Verkaufsdaten an eine zentrale Datenbank senden, in der die Daten zur Berichterstellung in einer großen Datenbank gespeichert werden.

Der Client-POS basiert auf PHPPOS, und ich habe ein Modul implementiert, das die Standard-XML-RPC-Bibliothek verwendet, um Verkaufsdaten an den Service zu senden. Das Serversystem basiert auf CodeIgniter und verwendet die XML-RPC- und XML-RPCS-Bibliotheken für die Webservice-Komponente. Immer wenn ich viele Verkaufsdaten sende (nur 50 Zeilen aus der Verkaufstabelle und einzelne Zeilen aus sales_items, die sich auf jeden Artikel innerhalb des Verkaufs beziehen), erhalte ich die folgende Fehlermeldung:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)

128M ist der Standardwert in php.ini, aber ich gehe davon aus, dass dies eine große Zahl ist, die gebrochen werden muss. Tatsächlich habe ich sogar versucht, diesen Wert auf 1024 MB einzustellen, und es dauert nur länger, bis ein Fehler auftritt.

Bei den von mir unternommenen Schritten habe ich versucht, die gesamte Verarbeitung auf der Serverseite zu deaktivieren, und sie so manipuliert, dass unabhängig von der Eingabe eine vordefinierte Antwort zurückgegeben wird. Ich glaube jedoch, dass das Problem im tatsächlichen Senden der Daten liegt. Ich habe sogar versucht, die maximale Skriptausführungszeit für PHP zu deaktivieren, und es treten immer noch Fehler auf.

ArcticZero
quelle
5
Ich bin etwas verwirrt ... wo tritt der Fehler auf - auf dem Client oder Server? Und in welchem ​​Stadium ... Client senden, Server empfangen, Server verarbeiten, Server senden, Client empfangen oder Client verarbeiten?
Greg
2
Der Fehler scheint entweder beim Senden des Clients oder beim Empfangen des Servers aufzutreten. Ich habe versucht, die gesamte serverseitige Verarbeitung zu deaktivieren und so zu manipulieren, dass unabhängig von den gesendeten Daten eine vordefinierte Antwort gesendet wird. Der Fehler tritt auf, wenn ich eine bestimmte Datenmenge sende. Ich ändere die PHP.ini-Einstellung.
ArcticZero
42
Speicherlimit ist 128 MB, souble es:ini_set('memory_limit', '256M');
9
Zusammenfassung hat alle Antworten "Ignoriere einfach das Leck", Leute, die CodeIgniter mit Drupal verwechselt haben, und Leute, die nur die Antworten anderer Leute kopiert und eingefügt haben, um Punkte zu erhalten, herabgestimmt. Die Qualität der Antworten in diesem Fall ist miserabel.
Matti Virkkunen

Antworten:

697

Das Ändern memory_limitvon ini_set('memory_limit', '-1');ist nicht eine richtige Lösung. Bitte tu das nicht.

Ihr PHP-Code weist möglicherweise irgendwo einen Speicherverlust auf und Sie weisen den Server an, nur den gesamten gewünschten Speicher zu verwenden. Sie hätten das Problem überhaupt nicht behoben. Wenn Sie Ihren Server überwachen, werden Sie feststellen, dass er jetzt wahrscheinlich den größten Teil des Arbeitsspeichers belegt und sogar auf die Festplatte wechselt.

Sie sollten wahrscheinlich versuchen, den fehlerhaften Code in Ihrem Code aufzuspüren und zu beheben.

Jeff
quelle
174
@ Jeff Sie haben wahrscheinlich 95% der Zeit Recht. Es gibt jedoch Zeiten, in denen Sie tatsächlich mehr Speicher benötigen. Angenommen, Ihre App lädt eine große Datenmenge zur Verarbeitung in den Speicher (z. B. eine Stückliste mit 15.000 Komponenten). Es ist nicht immer so, dass der Code fehlerhaft ist. Manchmal benötigen Sie nur etwas mehr Speicher (z. B. 256 MB anstelle von 128 MB). Ich stimme jedoch zu, dass es schrecklich schlecht ist, es auf -1 zu setzen. Aber das Anpassen des Speicherlimits für vernünftige Situationen zur Laufzeit ist imho durchaus akzeptabel.
Pyrit
24
@pyrite Ja, Sie haben Recht, dass ein Prozess manchmal mehr Speicher benötigt, aber Sie sollten das Speicherlimit auf eine logische Menge wie 256 MB wie gesagt oder 512 MB erhöhen, warum nicht ABER nicht -1;)
Lukas Lukac
9
@jeff Ich stimme voll und ganz zu, ein Wert von -1könnte nur in Entwicklungsumgebungen zu Testzwecken nützlich sein.
Esolitos
4
@Pyrite in den Fällen, die Sie für die verbleibenden 5% angegeben haben, lesen Sie die Daten in Blöcken und verwenden Sie einen Worker, um sie zu verarbeiten, anstatt mehr Speicher zu verwenden. Diese Lösung wird auch skaliert, während Ihr Vorschlag nicht funktioniert, außer dass Sie im Laufe der Zeit immer mehr Speicher in Ihren Server stecken, wenn die Daten wachsen.
Burzum
2
In den meisten Fällen tritt dieses Problem in ORM auf, wenn Sie versuchen, alle Daten so viel mehr PHP-Speicher zu holen. Zum Beispiel, wenn Sie versuchen, einen monatlichen Bericht zu erstellen.
Stepchik
213

ini_set('memory_limit', '-1');überschreibt das Standard- PHP-Speicherlimit .

Chris Lane
quelle
16
@williamcarswell; -1ist ein Wert, den PHP in diesem Zusammenhang als unbegrenzt versteht .
Alix Axel
7
@ ArseniuszŁozicki - es verbraucht auch Ressourcen, die der Server nicht schonen kann.
Ken Williams
124
Schade, dass dies so viele positive Stimmen bekommt. Das Festlegen eines genauen Werts mit php.ini-Änderungen oder ini_set ist eine absolut gültige Lösung, wenn Benutzer mehr Speicher benötigen. Es auf unbegrenzt zu setzen ist ein gefährlicher Hack :(
Jeff Davis
24
@ user1767586 setze es dann auf einen vernünftigen Wert. Sie können verhindern, dass das Skript den Fehler auslöst, indem Sie ihn auf 1024 MB setzen. Wenn diese Antwort ini_set ('memory_limit', '1024M') lautet; Sie könnten das kopieren und einfügen und in Ordnung sein. Wenn Sie den Wert auf -1 setzen, richten Sie sich so ein, dass ein Skript den gesamten Speicher belegt. Vor allem, wenn Sie dies routinemäßig tun. Wenn Sie "gefährlich" in Anführungszeichen setzen, wird dies nicht weniger gefährlich. Sie könnten Ihren Host-Server wirklich abspritzen. Vielleicht fangen Sie an, Daten zu zerstören. Ich weiß nicht, vielleicht deinen Job verlieren? Klingt für mich ziemlich gefährlich. : |
Jeff Davis
3
Traurig zu sehen, dass die Antwort für +161 Stimmen und -3 Stimmen die gleiche ist :(
akarthik10
130

Der richtige Weg ist, Ihre php.iniDatei zu bearbeiten . Bearbeiten Sie memory_limitauf Ihren Wunschwert.

Da Ihre Frage 128M(die das Standardlimit ist) überschritten wurde, stimmt etwas mit Ihrem Code nicht, da er nicht so viel kosten sollte.

Wenn Sie wissen, warum es so viel kostet und Sie möchten, dass es eingestellt memory_limit = 512Moder höher ist, sollten Sie gut sein.

Basav
quelle
7
Ehrlich gesagt, wenn Sie einige ernsthafte Datenmengen zwischenspeichern, ist dies die richtige Antwort. 128M reichen für bestimmte Skripte nicht aus. 512M oder 1024M reichen oft aus, aber Sie müssen von Fall zu Fall entscheiden.
Jeff Davis
2
Yeha, versuchen Sie jedoch, eine enorme Speichernutzung zu vermeiden, wenn die Anzahl der Benutzer höher sein wird
Basav
2
memory_limit = -1; eingestellt in php.ini
2
@YumYumYum Damit wird das Speicherlimit entfernt, das Sie nur benötigen, wenn Sie die Speichernutzung auf andere Weise überwachen. Das Betriebssystem beendet den Prozess, wenn es irgendwann eine große Menge an Speicher benötigt.
Flimm
Wenn Sie also ein Skript ausführen, das viel Speicher benötigt, es aber nur einmal ausführen muss, können Sie einfach das Speicherlimit für den Prozess zum Zeitpunkt der Ausführung erhöhen und das Speicherlimit nach einmaliger Ausführung erneut senken Skript läuft?
Chromechris
95

Die Speicherzuordnung für PHP kann permanent oder vorübergehend angepasst werden.

Permanent

Sie können die PHP-Speicherzuordnung auf zwei Arten dauerhaft ändern.

Wenn Sie Zugriff auf Ihre php.iniDatei haben, können Sie den Wert für memory_limitauf Ihren gewünschten Wert bearbeiten .

Wenn Sie keinen Zugriff auf Ihre php.iniDatei haben (und Ihr Webhost dies zulässt), können Sie die Speicherzuordnung durch Ihre .htaccessDatei überschreiben . Hinzufügen php_value memory_limit 128M(oder was auch immer Ihre gewünschte Zuordnung ist).

Temporär

Sie können die Speicherzuordnung im Handumdrehen aus einer PHP-Datei heraus anpassen. Sie haben einfach den Code ini_set('memory_limit', '128M');(oder was auch immer Ihre gewünschte Zuordnung ist). Sie können das Speicherlimit entfernen (obwohl möglicherweise noch Computer- oder Instanzlimits gelten), indem Sie den Wert auf "-1" setzen.

Umair Idrees
quelle
2
Vielen Dank, ich dachte nicht daran zu überprüfen, ob jemand den Wert in .htaccess festgelegt hatte, der php.ini überschrieb, und ich konnte nicht herausfinden, warum +1
HostMyBus
61

Es ist sehr einfach, Speicherlecks in einem PHP-Skript zu bekommen - insbesondere, wenn Sie eine Abstraktion wie ein ORM verwenden. Versuchen Sie, Ihr Skript mit Xdebug zu profilieren und herauszufinden, wo all dieser Speicher hingegangen ist.

troelskn
quelle
1
Ich werde Xdebug ausprobieren. Ich habe es noch nie benutzt, also muss ich es nachlesen. Vielen Dank für Ihre Antwort! Hoffe ich finde die Antwort darauf bald ...
ArcticZero
34
Denken Sie daran, dass PHP die Referenzzählung zum Verwalten des Speichers verwendet. Wenn Sie also Zirkelverweise oder globale Variablen haben, werden diese Objekte nicht recycelt. Das ist normalerweise die Wurzel von Speicherlecks in PHP.
Troelskn
Xdebug zeigt, dass die Xmlrpc.php-Bibliothek von CI für meinen Speicherverlust verantwortlich ist. Gibt es zufällig Probleme mit den XML-RPC-Bibliotheken von CodeIgniter, über die ich Bescheid wissen sollte? Ich habe versucht, die gesamte serverseitige Verarbeitung zu deaktivieren, und es geht immer noch der Speicher aus, wenn ich genügend Daten einspeise.
ArcticZero
1
Ich kenne / benutze CI nicht, also weiß ich es nicht. Aber Sie sollten wahrscheinlich versuchen, ein Objekt zu finden, das nach der Verwendung nicht freigegeben wird - höchstwahrscheinlich aufgrund einer zyklischen Referenz. Es ist Detektivarbeit.
Troelskn
1
Dies ist hier die einzige Antwort, die empfiehlt, das Problem tatsächlich anzugehen. Die anderen Antworten aktivieren das Gedächtnis, um ein Symptom zu verbinden und die Krankheit zu ignorieren .
Chris Baker
56

Beim Hinzufügen von 22,5 Millionen Datensätzen zu einem Array mit array_push wurden bei etwa 20 Millionen Datensätzen immer wieder schwerwiegende Fehler "Speicher erschöpft" angezeigt, die 4Gals Speicherlimit in der Datei php.ini verwendet wurden. Um dies zu beheben, habe ich die Anweisung hinzugefügt

$old = ini_set('memory_limit', '8192M');

am Anfang der Datei. Jetzt funktioniert alles gut. Ich weiß nicht, ob PHP einen Speicherverlust hat. Das ist nicht mein Job, und es interessiert mich auch nicht. Ich muss nur meine Arbeit erledigen, und das hat funktioniert.

Das Programm ist sehr einfach:

$fh = fopen($myfile);
while (!feof($fh)) {
    array_push($file, stripslashes(fgets($fh)));
}
fclose($fh);

Der schwerwiegende Fehler zeigt auf Zeile 3, bis ich das Speicherlimit erhöht habe, wodurch der Fehler behoben wurde.

JamesAD-0
quelle
10
Sie bedeuten ini_set('memory_limit', '8192M');?
Gogol
2
Was für ein Luxus wäre es, Zeit zu haben, um ein Skript für so etwas zu optimieren. Oder recherchieren und vergleichen und lernen Sie ETL-Tools oder ähnliches. In der realen Welt erhöhen wir die Speicherkapazität erheblich, machen das Ding und gehen weiter.
Matthew Poer
45

Ich habe diesen Fehler immer wieder erhalten, auch wenn er memory_limiteingestellt php.iniund der Wert korrekt ausgelesen wurde phpinfo().

Indem Sie dies ändern:

memory_limit=4G

Dazu:

memory_limit=4096M

Dies hat das Problem in PHP 7 behoben.

Danny Beckett
quelle
23

Wenn Sie den obigen Fehler sehen - insbesondere wenn der (tried to allocate __ bytes)Wert niedrig ist, könnte dies ein Indikator für eine Endlosschleife sein, wie eine Funktion, die sich selbst ohne Ausweg aufruft:

function exhaustYourBytes()
{
    return exhaustYourBytes();
}
Kristen Waite
quelle
19

Nachdem diese beiden Leitungen aktiviert wurden, funktionierte es:

; Determines the size of the realpath cache to be used by PHP. This value should
; be increased on systems where PHP opens many files to reflect the quantity of
; the file operations performed.
; http://php.net/realpath-cache-size
realpath_cache_size = 16k

; Duration of time, in seconds for which to cache realpath information for a given
; file or directory. For systems with rarely changing files, consider increasing this
; value.
; http://php.net/realpath-cache-ttl
realpath_cache_ttl = 120

Prem Kumar Maurya
quelle
19

Sie können dies ordnungsgemäß beheben, indem Sie memory_limitfastcgi / fpm ändern :

$vim /etc/php5/fpm/php.ini

Ändern Sie den Speicher von 128 auf 512, siehe unten

; Maximum amount of memory a script may consume (128 MB)
; http://php.net/memory-limit
memory_limit = 128M

zu

; Maximum amount of memory a script may consume (128 MB)
; http://php.net/memory-limit
memory_limit = 512M
Derick Fynn
quelle
18

Das Stammverzeichnis Ihrer Site:

ini_set('memory_limit', '1024M');
Gaurang P.
quelle
1
das hat bei mir funktioniert. liebe einzeilige Lösungen. +1 der Einfachheit halber
Steve C
14

Ändern Sie das Speicherlimit in der Datei php.ini und starten Sie Apache neu. Führen Sie nach dem Neustart die Datei phpinfo () aus. Funktion aus einer beliebigen PHP-Datei für eine memory_limitÄnderungsbestätigung.

memory_limit = -1

Speicherlimit -1 bedeutet, dass kein Speicherlimit festgelegt ist. Es ist jetzt maximal.

Hasib Kamal
quelle
13

Für Drupal-Benutzer lautet die Antwort von Chris Lane:

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

funktioniert, aber wir müssen es gleich nach der Eröffnung setzen

<?php

Tag in der Datei index.php im Stammverzeichnis Ihrer Site.

sigmapi13
quelle
13

In Drupal 7 können Sie das Speicherlimit in der Datei settings.php ändern, die sich in Ihrem Ordner sites / default befindet. Um die Linie 260 herum sehen Sie Folgendes:

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

Selbst wenn Ihre php.ini-Einstellungen hoch genug sind, können Sie nicht mehr als 128 MB verbrauchen, wenn dies nicht in Ihrer Drupal settings.php-Datei festgelegt ist.

LK7889
quelle
1
Nicht in Drupal7 gibt es keine solche Code-Zeichenfolge in settings.php
FLY
Es gibt auch keine Zeichenfolge in settings.php für Drupal 6
AllisonC
12

Anstatt den memory_limitWert in Ihrer php.iniDatei zu ändern, können Sie , wenn ein Teil Ihres Codes viel Speicher benötigt, den memory_limitAbschnitt entfernen, bevor dieser Abschnitt ausgeführt wird, und ihn anschließend ersetzen.

$limit = ini_get('memory_limit');
ini_set('memory_limit', -1);
// ... do heavy stuff
ini_set('memory_limit', $limit);
mykeels
quelle
7

Mit PHP 5.3+ können Sie das Speicherlimit ändern, indem Sie eine .user.iniDatei in den public_htmlOrdner legen . Erstellen Sie einfach die obige Datei und geben Sie die folgende Zeile ein:

memory_limit = 64M

Einige cPanel-Hosts akzeptieren nur diese Methode.

Sabi
quelle
7

Absturzseite?

Geben Sie hier die Bildbeschreibung ein

(Es passiert, wenn MySQL große Zeilen abfragen muss. Standardmäßig memory_limit ist klein eingestellt, was für die Hardware sicherer war.)

Sie können den vorhandenen Speicherstatus Ihres Systems überprüfen, bevor Sie Folgendes erhöhen php.ini:

# free -m
             total       used       free     shared    buffers     cached
Mem:         64457      63791        666          0       1118      18273
-/+ buffers/cache:      44398      20058
Swap:         1021          0       1021

Hier habe ich es wie im Folgenden erhöht und dann service httpd restartdas Absturzseitenproblem behoben.

# grep memory_limit /etc/php.ini
memory_limit = 512M
Peter Mortensen
quelle
Welche Nummer (Zeile und Spalte?) free -mSollte man sich nach dem Ausführen des Befehls ansehen , um sich für ein neues memory_limit zu entscheiden?
Kiradotee
7

Fügen Sie einfach eine hinzu ini_set('memory_limit', '-1'); Zeile oben auf Ihrer Webseite hinzu.

Und Sie können Ihr Gedächtnis nach Ihren Wünschen anstelle von -1, bis 16Musw. einstellen .

Pankaj Pratik Rai
quelle
6
Dies scheint dasselbe zu sagen wie viele bestehende Antworten. Es ist am besten, eine beliebte Frage nur dann zu beantworten, wenn das neue Material etwas Neues bietet.
Halfer
6

Für diejenigen, die sich am Kopf kratzen, um herauszufinden, warum um alles in der Welt diese kleine Funktion einen Speicherverlust verursachen sollte, manchmal aus Versehen, ruft sich eine Funktion für immer rekursiv auf.

Beispiel: Eine Proxy-Klasse mit demselben Namen für eine Funktion des Objekts, das sie als Proxy verwenden soll.

class Proxy {

    private $actualObject;

    public function doSomething() {

        return $this->actualObjec->doSomething();
    }
}

Manchmal vergessen Sie vielleicht, dieses kleine actualObjec-Mitglied mitzubringen, und da der Proxy tatsächlich über diese doSomethingMethode verfügt, gibt Ihnen PHP keinen Fehler. Bei einer großen Klasse kann es für einige Minuten vor den Augen verborgen sein, um herauszufinden, warum dies so ist verliert den Speicher.

madz
quelle
Und noch ein Tipp: Sie können die('here')Ihren Code eingeben und diese Anweisung verschieben, um zu sehen, wo die Rekursion beginnt.
Toddmo
6

Ich hatte den folgenden Fehler, als ich mit einem Datensatz lief, der kleiner war als zuvor.

Schwerwiegender Fehler: Zulässige Speichergröße von 134217728 Byte erschöpft (versucht, 4096 Byte zuzuweisen) in C: \ workspace \ image_management.php in Zeile 173

Als mich die Suche nach dem Fehler hierher brachte, dachte ich, ich würde erwähnen, dass es nicht immer die technischen Lösungen in früheren Antworten sind, sondern etwas Einfacheres. In meinem Fall war es Firefox. Bevor ich das Programm ausführte, wurden bereits 1.157 MB verwendet.

Es stellte sich heraus, dass ich über einen Zeitraum von Tagen jeweils ein 50-minütiges Video angesehen hatte, was die Dinge durcheinander brachte. Es ist die Art von Korrektur, die Experten korrigieren, ohne darüber nachzudenken, aber für Leute wie mich lohnt es sich, daran zu denken.

M61Vulcan
quelle
Ich hatte heute ein ähnliches Ereignis bei Google Chrome. Ich war äußerst skeptisch gegenüber dieser Antwort ... es zeigte sich jedoch, dass meine Byte-Erschöpfung verschwand, nachdem ich ein Inkognito-Fenster geöffnet und das gleiche Skript erneut ausgelöst hatte! Die Forschung geht weiter.
Mickmackusa
2

Führen Sie das Skript folgendermaßen aus (z. B. Cron-Fall): php5 /pathToScript/info.php Erzeugt denselben Fehler.

Der richtige Weg: php5 -cli /pathToScript/info.php

ratm
quelle
2

Wenn Sie einen WHM-basierten VPS (Virtual Private Server) ausführen, haben Sie möglicherweise keine Berechtigung zum direkten Bearbeiten von PHP.INI. Das System muss es tun. Geht in dem Host - Bedienfeld WHM, um Service - KonfigurationPHP Configuration Editor und ändern memory_limit:

Aktualisieren von memory_limit auf WHM 11.48.4

Janckos
quelle
2

Ich finde es nützlich , wenn mit oder erfordern _dbconnection.php_und _functions.phpin Dateien , die tatsächlich verarbeitet werden, anstatt im Header enthält. Welches ist in sich enthalten.

Wenn Ihre Kopf- und Fußzeile enthalten ist, fügen Sie einfach alle Ihre Funktionsdateien hinzu, bevor die Kopfzeile enthalten ist.

Kerim
quelle
2

Die Verwendung yieldkönnte ebenfalls eine Lösung sein. Siehe Generatorsyntax .

Anstatt die PHP.iniDatei für einen größeren Speicher zu ändern , kann yielddas Problem manchmal durch Implementieren einer Schleife behoben werden. Der Ertrag besteht darin, nicht alle Daten auf einmal zu sichern, sondern sie einzeln zu lesen, wodurch viel Speicherplatz gespart wird.

LukeDS
quelle
2
PHP.ini? Ist es nicht php.ini?
Peter Mortensen
1

Dieser Fehler wird manchmal durch einen Fehler im PHP-Code verursacht, der Rekursionen mit Ausnahmebehandlung und möglicherweise anderen Vorgängen verursacht. Leider konnte ich kein winziges Beispiel erstellen.

In diesen Fällen, die bei mir mehrmals aufgetreten sind, set_time_limitschlägt dies fehl und der Browser versucht weiterhin, die PHP-Ausgabe zu laden, entweder mit einer Endlosschleife oder mit der schwerwiegenden Fehlermeldung, die das Thema dieser Frage ist.

Durch Reduzieren der zulässigen Zuordnungsgröße durch Hinzufügen

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

Am Anfang Ihres Codes sollten Sie in der Lage sein, den schwerwiegenden Fehler zu verhindern.

Dann bleibt möglicherweise ein Programm übrig, das beendet wird, aber immer noch schwer zu debuggen ist.

Fügen Sie zu diesem Zeitpunkt BreakLoop()Aufrufe in Ihr Programm ein, um die Kontrolle zu erlangen und herauszufinden, welche Schleife oder Rekursion in Ihrem Programm das Problem verursacht.

Die Definition von BreakLoop lautet wie folgt:

function BreakLoop($MaxRepetitions=500,$LoopSite="unspecified")
    {
    static $Sites=[];
    if (!@$Sites[$LoopSite] || !$MaxRepetitions)
        $Sites[$LoopSite]=['n'=>0, 'if'=>0];
    if (!$MaxRepetitions)
        return;
    if (++$Sites[$LoopSite]['n'] >= $MaxRepetitions)
        {
        $S=debug_backtrace(); // array_reverse
        $info=$S[0];
        $File=$info['file'];
        $Line=$info['line'];
        exit("*** Loop for site $LoopSite was interrupted after $MaxRepetitions repetitions. In file $File at line $Line.");
        }
    } // BreakLoop

Das Argument $ LoopSite kann der Name einer Funktion in Ihrem Code sein. Dies ist nicht unbedingt erforderlich, da die Fehlermeldung Sie auf die Zeile verweist, die den Aufruf von BreakLoop () enthält.

David Spector
quelle
-1

In meinem Fall war es ein kurzes Problem mit der Art und Weise, wie eine Funktion geschrieben wurde. Ein Speicherverlust kann verursacht werden, indem der Eingangsvariablen einer Funktion ein neuer Wert zugewiesen wird, z.

/**
* Memory leak function that illustrates unintentional bad code
* @param $variable - input function that will be assigned a new value
* @return null
**/
function doSomehting($variable){
    $variable = 'set value';
    // Or
    $variable .= 'set value';
}
Dmitriy Kravchuk
quelle
-6

Als ich die folgenden Zeilen aus meinem Code entfernt habe, hat alles funktioniert!

set_include_path(get_include_path() . get_include_path() . '/phpseclib');
include_once('Net/SSH2.php');
include_once('Net/SFTP.php');

Diese Zeilen waren in jeder Datei enthalten, die ich ausgeführt habe. Beim Ausführen der Dateien nacheinander funktionierten alle einwandfrei, aber beim Ausführen aller Dateien zusammen trat das Problem mit dem Speicherverlust auf. Irgendwie schließt das "include_once" die Dinge nicht einmal ein, oder ich mache etwas falsch ...

Omar Al-Azzawi
quelle
set_include_path(get_include_path() . get_include_path().'/phpseclib'); Dadurch wird der Pfad '/ phpseclib' einmal für jede Datei mit der Zeile hinzugefügt ... damit er mehrmals hinzugefügt werden kann! Ich würde vorschlagen, es in eine Einstellungsdatei und include_oncedie Einstellungsdatei zu legen .
Farfromunique