首页 未命名内容详情

zblog调取大量数据内存不溢出的方法

2026-01-10 2 897698882
zblog调取大量数据内存不溢出的方法

站点名称:zblog调取大量数据内存不溢出的方法

所属分类:未命名

官方网址:

SEO查询: 爱站网 站长工具

进入网站

站点介绍

想必各位开发者都遇到过这个问题,一次性调用大量的数据就会内存溢出,常见的应该是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; //终止,即便还有数据未取出,也不会再去取,也不会执行回调函数。如果继续执行,请不要添加此代码});