Reduce export mem usage. Props tellyworth. fixes #4589

git-svn-id: http://svn.automattic.com/wordpress/trunk@5785 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2007-07-06 20:57:28 +00:00
parent fd4c86f9a4
commit 4ba5f806d7
1 changed files with 11 additions and 4 deletions

View File

@ -45,7 +45,7 @@ foreach ( $authors as $id ) {
<?php <?php
function export_wp() { function export_wp() {
global $wpdb, $posts, $post; global $wpdb, $post_ids, $post;
$filename = 'wordpress.' . date('Y-m-d') . '.xml'; $filename = 'wordpress.' . date('Y-m-d') . '.xml';
@ -59,7 +59,8 @@ if ( isset( $_GET['author'] ) && $_GET['author'] != 'all' ) {
$where = " WHERE post_author = '$author_id' "; $where = " WHERE post_author = '$author_id' ";
} }
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); // grab a snapshot of post IDs, just in case it changes during the export
$post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts $where ORDER BY post_date_gmt ASC");
$categories = (array) get_categories('get=all'); $categories = (array) get_categories('get=all');
@ -166,7 +167,13 @@ print '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?' . ">\n";
<wp:category><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->name : ''; ?></wp:category_parent><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category> <wp:category><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->name : ''; ?></wp:category_parent><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category>
<?php endforeach; endif; ?> <?php endforeach; endif; ?>
<?php do_action('rss2_head'); ?> <?php do_action('rss2_head'); ?>
<?php if ($posts) { foreach ($posts as $post) { start_wp(); ?> <?php if ($post_ids) {
// fetch 20 posts at a time rather than loading the entire table into memory
while ( $next_posts = array_splice($post_ids, 0, 20) ) {
$where = "WHERE ID IN (".join(',', $next_posts).")";
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC");
foreach ($posts as $post) {
start_wp(); ?>
<item> <item>
<title><?php the_title_rss() ?></title> <title><?php the_title_rss() ?></title>
<link><?php permalink_single_rss() ?></link> <link><?php permalink_single_rss() ?></link>
@ -216,7 +223,7 @@ if ( $comments ) { foreach ( $comments as $c ) { ?>
</wp:comment> </wp:comment>
<?php } } ?> <?php } } ?>
</item> </item>
<?php } } ?> <?php } } } ?>
</channel> </channel>
</rss> </rss>
<?php <?php