2010-09-01 2 views
6

Immer wenn ich diesen Fehler erhalten habe, habe ich nur den Speicher erhöht, um es zu beheben. Ich habe einen Fall, in dem ich zu Testzwecken eine Seite veranlassen möchte, den ganzen Speicher zu verbrauchen, wie groß auch immer ich den memory_limit setze.Wie Sie absichtlich einen "Schwerwiegender Fehler: Erlaubte Speichergröße von xxx Bytes erschöpft"

Ich habe keine Ahnung, wie man das macht.

EDIT: Ich versuchte dies:

<?php 
echo "start"; 
@ini_set('memory_limit', '1M'); 
$test = "a"; 
while (1) { 
    $test = "a" + $test;  
} 
echo "done"; 
?> 

Aber es stürzt nicht. Am Ende hat es nur "startstart" gedruckt, was seltsam ist, dass es zweimal gedruckt wurde ...

Ich hätte gerne ein einfaches Codebeispiel, das "eine Menge Sachen in Erinnerung" ... nun, ich weiß das sehr .

+2

Sei kreativ, das ist alles was ich sagen kann. – BoltClock

+0

Das nächste Mal, beginnen mit dem Posten, was Sie versuchen und/oder versucht haben. –

Antwort

8

Hier ist das Problem zu finden versucht:

$test = "a" + $test; 

+ in PHP für die Arithmetik, nicht Zeichenfolge Verketten ist. Verwendung:

$test = "a" . $test; 
+1

* smacks self im Kopf mit Tastatur mehrmals * (Ich wusste, dass ... zu viel js in letzter Zeit) – phazei

+1

@ phazei: Kein Problem, ich habe das schon oft getan, und ich habe PHP seit 2000 ! – Josh

1

Sie können eine Endlosschleife machen, obwohl ich davon abraten würde.

Sie können auch große Dateien öffnen/lesen, die das Speicherlimit überschreiten würden. Sie könnten auch eine Schleife schreiben, die eine Zeichenfolge mit der Anzahl der Bytes generiert, die das Speicherlimit überschreiten würde.

Welches ist am besten, keine Ahnung. Aber es gibt ein paar Optionen für Sie.

17

Sollte alle Speicher essen.

$a = 'x'; 
while (true) { 
    $a = $a.$a; 
} 
+0

dauert <1 Sek., Um mein Gedächtnis zu erschöpfen – andrem

+0

Ich habe das im Prinzip versucht, obwohl es etwas effizienter ist, es hat keine besseren Ergebnisse geliefert. – phazei

+0

@ phazei: Siehe meine Antwort. Sie hatten '$ test =" einen "+ $ test;' was sich sehr von '$ test =" a "unterscheidet. $ test; ' – Josh

1
  1. Laden Sie alle Google Maps Bilder.
  2. Dann größen Sie sie mit GD in eine 1-1 Skala.
1

eine PHP-Funktion schreiben, die ein Muster in/dev/random

1
<?php 
$limit = ini_get('memory_limit'); 
$last = strtolower($limit[strlen($limit)-1]); 
switch($last) { 
    case 'g': 
     $limit *= 1024; 
    case 'm': 
     $limit *= 1024; 
    case 'k': 
     $limit *= 1024; 
} 
$limit = $limit + 1;//not needed actually, I assume the script has consumed 1 byte of memory by now... 
$foo = `dd if=/dev/zero bs=$limit count=1`; 
//or, if you don't like the command line: 
$bar = str_repeat($a,$limit); 
+0

Eigentlich ist dieses Limit von +1 erforderlich. Ist sonst nicht abgestürzt. – phazei

+0

Hier gibt es mehr Overhead als 0 Bytes, weil zum Beispiel Einstellungen geladen sind usw. Ich bin ziemlich überrascht, dass Sie einen 0 Byte Aufwand für PHP-Skripte haben, aber natürlich kann ich nicht mit Ihren Ergebnissen streiten. – Wrikken

+0

Mit Ihrem Skript bekomme ich den Fehler "Erlaubte Speichergröße erschöpft". Aber ich habe gerade gemerkt, wenn ich eine Weile mache (1) {$ byte = $ byte. $ Byte} Ich bekomme einen "Out of memory" -Fehler, lange bevor ich das erlaubte Limit erreiche, dass der vorherige Fehler eintritt.Irgendwelche Ideen, warum? – phazei