00001 <?php
00010 require_once( "commandLine.inc" );
00011 if( !$wgUseFileCache ) {
00012 echo "Nothing to do -- \$wgUseFileCache is disabled.\n";
00013 exit(0);
00014 }
00015 $wgDisableCounters = false;
00016
00017 $start = isset($args[0]) ? intval($args[0]) : 0;
00018 $overwrite = isset( $args[1] ) && $args[1] === 'overwrite';
00019 echo "Building content page file cache from page {$start}!\n";
00020 echo "Format: <start> [overwrite]\n";
00021
00022 $dbr = wfGetDB( DB_SLAVE );
00023 $start = $start > 0 ? $start : $dbr->selectField( 'page', 'MIN(page_id)', false, __FUNCTION__ );
00024 $end = $dbr->selectField( 'page', 'MAX(page_id)', false, __FUNCTION__ );
00025 if( !$start ) {
00026 die("Nothing to do.\n");
00027 }
00028
00029 $_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip';
00030 OutputPage::setEncodings(); # Not really used yet
00031
00032 $BATCH_SIZE = 100;
00033 # Do remaining chunk
00034 $end += $BATCH_SIZE - 1;
00035 $blockStart = $start;
00036 $blockEnd = $start + $BATCH_SIZE - 1;
00037
00038 $dbw = wfGetDB( DB_MASTER );
00039
00040 while( $blockEnd <= $end ) {
00041
00042 $res = $dbr->select( 'page', array('page_namespace','page_title','page_id'),
00043 array('page_namespace' => $wgContentNamespaces,
00044 "page_id BETWEEN $blockStart AND $blockEnd" ),
00045 array('ORDER BY' => 'page_id ASC','USE INDEX' => 'PRIMARY')
00046 );
00047 while( $row = $dbr->fetchObject( $res ) ) {
00048 $rebuilt = false;
00049 $wgTitle = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
00050 if( null == $wgTitle ) {
00051 echo "Page {$row->page_id} bad title\n";
00052 continue;
00053 }
00054 $wgArticle = new Article( $wgTitle );
00055
00056 if( $wgArticle->isFileCacheable() ) {
00057 $cache = new HTMLFileCache( $wgTitle );
00058 if( $cache->isFileCacheGood() ) {
00059 if( $overwrite ) {
00060 $rebuilt = true;
00061 } else {
00062 echo "Page {$row->page_id} already cached\n";
00063 continue;
00064 }
00065 }
00066 ob_start( array(&$cache, 'saveToFileCache' ) );
00067 $wgUseFileCache = false;
00068 $wgArticle->view();
00069 @$wgOut->output();
00070 $wgUseFileCache = true;
00071 ob_end_clean();
00072 $wgOut = new OutputPage();
00073 if( $rebuilt )
00074 echo "Re-cached page {$row->page_id}\n";
00075 else
00076 echo "Cached page {$row->page_id}\n";
00077 } else {
00078 echo "Page {$row->page_id} not cacheable\n";
00079 }
00080 $dbw->commit();
00081 }
00082 $blockStart += $BATCH_SIZE;
00083 $blockEnd += $BATCH_SIZE;
00084 wfWaitForSlaves( 5 );
00085 }
00086 echo "Done!\n";
00087
00088
00089 if( isset($wgTitle) )
00090 unset($wgTitle);
00091 if( isset($wgArticle) )
00092 unset($wgArticle);