78模板网分享cms建站教程,提供网站模板、网站插件、办公模板等模板教程免费学习,找模板教程就上78模板网!

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

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

});

本文链接:http://78moban.cn/post/7883.html

版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!

联系技术
文章删除 友链合作 技术交流群
1050177837
公众号
公众号
公众号
返回顶部