GET_POSTS()函数的内存问题

时间:2015-06-17 作者:Janith Chinthana

我在现有代码中遇到了一个致命错误,当我深入调试时,我发现它来自下面的代码行。

get_posts( array("posts_per_page"=>-1) );
有人能解释为什么会这样以及如何克服它吗?

错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /var/www/web0/html/blog/wp-includes/wp-db.php on line 2204

2 个回复
SO网友:Bruno Monteiro

运行无限制查询很可能是内存问题的原因。因此,您可能需要更改查询。

如果仍然需要这样做,可以使用fields 选项,它只返回post ID,并将节省大量内存使用-示例如下:

$your_query = get_posts(
    array(
        \'posts_per_page\' => -1,
        \'post_type\'      => \'post\',
        \'fields\'         => \'ids\',
    )
);

SO网友:Trevor Mills

如果您的情况需要获取所有帖子,请尝试添加\'cache_results\' => false 到参数数组。所以,这个。

$your_query = get_posts(
    array(
        \'posts_per_page\' => -1,
        \'post_type\'      => \'post\',
        \'cache_results\'  => false,
    )
);
这说明WP_Query 根据中的这一行,不缓存结果wp-includes/class-wp-query.php:

if ( $q[\'cache_results\'] )
    update_post_caches($this->posts, $post_type, $q[\'update_post_term_cache\'], $q[\'update_post_meta_cache\']);
虽然如果您在同一个请求中多次查询同一个帖子,这种缓存对速度有很大帮助,但它占用了大量内存,很可能是内存错误的根源。

结束

相关推荐