我有一个公司用来根据输入动态创建一些文件的表单。我有一个文本区$fileString
,他们可以输入文件名,然后返回硬盘。我接受并创建一个数组$list
。我想要做的是,如果他们在文本区域中输入两个文件名,如下所示:
item1
item2
它将创建一个包含6个值的数组,而不是两个,所以像这样:
$genList = array(item1_f, item1_b, item1_i, item2_f, item2_b, item2_i);
我在运行代码时收到此错误:
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 24 bytes) in /home/dcolor/public_html/dev/create.php on line 18
第18行是:
array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");
我在这里做错了什么?代码
$fileString = $_POST['fileList'];
$unique = $_POST['unique'];
$size = $_POST['size'];
$generateArray = $_POST['generateArray'];
$list = explode("\r\n",$fileString);
if ($generateArray == "yes") {
if ($size == "5x7inimpos") {
$genList = array();
while (!empty($list)) {
array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");
}
}
print_r($genlist);
}
答案 0 :(得分:3)
while (!empty($list)) {
array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");
}
$list
永远不会被清空,你永远不会离开while循环。
您只想迭代列表:
foreach($list as $element)
{
array_push($genList, $element . "_f", $element . "_b", $element . "_i");
}
答案 1 :(得分:2)
问题是
while (!empty($list)) {
array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");
}
因为$list
永远不会为空,从而导致无限循环。 PHP尝试将越来越多的元素推送到$genList
,直到内存限制超过。
您可能想要删除循环中的元素。
答案 2 :(得分:1)
这看起来像是一个无限循环。为什么$list
会变空?
while (!empty($list)) {
array_push($genList, $list[0] . "_f", $list[0] . "_b", $list[0] . "_i");
}
因此,您将使用array_push
分配内存,直至达到[256MB]内存限制。