zblog调取大量数据内存不溢出的方法
分类:zblog教程
96
想必各位开发者都遇到过这个问题,一次性调用大量的数据就会内存溢出,常见的应该是sitemap插件,当网站有大量文章的时候,生成sitemap时就会出现上图错误。

为了方便大家,本站封装好了一个函数,调用全部数据并不会出现内存溢出的情况
下面的例子是导出网站用户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; //终止,即便还有数据未取出,也不会再去取,也不会执行回调函数。如果继续执行,请不要添加此代码});最新发布
-
zblog响应式自媒体博客主题63号
2026-04-08 -
zblog响应式资讯门户主题62号
2026-04-05 -
zblog响应式文章自媒体资讯主题61号
2026-04-01 -
zblog响应式自媒体资讯主题60号
2026-03-30 -
zblog响应式门户文章资讯主题59号
2026-03-29
热门文章
-
ZBLOG精品手赚APP应用下载主题19号
1225 -
zblog响应式机器设备企业主题10号
1220 -
zblog响应式生活分类信息主题2号
939 -
zblog响应式机械企业外贸主题6号
321 -
简洁大气zblog响应式文章主题52号
307