zblogPHP出现Allowed memory size of xxx数据内存不足的解决方法
通常zblog由于他的轻巧,便携受到广大用户的喜爱,但是在使用中也会出现一些无法理解的错误,导致无法从根本上解决原因。当出现allowed memory size of xxxxxxx bytes这类错误时,往往不知道怎么办,下面给大家详细说明一下这个情况。
大部分出现这个情况是由于使用了zblog1.7新版本的缩略图代码导致,也可以理解为内存不足。
一般原因是由于你设置了当前页面现在20篇,30篇文章时(默认显示10篇),突然需要处理很多图片,而很多图片的大小又超过1m以上,就会直接抱错。
由此,大部分的做法都是修改显示文章数量,或者在宝塔的php设置里面,修改脚步内存限制,将其添加到500或者更大不过发现了一个更加处理好的方法,代码由花师傅贡献,分享一下:
下面的例子是导出网站用户1的所有文章名,每次取出100个文章
set_time_limit(0);
//封装好的函数
function GetAllData($method, $w, $o, $limit, $callback){
global $zbp;
$page = 1;
do{
$p = new Pagebar('', false);
$p->PageNow = $page++;
$p->PageCount = $limit;
$array = $zbp->$method(
'*',
$w,
$o,
array(($p->PageNow - 1) * $p->PageCount, $p->PageCount),
array('pagebar' => $p),
false
);
$complete = !$limit || $limit * $p->PageNow >= $p->Count;
$res = $callback($array, $p, $complete);
if ($res === false){
break;
}
$zbp->posts = []; //清空zb内存中的文章缓存,防止内存溢出
}while(!$complete);
}
//例:导出所有用户1的文章名
header("Content-Disposition:attachment;filename=posts.txt");
//调用本站封装好的函数
GetAllData('GetArticleList', array(array('=','log_AuthorID',1)), array('log_PostTime' => 'DESC'), 100, function($articles, $pagebar, $complete){
// $pagebar pagebar分页对象
if ($complete){
//已取出全部
}else{
//还有数据未取出
}
//执行你的代码
foreach ($articles as $article) {
echo iconv("UTF-8","GB2312//IGNORE", $article->Title."\n");
}
ob_flush();
flush();
//结束你自己的代码
//return false; //终止,即便还有数据未取出,也不会再去取,也不会执行回调函数。如果继续执行,请不要添加此代码
});看完文章,应该能够解决你的问题了吧。点个赞吧~


