zblogPHP出现Allowed memory size of xxx数据内存不足的解决方法

通常zblog由于他的轻巧,便携受到广大用户的喜爱,但是在使用中也会出现一些无法理解的错误,导致无法从根本上解决原因。

Allowed memory size of xxx数据内存不足

通常zblog由于他的轻巧,便携受到广大用户的喜爱,但是在使用中也会出现一些无法理解的错误,导致无法从根本上解决原因。

zblogPHP出现Allowed memory size of xxx数据内存不足的解决方法

当出现allowed memory size of xxxxxxx bytes这类错误时,往往不知道怎么办,下面给大家详细说明一下这个情况。

大部分出现这个情况是由于使用了zblog1.7新版本的缩略图代码导致,也可以理解为内存不足。

一般原因是由于带有自动生成缩略图功能的主题,因为第一次打开页面会批量生成此页面所有的缩略图,部分站点会出现PHP内存溢出错误,此错误多见于有大量文章的采集站点,因为突然需要处理很多图片,而很多图片的大小又超过1m以上,就会直接抱错。

报错解决方案:

1.文章内图片体积巨大,超过memory_limit限制。解决:压缩图片

2.含有大量的置顶文章,导致列表页一次性加载几百篇文章同时生成缩略图。解决:取消大量文章置顶,缩略图生成完后可以再打开

3.PHP设置的memory_limit太小,解决:修改PHP配置,在宝塔的php设置里面,修改脚本内存限制,将其添加到500或者更大。

zblogPHP出现Allowed memory size of xxx数据内存不足的解决方法

4.另一种可能有效的解决方案:在网站设置,页面设置中将:“列表页显示文章的数量” 调小,多翻几页等缩略图生成完毕后再改回来。

不过也发现了一个更加处理好的方法,代码由花师傅贡献,分享一下:

下面的例子是导出网站用户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; //终止,即便还有数据未取出,也不会再去取,也不会执行回调函数。如果继续执行,请不要添加此代码
});

看完文章,应该能够解决你的问题了吧。

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
技术代码技术分享

微信小程序里面文字怎么换行

2022-10-12 15:09:50

技术代码技术分享

php网站之第三方qq登陆开发流程

2022-10-12 15:17:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索