refreshlinks.inc

来自「php 开发的内容管理系统」· INC 代码 · 共 132 行

INC
132
字号
<?php/** * @todo document * @package MediaWiki * @subpackage Maintenance *//** */define( "REPORTING_INTERVAL", 100 );#define( "REPORTING_INTERVAL", 1 );function refreshLinks( $start, $newOnly = false, $maxLag = false, $end = 0 ) {	global $wgUser, $wgParser, $wgUseImageResize, $wgUseTidy;	$fname = 'refreshLinks';	$dbr =& wfGetDB( DB_SLAVE );	$start = intval( $start );	# Don't generate TeX PNGs (lack of a sensible current directory causes errors anyway)	$wgUser->setOption('math', MW_MATH_SOURCE);	# Don't generate extension images (e.g. Timeline)	$wgParser->mTagHooks = array();	# Don't generate thumbnail images	$wgUseImageResize = false;	$wgUseTidy = false;	if ( $newOnly ) {		print "Refreshing links from ";		$res = $dbr->select( 'page',			array( 'page_id' ),			array(				'page_is_new' => 1,				"page_id > $start" ),			$fname		);		$num = $dbr->numRows( $res );		print "$num new articles...\n";		$i = 0;		while ( $row = $dbr->fetchObject( $res ) ) {			if ( !( ++$i % REPORTING_INTERVAL ) ) {				print "$i\n";				wfWaitForSlaves( $maxLag );			}			fixLinksFromArticle( $row->page_id );		}	} else {		print "Refreshing link table.\n";		if ( !$end ) {			$end = $dbr->selectField( 'page', 'max(page_id)', false );		}		print("Starting from page_id $start of $end.\n");		for ($id = $start; $id <= $end; $id++) {			if ( !($id % REPORTING_INTERVAL) ) {				print "$id\n";				wfWaitForSlaves( $maxLag );			}			fixLinksFromArticle( $id );		}	}}function fixLinksFromArticle( $id ) {	global $wgTitle, $wgParser;		$wgTitle = Title::newFromID( $id );	$dbw =& wfGetDB( DB_MASTER );	$linkCache =& LinkCache::singleton();	$linkCache->clear();		if ( is_null( $wgTitle ) ) {		return;	}	$dbw->begin();	$revision = Revision::newFromTitle( $wgTitle );	if ( !$revision ) {		return;	}	$options = new ParserOptions;	$parserOutput = $wgParser->parse( $revision->getText(), $wgTitle, $options, true, true, $revision->getId() );	$update = new LinksUpdate( $wgTitle, $parserOutput, false );	$update->doUpdate();	$dbw->immediateCommit();}function deleteLinksFromNonexistent( $maxLag = 0 ) {	$fname = 'deleteLinksFromNonexistent';	wfWaitForSlaves( $maxLag );	$dbw =& wfGetDB( DB_WRITE );	$linksTables = array(		'pagelinks' => 'pl_from',		'imagelinks' => 'il_from',		'categorylinks' => 'cl_from',		'templatelinks' => 'tl_from',		'externallinks' => 'el_from',	);	$page = $dbw->tableName( 'page' );	foreach ( $linksTables as $table => $field ) {		if ( !$dbw->ping() ) {			print "DB disconnected, reconnecting...";			while ( !$dbw->ping() ) {				print ".";				sleep(10);			}			print "\n";		}		$pTable = $dbw->tableName( $table );		$sql = "DELETE $pTable FROM $pTable LEFT JOIN $page ON page_id=$field WHERE page_id IS NULL";		print "Deleting $table from non-existent articles...";		$dbw->query( $sql, $fname );		print " fixed " .$dbw->affectedRows() . " row(s)\n";	}}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?