如何故意造成“致命错误:允许的内存大小xxx字节耗尽”

时间:2010-09-01 23:31:47

标签: php memory overflow

每当我收到此错误时,我只是增加了内存来修复它。我有一个案例,出于测试目的,我想让一个页面耗尽所有内存但是我设置了memory_limit。

我不知道该怎么做。

编辑: 我试过这个:

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

但它没有崩溃。最后它只是打印了“startstart”,奇怪的是它打印了两次......

我想要一个简单的代码示例,“将大量内容放入内存中”......我知道的很多。

8 个答案:

答案 0 :(得分:18)

应该吃掉所有记忆。

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

答案 1 :(得分:8)

问题在于:

$test = "a" + $test;
PHP中的

+用于算术,而不是字符串连接。使用:

$test = "a" . $test;

答案 2 :(得分:5)

str_pad("",PHP_INT_MAX);

答案 3 :(得分:1)

你可以做一个无限循环,虽然我会反对。

您还可以打开/读取超出内存限制的内存大文件,您也可以编写一个循环,生成一个字符串,其字符数超出内存限制。

哪个最好,没有任何线索。但是有几种选择可供选择。

答案 4 :(得分:1)

  1. 下载所有Google地图图片。
  2. 然后使用GD将它们重新调整为1-1比例。

答案 5 :(得分:1)

编写一个试图在/ dev / random

中查找模式的PHP函数

答案 6 :(得分: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);

答案 7 :(得分:1)

我喜欢简单的解决方案,所以我经常只使用这条线,它就像一个魅力。

str_repeat('a', PHP_INT_MAX);