From: Aaron Schulz Date: Thu, 11 Dec 2008 14:35:33 +0000 (+0000) Subject: Add a script to filecache content pages on the wiki X-Git-Tag: 1.31.0-rc.0~44040 X-Git-Url: https://git.cyclocoop.org/%28%28?a=commitdiff_plain;h=197f6c5fc5a69df64989f9b3bb4c47c4eb10e456;p=lhc%2Fweb%2Fwiklou.git Add a script to filecache content pages on the wiki --- diff --git a/maintenance/rebuildFileCache.php b/maintenance/rebuildFileCache.php new file mode 100644 index 0000000000..7d405a0ad4 --- /dev/null +++ b/maintenance/rebuildFileCache.php @@ -0,0 +1,71 @@ + 0 ? $start : $dbr->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ ); +$end = $dbr->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ ); +if( !$start ) { + die("Nothing to do.\n"); +} + +$_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip'; // hack, no real client +OutputPage::setEncodings(); # Not really used yet + +$BATCH_SIZE = 100; +# Do remaining chunk +$end += $BATCH_SIZE - 1; +$blockStart = $start; +$blockEnd = $start + $BATCH_SIZE - 1; + +// Go through each page and save the output +while( $blockEnd <= $end ) { + // Get the pages + $res = $dbr->select( 'page', array('page_namespace','page_title','page_id'), + array('page_namespace' => $wgContentNamespaces, + "page_id BETWEEN $blockStart AND $blockEnd" ), + array('ORDER BY' => 'page_id ASC','USE INDEX' => 'PRIMARY') + ); + while( $row = $dbr->fetchObject( $res ) ) { + $wgTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title ); + if( null == $wgTitle ) continue; // broken title? + $wgArticle = new Article( $wgTitle ); + // If the article is cacheable, then load it + if( $wgArticle->isFileCacheable() ) { + $cache = new HTMLFileCache( $wgTitle ); + if( $cache->isFileCacheGood() ) { + echo "Page {$row->page_id} already cached\n"; + continue; // done already! + } + ob_start( array(&$cache, 'saveToFileCache' ) ); // save on ob_end_clean() + $wgUseFileCache = false; // hack, we don't want $wgArticle fiddling with filecache + $wgArticle->view(); + @$wgOut->output(); // header notices + $wgUseFileCache = true; + ob_end_clean(); // clear buffer + $wgOut = new OutputPage(); // empty out any output page garbage + echo "Cached page {$row->page_id}\n"; + } + } + $blockStart += $BATCH_SIZE - 1; + $blockEnd += $BATCH_SIZE - 1; + wfWaitForSlaves( 5 ); +} +echo "Done!\n"; + +// Remove these to be safe +if( isset($wgTitle) ) + unset($wgTitle); +if( isset($wgArticle) ) + unset($wgArticle);