summaryrefslogtreecommitdiff
path: root/config/index.php
diff options
context:
space:
mode:
Diffstat (limited to 'config/index.php')
-rw-r--r--config/index.php169
1 files changed, 111 insertions, 58 deletions
diff --git a/config/index.php b/config/index.php
index 69394e69..d036e8c8 100644
--- a/config/index.php
+++ b/config/index.php
@@ -226,6 +226,26 @@ class ConfigData {
function getSitename() { return $this->getEncoded( $this->Sitename ); }
function getSysopName() { return $this->getEncoded( $this->SysopName ); }
function getSysopPass() { return $this->getEncoded( $this->SysopPass ); }
+
+ function setSchema( $schema ) {
+ $this->DBschema = $schema;
+ switch ( $this->DBschema ) {
+ case 'mysql5':
+ $this->DBTableOptions = 'ENGINE=InnoDB, DEFAULT CHARSET=utf8';
+ $this->DBmysql5 = 'true';
+ break;
+ case 'mysql5-binary':
+ $this->DBTableOptions = 'ENGINE=InnoDB, DEFAULT CHARSET=binary';
+ $this->DBmysql5 = 'true';
+ break;
+ default:
+ $this->DBTableOptions = 'TYPE=InnoDB';
+ $this->DBmysql5 = 'false';
+ }
+ # Set the global for use during install
+ global $wgDBTableOptions;
+ $wgDBTableOptions = $this->DBTableOptions;
+ }
}
?>
@@ -245,7 +265,7 @@ class ConfigData {
<?php
$endl = "
";
-$wgNoOutputBuffer = true;
+define( 'MW_NO_OUTPUT_BUFFER', 1 );
$conf = new ConfigData;
install_version_checks();
@@ -326,6 +346,15 @@ if( ini_get( "mbstring.func_overload" ) ) {
<?php
}
+if( ini_get( "zend.ze1_compatibility_mode" ) ) {
+ $fatal = true;
+ ?><li class="error"><strong>Fatal: <a href="http://www.php.net/manual/en/ini.core.php">zend.ze1_compatibility_mode</a> is active!</strong>
+ This option causes horrible bugs with MediaWiki; you cannot install or use
+ MediaWiki unless this option is disabled.
+ <?php
+}
+
+
if( $fatal ) {
dieout( "</ul><p>Cannot install MediaWiki.</p>" );
}
@@ -360,20 +389,42 @@ if( $conf->xml ) {
If you're running Mandrake, install the php-xml package." );
}
-# Crude check for session support
+# Check for session support
if( !function_exists( 'session_name' ) )
dieout( "PHP's session module is missing. MediaWiki requires session support in order to function." );
-# Likewise for PCRE
+# session.save_path doesn't *have* to be set, but if it is, and it's
+# not valid/writable/etc. then it can cause problems
+$sessionSavePath = ini_get( 'session.save_path' );
+# Warn the user if it's not set, but let them proceed
+if( !$sessionSavePath ) {
+ print "<li><strong>Warning:</strong> A value for <tt>session.save_path</tt>
+ has not been set in PHP.ini. If the default value causes problems with
+ saving session data, set it to a valid path which is read/write/execute
+ for the user your web server is running under.</li>";
+} elseif ( is_dir( $sessionSavePath ) && is_writable( $sessionSavePath ) ) {
+ # All good? Let the user know
+ print "<li>Session save path appears to be valid.</li>";
+} else {
+ # Something not right? Halt the installation so the user can fix it up
+ dieout( "Your session save path appears to be invalid or is not writable.
+ PHP needs to be able to save data to this location in order for correct
+ session operation. Please check that <tt>session.save_path</tt> in
+ <tt>PHP.ini</tt> points to a valid path, and is read/write/execute for
+ the user your web server is running under." );
+}
+
+# Check for PCRE support
if( !function_exists( 'preg_match' ) )
- dieout( "The PCRE regular expression functions are missing. MediaWiki requires these in order to function." );
+ dieout( "The PCRE support module appears to be missing. MediaWiki requires the
+ Perl-compatible regular expression functions." );
$memlimit = ini_get( "memory_limit" );
$conf->raiseMemory = false;
if( empty( $memlimit ) || $memlimit == -1 ) {
print "<li>PHP is configured with no <tt>memory_limit</tt>.</li>\n";
} else {
- print "<li>PHP's <tt>memory_limit</tt> is " . htmlspecialchars( $memlimit ) . ". <strong>If this is too low, installation may fail!</strong> ";
+ print "<li>PHP's <tt>memory_limit</tt> is " . htmlspecialchars( $memlimit ) . ". ";
$n = intval( $memlimit );
if( preg_match( '/^([0-9]+)[Mm]$/', trim( $memlimit ), $m ) ) {
$n = intval( $m[1] * (1024*1024) );
@@ -381,7 +432,7 @@ if( empty( $memlimit ) || $memlimit == -1 ) {
if( $n < 20*1024*1024 ) {
print "Attempting to raise limit to 20M... ";
if( false === ini_set( "memory_limit", "20M" ) ) {
- print "failed.";
+ print "failed.<br /><b>" . htmlspecialchars( $memlimit ) . " seems too low, installation may fail!</b>";
} else {
$conf->raiseMemory = true;
print "ok.";
@@ -390,13 +441,6 @@ if( empty( $memlimit ) || $memlimit == -1 ) {
print "</li>\n";
}
-$conf->zlib = function_exists( "gzencode" );
-if( $conf->zlib ) {
- print "<li>Have zlib support; enabling output compression.</li>\n";
-} else {
- print "<li>No zlib support.</li>\n";
-}
-
$conf->turck = function_exists( 'mmcache_get' );
if ( $conf->turck ) {
print "<li><a href=\"http://turck-mmcache.sourceforge.net/\">Turck MMCache</a> installed</li>\n";
@@ -415,7 +459,7 @@ if ( $conf->eaccel ) {
if( !$conf->turck && !$conf->eaccel && !$conf->apc ) {
echo( '<li>Couldn\'t find <a href="http://turck-mmcache.sourceforge.net">Turck MMCache</a>,
- <a href="http://eaccelerator.sourceforge.net">eAccelerator</a> or
+ <a href="http://eaccelerator.sourceforge.net">eAccelerator</a>, or
<a href="http://www.php.net/apc">APC</a>. Object caching functions cannot be used.</li>' );
}
@@ -468,8 +512,6 @@ if( $conf->HaveGD ) {
}
}
-$conf->UseImageResize = $conf->HaveGD || $conf->ImageMagick;
-
$conf->IP = dirname( dirname( __FILE__ ) );
print "<li>Installation directory: <tt>" . htmlspecialchars( $conf->IP ) . "</tt></li>\n";
@@ -509,10 +551,7 @@ print "<li style='font-weight:bold;color:green;font-size:110%'>Environment check
## MySQL specific:
$conf->DBprefix = importPost( "DBprefix" );
- $conf->DBschema = importPost( "DBschema", "mysql4" );
- $conf->DBmysql5 = ($conf->DBschema == "mysql5" ||
- $conf->DBschema == "mysql5-binary")
- ? "true" : "false";
+ $conf->setSchema( importPost( "DBschema", "mysql4" ) );
$conf->LanguageCode = importPost( "LanguageCode", "en" );
## Postgres specific:
@@ -529,7 +568,10 @@ if( $conf->Sitename == "" || $conf->Sitename == "MediaWiki" || $conf->Sitename =
if( $conf->DBuser == "" ) {
$errs["DBuser"] = "Must not be blank";
}
-if( $conf->DBpassword == "" ) {
+if( ($conf->DBtype == 'mysql') && (strlen($conf->DBuser) > 16) ) {
+ $errs["DBuser"] = "Username too long";
+}
+if( $conf->DBpassword == "" && $conf->DBtype != "postgres" ) {
$errs["DBpassword"] = "Must not be blank";
}
if( $conf->DBpassword != $conf->DBpassword2 ) {
@@ -654,7 +696,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b></li>\n";
}
$ok = true; # Let's be optimistic
-
+
# Decide if we're going to use the superuser or the regular database user
$conf->Root = $useRoot;
if( $conf->Root ) {
@@ -664,7 +706,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
$db_user = $wgDBuser;
$db_pass = $wgDBpassword;
}
-
+
# Attempt to connect
echo( "<li>Attempting to connect to database server as $db_user..." );
$wgDatabase = Database::newFromParams( $wgDBserver, $db_user, $db_pass, '', 1 );
@@ -706,14 +748,14 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
break;
} # switch
} #conn. att.
-
+
if( !$ok ) { continue; }
} else /* not mysql */ {
error_reporting( E_ALL );
$wgSuperUser = '';
## Possible connect as a superuser
- if( $conf->Root ) {
+ if( $useRoot ) {
$wgDBsuperuser = $conf->RootUser;
echo( "<li>Attempting to connect to database \"postgres\" as superuser \"$wgDBsuperuser\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBsuperuser, $conf->RootPW, "postgres", 1);
@@ -797,6 +839,32 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) {
print "<li>There are already MediaWiki tables in this database. Checking if updates are needed...</li>\n";
+ # Determine existing default character set
+ if ( $wgDatabase->tableExists( "revision" ) ) {
+ $revision = $wgDatabase->escapeLike( $conf->DBprefix . 'revision' );
+ $res = $wgDatabase->query( "SHOW TABLE STATUS LIKE '$revision'" );
+ $row = $wgDatabase->fetchObject( $res );
+ if ( !$row ) {
+ echo "<li>SHOW TABLE STATUS query failed!</li>\n";
+ $existingSchema = false;
+ } elseif ( preg_match( '/^latin1/', $row->Collation ) ) {
+ $existingSchema = 'mysql4';
+ } elseif ( preg_match( '/^utf8/', $row->Collation ) ) {
+ $existingSchema = 'mysql5';
+ } elseif ( preg_match( '/^binary/', $row->Collation ) ) {
+ $existingSchema = 'mysql5-binary';
+ } else {
+ $existingSchema = false;
+ echo "<li><strong>Warning:</strong> Unrecognised existing collation</li>\n";
+ }
+ if ( $existingSchema && $existingSchema != $conf->DBschema ) {
+ print "<li><strong>Warning:</strong> you requested the {$conf->DBschema} schema, " .
+ "but the existing database has the $existingSchema schema. This upgrade script ".
+ "can't convert it, so it will remain $existingSchema.</li>\n";
+ $conf->setSchema( $existingSchema );
+ }
+ }
+
# Create user if required (todo: other databases)
if ( $conf->Root && $conf->DBtype == 'mysql') {
$conn = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
@@ -812,33 +880,18 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
dbsource( "../maintenance/users.sql", $wgDatabase );
}
}
- print "<pre>\n";
+ print "</ul><pre>\n";
chdir( ".." );
flush();
do_all_updates();
chdir( "config" );
print "</pre>\n";
- print "<li>Finished update checks.</li>\n";
+ print "<ul><li>Finished update checks.</li>\n";
} else {
# FIXME: Check for errors
print "<li>Creating tables...";
if ($conf->DBtype == 'mysql') {
- switch( $conf->DBschema ) {
- case "mysql4":
- print " using MySQL 4 table defs...";
- dbsource( "../maintenance/tables.sql", $wgDatabase );
- break;
- case "mysql5":
- print " using MySQL 5 UTF-8 table defs...";
- dbsource( "../maintenance/mysql5/tables.sql", $wgDatabase );
- break;
- case "mysql5-binary":
- print " using MySQL 5 binary table defs...";
- dbsource( "../maintenance/mysql5/tables-binary.sql", $wgDatabase );
- break;
- default:
- dieout( " <b>invalid schema selection!</b></li>" );
- }
+ dbsource( "../maintenance/tables.sql", $wgDatabase );
dbsource( "../maintenance/interwiki.sql", $wgDatabase );
} else if ($conf->DBtype == 'postgres') {
$wgDatabase->setup_database();
@@ -900,7 +953,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
$newid = $article->insertOn( $wgDatabase );
$revision = new Revision( array(
'page' => $newid,
- 'text' => wfMsg( 'mainpagetext' ) . "\n\n" . wfMsg( 'mainpagedocfooter' ),
+ 'text' => wfMsg( 'mainpagetext' ) . "\n\n" . wfMsgNoTrans( 'mainpagedocfooter' ),
'comment' => '',
'user' => 0,
'user_text' => 'MediaWiki default',
@@ -912,7 +965,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
/* Write out the config file now that all is well */
print "<li style=\"list-style: none\">\n";
print "<p>Creating LocalSettings.php...</p>\n\n";
- $localSettings = "<" . "?php$endl$local$endl?" . ">\r\n";
+ $localSettings = "<" . "?php$endl$local$endl\r\n";
// Fix up a common line-ending problem (due to CVS on Windows)
$localSettings = str_replace( "\r\n", "\n", $localSettings );
$f = fopen( "LocalSettings.php", 'xt' );
@@ -1063,7 +1116,7 @@ if( count( $errs ) ) {
<p class="config-desc">
Using a shared memory system such as Turck MMCache, APC, eAccelerator, or Memcached
will speed up MediaWiki significantly. Memcached is the best solution but needs to be
- installed. Specify the server addresses and ports in a comma-separted list. Only
+ installed. Specify the server addresses and ports in a comma-separated list. Only
use Turck shared memory if the wiki will be running on a single Apache server.
</p>
</div>
@@ -1079,7 +1132,7 @@ if( count( $errs ) ) {
</ul>
</div>
<p class="config-desc">
- Use this to disable all e-mail functions (password reminders, user-to-user e-mail and e-mail notifications)
+ Use this to disable all e-mail functions (password reminders, user-to-user e-mail, and e-mail notifications)
if sending mail doesn't work on your server.
</p>
@@ -1157,7 +1210,7 @@ if( count( $errs ) ) {
enter those here. If you have database root access (see below)
you can specify new accounts/databases to be created. This account
will not be created if it pre-exists. If this is the case, ensure that it
- has SELECT, INSERT, UPDATE and DELETE permissions on the MediaWiki database.
+ has SELECT, INSERT, UPDATE, and DELETE permissions on the MediaWiki database.
</p>
<div class="config-input">
@@ -1175,7 +1228,7 @@ if( count( $errs ) ) {
aField( $conf, "RootPW", "Superuser password:", "password" );
?>
</div>
-
+
<p class="config-desc">
If the database user specified above does not exist, or does not have access to create
the database (if needed) or tables within it, please check the box and provide details
@@ -1188,7 +1241,7 @@ if( count( $errs ) ) {
?></div>
<div class="config-desc">
<p>If you need to share one database between multiple wikis, or
- MediaWiki and another web application, you may choose to
+ between MediaWiki and another web application, you may choose to
add a prefix to all the table names to avoid conflicts.</p>
<p>Avoid exotic characters; something like <tt>mw_</tt> is good.</p>
@@ -1221,8 +1274,9 @@ if( count( $errs ) ) {
aField( $conf, "DBts2schema", "Schema for tsearch2:" );
?></div>
<div class="config-desc">
- <p>The username specified above will have it's search path set to the above schemas,
- so it is recommended that you create a new user.</p>
+ <p>The username specified above (at "DB username") will have its search path set to the above schemas,
+ so it is recommended that you create a new user. The above schemas are generally correct:
+ only change them if you are sure you need to.</p>
</div>
</div>
@@ -1283,9 +1337,7 @@ function escapePhpString( $string ) {
}
function writeLocalSettings( $conf ) {
- $conf->UseImageResize = $conf->UseImageResize ? 'true' : 'false';
$conf->PasswordSender = $conf->EmergencyContact;
- $zlib = ($conf->zlib ? "" : "# ");
$magic = ($conf->ImageMagick ? "" : "# ");
$convert = ($conf->ImageMagick ? $conf->ImageMagick : "/usr/bin/convert" );
$rights = ($conf->RightsUrl) ? "" : "# ";
@@ -1380,10 +1432,9 @@ if ( \$wgCommandLineMode ) {
if ( isset( \$_SERVER ) && array_key_exists( 'REQUEST_METHOD', \$_SERVER ) ) {
die( \"This script must be run from the command line\\n\" );
}
-} elseif ( empty( \$wgNoOutputBuffer ) ) {
- ## Compress output if the browser supports it
- {$zlib}if( !ini_get( 'zlib.output_compression' ) ) @ob_start( 'ob_gzhandler' );
}
+## Uncomment this to disable output compression
+# \$wgDisableOutputCompression = true;
\$wgSitename = \"{$slconf['Sitename']}\";
@@ -1417,6 +1468,9 @@ if ( \$wgCommandLineMode ) {
\$wgDBport = \"{$slconf['DBport']}\";
\$wgDBprefix = \"{$slconf['DBprefix']}\";
+# MySQL table options to use during installation or update
+\$wgDBTableOptions = \"{$slconf['DBTableOptions']}\";
+
# Schemas for Postgres
\$wgDBmwschema = \"{$slconf['DBmwschema']}\";
\$wgDBts2schema = \"{$slconf['DBts2schema']}\";
@@ -1431,7 +1485,6 @@ if ( \$wgCommandLineMode ) {
## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
\$wgEnableUploads = false;
-\$wgUseImageResize = {$conf->UseImageResize};
{$magic}\$wgUseImageMagick = true;
{$magic}\$wgImageMagickConvertCommand = \"{$convert}\";