'envCheckPCRE',
'envCheckMemory',
'envCheckCache',
+ 'envCheckModSecurity',
'envCheckDiff3',
'envCheckGraphics',
'envCheckServer',
$this->settings[$var] = $GLOBALS[$var];
}
+ $compiledDBs = array();
foreach ( self::getDBTypes() as $type ) {
$installer = $this->getDBInstaller( $type );
if ( !$installer->isCompiled() ) {
continue;
}
+ $compiledDBs[] = $type;
$defaults = $installer->getGlobalDefaults();
}
}
}
+ $this->setVar( '_CompiledDBs', $compiledDBs );
$this->parserTitle = Title::newFromText( 'Installer' );
$this->parserOptions = new ParserOptions; // language will be wrong :(
protected function envCheckDB() {
global $wgLang;
- $compiledDBs = array();
$allNames = array();
foreach ( self::getDBTypes() as $name ) {
- if ( $this->getDBInstaller( $name )->isCompiled() ) {
- $compiledDBs[] = $name;
- }
- $allNames[] = wfMsg( 'config-type-' . $name );
+ $allNames[] = wfMsg( "config-type-$name" );
}
- $this->setVar( '_CompiledDBs', $compiledDBs );
-
- if ( !$compiledDBs ) {
+ if ( !$this->getVar( '_CompiledDBs' ) ) {
$this->showError( 'config-no-db', $wgLang->commaList( $allNames ) );
// @todo FIXME: This only works for the web installer!
return false;
* Environment check for register_globals.
*/
protected function envCheckRegisterGlobals() {
- if( wfIniGetBool( "magic_quotes_runtime" ) ) {
+ if( wfIniGetBool( 'register_globals' ) ) {
$this->showMessage( 'config-register-globals' );
}
}
$caches = array();
foreach ( $this->objectCaches as $name => $function ) {
if ( function_exists( $function ) ) {
+ if ( $name == 'xcache' && !wfIniGetBool( 'xcache.var_size' ) ) {
+ continue;
+ }
$caches[$name] = true;
}
}
$this->setVar( '_Caches', $caches );
}
+ /**
+ * Scare user to death if they have mod_security
+ */
+ protected function envCheckModSecurity() {
+ if ( self::apacheModulePresent( 'mod_security' ) ) {
+ $this->showMessage( 'config-mod-security' );
+ }
+ }
+
/**
* Search for GNU diff3.
*/
* Environment check for the server hostname.
*/
protected function envCheckServer() {
- if ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] == 'on') {
- $proto = 'https';
- $stdPort = 443;
+ if ( $this->getVar( 'wgServer' ) ) {
+ // wgServer was pre-defined, perhaps by the cli installer
+ $server = $this->getVar( 'wgServer' );
} else {
- $proto = 'http';
- $stdPort = 80;
- }
-
- $varNames = array( 'HTTP_HOST', 'SERVER_NAME', 'HOSTNAME', 'SERVER_ADDR' );
- $host = 'localhost';
- $port = $stdPort;
- foreach ( $varNames as $varName ) {
- if ( !isset( $_SERVER[$varName] ) ) {
- continue;
- }
- $parts = IP::splitHostAndPort( $_SERVER[$varName] );
- if ( !$parts ) {
- // Invalid, do not use
- continue;
- }
- $host = $parts[0];
- if ( $parts[1] === false ) {
- if ( isset( $_SERVER['SERVER_PORT'] ) ) {
- $port = $_SERVER['SERVER_PORT'];
- } // else leave it as $stdPort
- } else {
- $port = $parts[1];
- }
- break;
+ $server = WebRequest::detectServer();
}
-
- $server = $proto . '://' . IP::combineHostAndPort( $host, $port, $stdPort );
$this->showMessage( 'config-using-server', $server );
$this->setVar( 'wgServer', $server );
}
protected function envCheckPath() {
global $IP;
$IP = dirname( dirname( dirname( __FILE__ ) ) );
-
$this->setVar( 'IP', $IP );
- // PHP_SELF isn't available sometimes, such as when PHP is CGI but
- // cgi.fix_pathinfo is disabled. In that case, fall back to SCRIPT_NAME
- // to get the path to the current script... hopefully it's reliable. SIGH
- if ( !empty( $_SERVER['PHP_SELF'] ) ) {
- $path = $_SERVER['PHP_SELF'];
- } elseif ( !empty( $_SERVER['SCRIPT_NAME'] ) ) {
- $path = $_SERVER['SCRIPT_NAME'];
- } elseif ( $this->getVar( 'wgScriptPath' ) ) {
- // Some kind soul has set it for us already (e.g. debconf)
- return true;
- } else {
- $this->showError( 'config-no-uri' );
- return false;
- }
-
- $uri = preg_replace( '{^(.*)/(mw-)?config.*$}', '$1', $path );
- $this->setVar( 'wgScriptPath', $uri );
+ $this->showMessage( 'config-using-uri', $this->getVar( 'wgServer' ), $this->getVar( 'wgScriptPath' ) );
+ return true;
}
/**
protected function envCheckSuhosinMaxValueLength() {
$maxValueLength = ini_get( 'suhosin.get.max_value_length' );
if ( $maxValueLength > 0 ) {
- $this->showMessage( 'config-suhosin-max-value-length', $maxValueLength );
+ if( $maxValueLength < 1024 ) {
+ # Only warn if the value is below the sane 1024
+ $this->showMessage( 'config-suhosin-max-value-length', $maxValueLength );
+ }
} else {
$maxValueLength = -1;
}
$c = hexdec($c);
if ($c <= 0x7F) {
return chr($c);
- } else if ($c <= 0x7FF) {
+ } elseif ($c <= 0x7FF) {
return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F);
- } else if ($c <= 0xFFFF) {
+ } elseif ($c <= 0xFFFF) {
return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F)
. chr(0x80 | $c & 0x3F);
- } else if ($c <= 0x10FFFF) {
+ } elseif ($c <= 0x10FFFF) {
return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F)
. chr(0x80 | $c >> 6 & 0x3F)
. chr(0x80 | $c & 0x3F);
*/
if( $utf8 ) {
$useNormalizer = 'utf8';
- $utf8 = utf8_normalize( $not_normal_c, UNORM_NFC );
+ $utf8 = utf8_normalize( $not_normal_c, UtfNormal::UNORM_NFC );
if ( $utf8 !== $normal_c ) $needsUpdate = true;
}
if( $intl ) {
/**
* Same as locateExecutable(), but checks in getPossibleBinPaths() by default
* @see locateExecutable()
+ * @param $names
+ * @param $versionInfo bool
+ * @return bool|string
*/
public static function locateExecutableInDefaultPaths( $names, $versionInfo = false ) {
foreach( self::getPossibleBinPaths() as $path ) {
return false;
}
+ /**
+ * Checks for presence of an Apache module. Works only if PHP is running as an Apache module, too.
+ *
+ * @param $moduleName String: Name of module to check.
+ * @return bool
+ */
+ public static function apacheModulePresent( $moduleName ) {
+ if ( function_exists( 'apache_get_modules' ) && in_array( $moduleName, apache_get_modules() ) ) {
+ return true;
+ }
+ // try it the hard way
+ ob_start();
+ phpinfo( INFO_MODULES );
+ $info = ob_get_clean();
+ return strpos( $info, $moduleName ) !== false;
+ }
+
/**
* ParserOptions are constructed before we determined the language, so fix it
*
*/
public function setParserLanguage( $lang ) {
$this->parserOptions->setTargetLanguage( $lang );
- $this->parserOptions->setUserLang( $lang->getCode() );
+ $this->parserOptions->setUserLang( $lang );
}
/**
* Overridden by WebInstaller to provide lastPage parameters.
+ * @param $page stirng
+ * @return string
*/
protected function getDocUrl( $page ) {
return "{$_SERVER['PHP_SELF']}?page=" . urlencode( $page );
require( "$IP/includes/DefaultSettings.php" );
foreach( $exts as $e ) {
- require_once( "$IP/extensions/$e/$e.php" );
+ require_once( "$IP/extensions/$e/$e.php" );
}
$hooksWeWant = isset( $wgHooks['LoadExtensionSchemaUpdates'] ) ?
$params['language'] = $myLang;
}
- $res = MWHttpRequest::factory( $this->mediaWikiAnnounceUrl,
- array( 'method' => 'POST', 'postData' => $params ) )->execute();
- if( !$res->isOK() ) {
- $s->warning( 'config-install-subscribe-fail', $res->getMessage() );
+ if( MWHttpRequest::canMakeRequests() ) {
+ $res = MWHttpRequest::factory( $this->mediaWikiAnnounceUrl,
+ array( 'method' => 'POST', 'postData' => $params ) )->execute();
+ if( !$res->isOK() ) {
+ $s->warning( 'config-install-subscribe-fail', $res->getMessage() );
+ }
+ } else {
+ $s->warning( 'config-install-subscribe-notpossible' );
}
}
/**
* Insert Main Page with default content.
*
+ * @param $installer DatabaseInstaller
* @return Status
*/
protected function createMainpage( DatabaseInstaller $installer ) {
public function addInstallStep( $callback, $findStep = 'BEGINNING' ) {
$this->extraInstallSteps[$findStep][] = $callback;
}
+
+ /**
+ * Disable the time limit for execution.
+ * Some long-running pages (Install, Upgrade) will want to do this
+ */
+ protected function disableTimeLimit() {
+ wfSuppressWarnings();
+ set_time_limit( 0 );
+ wfRestoreWarnings();
+ }
}