http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89582
Revision: 89582
Author: pdhanda
Date: 2011-06-06 17:02:56 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
First version of wrapper that can handle multiple versions. Working on
localhost and prototype.wikimedia.org
Modified Paths:
--------------
trunk/tools/mwmultiversion/live-1.5/MWVersion.php
Modified: trunk/tools/mwmultiversion/live-1.5/MWVersion.php
===================================================================
--- trunk/tools/mwmultiversion/live-1.5/MWVersion.php 2011-06-06 16:45:40 UTC
(rev 89581)
+++ trunk/tools/mwmultiversion/live-1.5/MWVersion.php 2011-06-06 17:02:56 UTC
(rev 89582)
@@ -1,64 +1,93 @@
<?php
-function host2db( $host ) {
- if( $host == 'wikimediafoundation.org' || $host ==
'www.wikimediafoundation.org' )
- return 'foundationwiki';
- if ( $host == 'wikisource.org' || $host == 'www.wikisource.org' )
- return 'sourceswiki';
- if ( $host == 'mediawiki.org' || $host == 'www.mediawiki.org' )
- return 'mediawikiwiki';
- if( preg_match( '/^(.*)\.(.*)\.org$/', $host, $matches ) ) {
- list( $whole, $lang, $site ) = $matches;
- $lang = str_replace( '-', '_', $lang );
- switch( $site ) {
- case 'wikipedia':
- case 'wikimedia':
- return $lang . 'wiki';
- default:
- return $lang . $site;
- }
+function host2db() {
+ if ( $_SERVER['SERVER_NAME'] == 'localhost') {
+ $dbname = getenv( 'MW_DBNAME' );
+ if ( !isset( $dbname ) ) {
+ die( 'Unable to determine MW_DBNAME on
localhost' );
+ }
+ return $dbname;
}
- return null;
-}
+ $secure = getenv( 'MW_SECURE_HOST' );
+ if ( (@$_SERVER['SCRIPT_NAME']) == '/w/thumb.php' &&
(@$_SERVER['SERVER_NAME']) == 'upload.wikimedia.org' ) {
+ $pathBits = explode( '/', $_SERVER['PATH_INFO'] );
+ $site = $pathBits[1];
+ $lang = $pathBits[2];
+ } elseif (php_sapi_name() == 'cgi-fcgi') {
+ if (!preg_match('/^([^.]+).([^.]+).*$/',
$_SERVER['SERVER_NAME'], $m))
+ die("invalid hostname");
-function wfIsConverted( $host ) {
- return true;
+ $lang = $m[1];
+ $site = $m[2];
- /*
- $db = host2db( $host );
+ if (in_array($lang, array("commons", "grants", "sources",
"wikimania", "wikimania2006", "foundation", "meta")))
+ $site = "wikipedia";
+ } elseif( $secure ) {
+ if (!preg_match('/^([^.]+).([^.]+).*$/', $secure, $m))
+ die("invalid hostname");
- #$all = array_map( 'trim', file( '/usr/local/apache/common/all.dblist'
) );
- #$started = array_map( 'trim', file(
'/home/wikipedia/logs/conversion15start' ) );
-
- $converted = array_map( 'trim', file(
'/usr/local/apache/common/1.17.dblist' ) );
- #$converted = array( 'test2wiki' );
- return in_array( $db, $converted );
- */
+ $lang = $m[1];
+ $site = $m[2];
+
+ if (in_array($lang, array("commons", "grants", "sources",
"wikimania", "wikimania2006", "foundation", "meta")))
+ $site = "wikipedia";
+ } else {
+ if ( !isset( $site ) ) {
+ $site = "wikipedia";
+ if ( !isset( $lang ) ) {
+ $server = $_SERVER['SERVER_NAME'];
+ $docRoot = $_SERVER['DOCUMENT_ROOT'];
+
+ if ( preg_match(
'/^(?:\/usr\/local\/apache\/|\/home\/wikipedia\/)(?:htdocs|common\/docroot)\/([a-z]+)\.org/',
$docRoot, $matches ) ) {
+ $site = $matches[1];
+ if ( preg_match( '/^(.*)\.' .
preg_quote( $site ) . '\.org$/', $server, $matches ) ) {
+ $lang = $matches[1];
+ // For some special subdomains,
like pa.us
+ $lang = str_replace( '.', '-',
$lang );
+ } else if ( preg_match(
'/^(.*)\.prototype\.wikimedia\.org$/', $server, $matches ) ) {
+ $lang = $matches[1];
+ } else {
+ die( "Invalid host name
($server), can't determine language" );
+ }
+ } elseif ( preg_match(
"/^\/usr\/local\/apache\/(?:htdocs|common\/docroot)\/([a-z0-9\-_]*)$/",
$docRoot, $matches ) ) {
+ $site = "wikipedia";
+ $lang = $matches[1];
+ } else {
+ die( "Invalid host name (docroot=" .
$_SERVER['DOCUMENT_ROOT'] . "), can't determine language" );
+ }
+ }
+ }
+ }
+ if ( $site == "wikipedia" ) {
+ $dbSuffix = "wiki";
+ } else {
+ $dbSuffix = $site;
+ }
+ $dbname = str_replace( "-", "_", $lang . $dbSuffix );
+ return $dbname;
}
function getMediaWiki( $file ) {
- $secure = getenv( 'MW_SECURE_HOST' );
- $host = $secure ? $secure : $_SERVER['HTTP_HOST'];
- $new = wfIsConverted( $host );
- $version = $new ? 'php-1.17' : 'wmf-deployment';
- if ( $new ) {
- define( 'ONE_SEVENTEEN', 1 );
+ $dbname = host2db( );
+
+ $db = dba_open( '/usr/local/apache/common/wikiversions.db', 'r', 'cdb'
);
+ if ( $db ) {
+ $version = dba_fetch( $dbname, $db );
+ } else {
+ //don't error for now
+ //trigger_error( "Unable to open
/usr/local/apache/common/wikiversions.db. Assuming php-1.17", E_USER_ERROR );
+ $version = 'php-1.17';
}
if ( $host == 'test.wikipedia.org' && !$secure &&
- !preg_match( '!thumb\.php!', $_SERVER['REQUEST_URI'] )
) {
+ !preg_match( '!thumb\.php!', $_SERVER['REQUEST_URI'] ) ) {
define( 'TESTWIKI', 1 );
// As horrible hack for NFS-less iamge scalers, use regular
docroot for thumbs?
-# $IP = '/home/wikipedia/common/php-1.5';
+ # $IP = '/home/wikipedia/common/php-1.5';
$IP = "/home/wikipedia/common/$version";
} else {
$IP = "/usr/local/apache/common/$version";
}
- #} elseif( $host == 'www.mediawiki.org' || $host ==
'meta.wikimedia.org' ) {
- # $IP = '/usr/local/apache/common/wmf-deployment';
- #} else {
- # $IP = '/usr/local/apache/common/php-1.5';
- #}
chdir( $IP );
putenv( "MW_INSTALL_PATH=$IP" );
@@ -66,3 +95,4 @@
}
?>
+
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs