我不确定这里发生了什么,我在localhost上测试了这段代码,但现在我已经尝试上线了,我收到了这条错误消息:
致命错误:第24行的... / functions / tree.php中允许的内存大小为67108864字节(尝试分配261900字节)
我猜测代码导致某种无限递归但我有点困惑,因为它在localhost上工作正常。我花了几天的时间试图让它按照我喜欢的方式运行,我不愿意在没有方向的情况下改变一切。关于可能导致此错误和/或如何修复错误的想法?
<?php
function hasChild($parent_id)
{
$sql = "SELECT COUNT(*) as count FROM categories WHERE parent = '" . $parent_id . "'";
$qry = mysql_query($sql);
$rs = mysql_fetch_array($qry);
return $rs['count'];
}
function CategoryTree($list,$parent,$append)
{
$list = '<li>'.'<a href="inventory.php?cid=' . $parent['id'] . '&cname=' . $parent['cname'] . '">' . $parent['cname'] . '</a>'.'</li>';
if (hasChild($parent['id'])) // check if the id has a child
{
$append++;
$list .= "<ul class='child child".$append."'>";
$sql = "SELECT * FROM categories WHERE parent = '" . $parent['id'] . "'";
$qry = mysql_query($sql);
$child = mysql_fetch_array($qry);
do{
$list .= CategoryTree($list,$child,$append); //this is line 24
}while($child = mysql_fetch_array($qry));
$list .= "</ul>";
}
return $list;
}
function CategoryList()
{
$list = "";
$sql = "SELECT * FROM categories WHERE (parent = 0 OR parent IS NULL)";
$qry = mysql_query($sql);
$parent = mysql_fetch_array($qry);
$mainlist = "<ul class='parent'>";
do{
$mainlist .= CategoryTree($list,$parent,$append = 0);
}while($parent = mysql_fetch_array($qry));
$list .= "</ul>";
return $mainlist;
}
?>
答案 0 :(得分:0)
Localhost设置可能与您的PHP服务器不同。 如果您的PHP服务器没有足够的内存,那么PHP将停止并显示该错误。
您需要增加允许的最大内存大小,您可以通过在脚本顶部添加以下内容来解决此问题:
ini_set('memory_limit', '128M');
或者如果您不想触摸代码,则可以在php.ini
设置文件中进行设置。
答案 1 :(得分:0)
您正在收集大量字符串数据。我会考虑重构我的代码以更频繁地输出$ list和$ mainlist的内容。我尝试将代码设置为每次迭代通过循环输出一次。
此外,在输出HTML标签时,我通常会输出每个逻辑标签行,即在实际HTML文档中出现的情况。如果我必须查看源代码以确定输出是什么样的,那么这也增加了输出的可读性。