每当我收到此错误时,我只是增加了内存来修复它。我有一个案例,出于测试目的,我想让一个页面耗尽所有内存但是我设置了memory_limit。
我不知道该怎么做。
编辑: 我试过这个:
<?php
echo "start";
@ini_set('memory_limit', '1M');
$test = "a";
while (1) {
$test = "a" + $test;
}
echo "done";
?>
但它没有崩溃。最后它只是打印了“startstart”,奇怪的是它打印了两次......
我想要一个简单的代码示例,“将大量内容放入内存中”......我知道的很多。
答案 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)
答案 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);