我之前没有提供有关问题的良好信息。我的问题是,在蛋糕php中创建一个下拉树.Cake php抛出此错误。
Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 429982192 bytes) in /home/isteam/public_html/upms/app/controllers/tests_controller.php on line 85
我尝试通过php inin函数增加运行时限,但没有成功。
ini_set('memory_limit','2000M');
我的代码表结构就是这个
|id|parent_id|cat_name|
我的代码正在关注
function admin_takecat(){
$this->layout=false;
$this->render(false);
Configure::write('debug',2);
App::import('Model','Category');
$this->cats=new Category();
$firstlevel=$this->cats->find('list',array('fields'=>array('Category.id','Category.cat_name'),'conditions'=>array('Category.parent_id'=>0,'department_id'=>9)));
$dropbox='<select>';
foreach($firstlevel as $id=>$val){
$dropbox.='<option value='.$id.'>'.$val.'</option>';
$count=$this->cats->find('count',array('conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$id)));
if($count>0){
$dropbox=$this->_recursive($id,$dropbox,1);
}
}
$dropbox.='</select>';
echo $dropbox;
}
function _recursive($catid,$dropbox,$level){
App::import('Model','Category');
$this->cats=new Category();
$listcats=$this->cats->find('list',array('fields'=>array('Category.id','Category.cat_name'),'conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$catid)));
$mark='';
for($i=1;$i<=1;$i++){
$mark.='-';
}
foreach($listcats as $id=>$val){
$dropbox.='<option value='.$id.'>'.$mark.$val.'</option>';
$count=$this->cats->find('count',array('conditions'=>array('Category.parent_id'=>0,'Category.department_id'=>9,'Category.parent_id'=>$id)));
if($count>0){
$dropbox.=$this->_recursive($id,$dropbox,$level+1);
}
}
return $dropbox;
}
请建议我做什么......或者其他任何方式这样做..
答案 0 :(得分:0)
错误信息非常明确:您正在获取大量数据,因此应用程序内存不足。只是增加可用内存量是而不是一个修复它是一个非常草率的解决方案,将破坏下一个服务器上的应用程序与更严格配置的内存设置。
正如罗斯已建议检查TreeBehavior或修复您的代码,以便通过查找中关联的模型记录和字段limiting the recursive level返回那么多数据。
此外,您应该遵循CakePHP coding standards,因为您的代码非常糟糕且难以阅读。我不接受这个代码,不是开发人员而是客户端。
您应该访问数据through model associations,而不是使用loadModel()将每个模型加载到控制器中。
对于Dropbox,有HtmlHelper,具体为HtmlHelper :: input()和HtmlHelper :: select()。