From 183851b06bd6c52f3cae5375f433da720d410447 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Wed, 11 Oct 2006 18:12:39 +0000 Subject: MediaWiki 1.7.1 wiederhergestellt --- config/index.php | 1665 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1665 insertions(+) create mode 100644 config/index.php (limited to 'config/index.php') diff --git a/config/index.php b/config/index.php new file mode 100644 index 00000000..8fc91f8e --- /dev/null +++ b/config/index.php @@ -0,0 +1,1665 @@ +, 2006 Rob Church +# http://www.mediawiki.org/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# http://www.gnu.org/copyleft/gpl.html + +error_reporting( E_ALL ); +header( "Content-type: text/html; charset=utf-8" ); +@ini_set( "display_errors", true ); + +# In case of errors, let output be clean. +$wgRequestTime = microtime( true ); + +# Attempt to set up the include path, to fix problems with relative includes +$IP = dirname( dirname( __FILE__ ) ); +define( 'MW_INSTALL_PATH', $IP ); +$sep = PATH_SEPARATOR; +if( !ini_set( "include_path", ".$sep$IP$sep$IP/includes$sep$IP/languages" ) ) { + set_include_path( ".$sep$IP$sep$IP/includes$sep$IP/languages" ); +} + +# Define an entry point and include some files +define( "MEDIAWIKI", true ); +define( "MEDIAWIKI_INSTALL", true ); + +// Run version checks before including other files +// so people don't see a scary parse error. +require_once( "install-utils.inc" ); +install_version_checks(); + +require_once( "includes/Defines.php" ); +require_once( "includes/DefaultSettings.php" ); +require_once( "includes/MagicWord.php" ); +require_once( "includes/Namespace.php" ); + +## Databases we support: + +$ourdb = array(); +$ourdb['mysql']['fullname'] = 'MySQL'; +$ourdb['mysql']['havedriver'] = 0; +$ourdb['mysql']['compile'] = 'mysql'; +$ourdb['mysql']['bgcolor'] = '#ffe5a7'; + +$ourdb['postgres']['fullname'] = 'PostgreSQL'; +$ourdb['postgres']['havedriver'] = 0; +$ourdb['postgres']['compile'] = 'pgsql'; +$ourdb['postgres']['bgcolor'] = '#aaccff'; + +?> + + + + + MediaWiki <?php echo( $wgVersion ); ?> Installation + + + + + +
+
+
+
+ +

MediaWiki Installation

+ +Setup has completed, your wiki is configured.

+ +

Please delete the /config directory for extra security.

" ); +} + +if( file_exists( "./LocalSettings.php" ) ) { + writeSuccessMessage(); + + dieout( '' ); +} + +if( !is_writable( "." ) ) { + dieout( "

Can't write config file, aborting

+ +

In order to configure the wiki you have to make the config subdirectory + writable by the web server. Once configuration is done you'll move the created + LocalSettings.php to the parent directory, and for added safety you can + then remove the config subdirectory entirely.

+ +

To make the directory writable on a Unix/Linux system:

+ +
+	cd /path/to/wiki
+	chmod a+w config
+	
" ); +} + + +require_once( "maintenance/updaters.inc" ); + +class ConfigData { + function getEncoded( $data ) { + # removing latin1 support, no need... + return $data; + } + function getSitename() { return $this->getEncoded( $this->Sitename ); } + function getSysopName() { return $this->getEncoded( $this->SysopName ); } + function getSysopPass() { return $this->getEncoded( $this->SysopPass ); } +} + +?> + + + + +

Checking environment...

+

Please include all of the lines below when reporting installation problems.

+" ); +} + +print "
  • Found database drivers for:"; +foreach (array_keys($ourdb) AS $db) { + if ($ourdb[$db]['havedriver']) { + $DefaultDBtype = $db; + print " ".$ourdb[$db]['fullname']; + } +} +print "
  • \n"; +if (count($phpdatabases) != 1) + $DefaultDBtype = ''; + +if( ini_get( "register_globals" ) ) { + ?> +
  • +
    + Warning: + PHP's register_globals option is enabled. Disable it if you can. +
    + MediaWiki will work, but your server is more exposed to PHP-based security vulnerabilities. +
  • +
  • Fatal: magic_quotes_runtime is active! + This option corrupts data input unpredictably; you cannot install or use + MediaWiki unless this option is disabled. +
  • Fatal: magic_quotes_sybase is active! + This option corrupts data input unpredictably; you cannot install or use + MediaWiki unless this option is disabled. +
  • Fatal: mbstring.func_overload is active! + This option causes errors and may corrupt data unpredictably; + you cannot install or use MediaWiki unless this option is disabled. +

    Cannot install MediaWiki.

    " ); +} + +if( ini_get( "safe_mode" ) ) { + $conf->safeMode = true; + ?> +
  • Warning: PHP's + safe mode is active. + You may have problems caused by this, particularly if using image uploads. +
  • + safeMode = false; +} + +$sapi = php_sapi_name(); +$conf->prettyURLs = true; +print "
  • PHP server API is $sapi; "; +switch( $sapi ) { +case "apache": +case "apache2handler": + print "ok, using pretty URLs (index.php/Page_Title)"; + break; +default: + print "unknown; "; +case "cgi": +case "cgi-fcgi": +case "apache2filter": +case "isapi": + print "using ugly URLs (index.php?title=Page_Title)"; + $conf->prettyURLs = false; + break; +} +print "
  • \n"; + +$conf->xml = function_exists( "utf8_encode" ); +if( $conf->xml ) { + print "
  • Have XML / Latin1-UTF-8 conversion support.
  • \n"; +} else { + dieout( "PHP's XML module is missing; the wiki requires functions in + this module and won't work in this configuration. + If you're running Mandrake, install the php-xml package." ); +} + +# Crude 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 +if( !function_exists( 'preg_match' ) ) + dieout( "The PCRE regular expression functions are missing. MediaWiki requires these in order to function." ); + +$memlimit = ini_get( "memory_limit" ); +$conf->raiseMemory = false; +if( empty( $memlimit ) || $memlimit == -1 ) { + print "
  • PHP is configured with no memory_limit.
  • \n"; +} else { + print "
  • PHP's memory_limit is " . htmlspecialchars( $memlimit ) . ". If this is too low, installation may fail! "; + $n = intval( $memlimit ); + if( preg_match( '/^([0-9]+)[Mm]$/', trim( $memlimit ), $m ) ) { + $n = intval( $m[1] * (1024*1024) ); + } + if( $n < 20*1024*1024 ) { + print "Attempting to raise limit to 20M... "; + if( false === ini_set( "memory_limit", "20M" ) ) { + print "failed."; + } else { + $conf->raiseMemory = true; + print "ok."; + } + } + print "
  • \n"; +} + +$conf->zlib = function_exists( "gzencode" ); +if( $conf->zlib ) { + print "
  • Have zlib support; enabling output compression.
  • \n"; +} else { + print "
  • No zlib support.
  • \n"; +} + +$conf->turck = function_exists( 'mmcache_get' ); +if ( $conf->turck ) { + print "
  • Turck MMCache installed
  • \n"; +} + +$conf->apc = function_exists('apc_fetch'); +if ($conf->apc ) { + print "
  • APC installed
  • "; +} + +$conf->eaccel = function_exists( 'eaccelerator_get' ); +if ( $conf->eaccel ) { + $conf->turck = 'eaccelerator'; + print "
  • eAccelerator installed
  • \n"; +} +if (!$conf->turck && !$conf->eaccel && !$conf->apc) { + print "
  • Neither Turck MMCache nor ". + "eAccelerator nor ". + "APC are installed, " . + "can't use object caching functions
  • \n"; +} + +$conf->diff3 = false; +$diff3locations = array("/usr/bin", "/usr/local/bin", "/opt/csw/bin", "/usr/gnu/bin", "/usr/sfw/bin") + explode($sep, getenv("PATH")); +$diff3names = array("gdiff3", "diff3", "diff3.exe"); + +$diff3versioninfo = array('$1 --version 2>&1', 'diff3 (GNU diffutils)'); +foreach ($diff3locations as $loc) { + $exe = locate_executable($loc, $diff3names, $diff3versioninfo); + if ($exe !== false) { + $conf->diff3 = $exe; + break; + } +} + +if ($conf->diff3) + print "
  • Found GNU diff3: $conf->diff3.
  • "; +else + print "
  • GNU diff3 not found.
  • "; + +$conf->ImageMagick = false; +$imcheck = array( "/usr/bin", "/opt/csw/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" ); +foreach( $imcheck as $dir ) { + $im = "$dir/convert"; + if( file_exists( $im ) ) { + print "
  • Found ImageMagick: $im; image thumbnailing will be enabled if you enable uploads.
  • \n"; + $conf->ImageMagick = $im; + break; + } +} + +$conf->HaveGD = function_exists( "imagejpeg" ); +if( $conf->HaveGD ) { + print "
  • Found GD graphics library built-in"; + if( !$conf->ImageMagick ) { + print ", image thumbnailing will be enabled if you enable uploads"; + } + print ".
  • \n"; +} else { + if( !$conf->ImageMagick ) { + print "
  • Couldn't find GD library or ImageMagick; image thumbnailing disabled.
  • \n"; + } +} + +$conf->UseImageResize = $conf->HaveGD || $conf->ImageMagick; + +$conf->IP = dirname( dirname( __FILE__ ) ); +print "
  • Installation directory: " . htmlspecialchars( $conf->IP ) . "
  • \n"; + +$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $_SERVER["PHP_SELF"] ); # was SCRIPT_NAME +print "
  • Script URI path: " . htmlspecialchars( $conf->ScriptPath ) . "
  • \n"; + +print "
  • Environment checked. You can install MediaWiki.
  • \n"; + $conf->posted = ($_SERVER["REQUEST_METHOD"] == "POST"); + + $conf->Sitename = ucfirst( importPost( "Sitename", "" ) ); + $defaultEmail = empty( $_SERVER["SERVER_ADMIN"] ) + ? 'root@localhost' + : $_SERVER["SERVER_ADMIN"]; + $conf->EmergencyContact = importPost( "EmergencyContact", $defaultEmail ); + $conf->DBtype = importPost( "DBtype", $DefaultDBtype ); +?> + +DBserver = importPost( "DBserver", "localhost" ); + $conf->DBname = importPost( "DBname", "wikidb" ); + $conf->DBuser = importPost( "DBuser", "wikiuser" ); + $conf->DBpassword = importPost( "DBpassword" ); + $conf->DBpassword2 = importPost( "DBpassword2" ); + $conf->SysopName = importPost( "SysopName", "WikiSysop" ); + $conf->SysopPass = importPost( "SysopPass" ); + $conf->SysopPass2 = importPost( "SysopPass2" ); + + ## MySQL specific: + $conf->DBprefix = importPost( "DBprefix" ); + $conf->DBmysql5 = (importPost( "DBmysql5" ) == "true") ? "true" : "false"; + $conf->RootUser = importPost( "RootUser", "root" ); + $conf->RootPW = importPost( "RootPW", "-" ); + $conf->LanguageCode = importPost( "LanguageCode", "en" ); + + ## Postgres specific: + $conf->DBport = importPost( "DBport", "5432" ); + $conf->DBmwschema = importPost( "DBmwschema", "mediawiki" ); + $conf->DBts2schema = importPost( "DBts2schema", "public" ); + +/* Check for validity */ +$errs = array(); + +if( $conf->Sitename == "" || $conf->Sitename == "MediaWiki" || $conf->Sitename == "Mediawiki" ) { + $errs["Sitename"] = "Must not be blank or \"MediaWiki\""; +} +if( $conf->DBuser == "" ) { + $errs["DBuser"] = "Must not be blank"; +} +if( $conf->DBpassword == "" ) { + $errs["DBpassword"] = "Must not be blank"; +} +if( $conf->DBpassword != $conf->DBpassword2 ) { + $errs["DBpassword2"] = "Passwords don't match!"; +} +if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix ) ) { + $errs["DBprefix"] = "Invalid table prefix"; +} + +if( $conf->SysopPass == "" ) { + $errs["SysopPass"] = "Must not be blank"; +} +if( $conf->SysopPass != $conf->SysopPass2 ) { + $errs["SysopPass2"] = "Passwords don't match!"; +} + +$conf->License = importRequest( "License", "none" ); +if( $conf->License == "gfdl" ) { + $conf->RightsUrl = "http://www.gnu.org/copyleft/fdl.html"; + $conf->RightsText = "GNU Free Documentation License 1.2"; + $conf->RightsCode = "gfdl"; + $conf->RightsIcon = '${wgStylePath}/common/images/gnu-fdl.png'; +} elseif( $conf->License == "none" ) { + $conf->RightsUrl = $conf->RightsText = $conf->RightsCode = $conf->RightsIcon = ""; +} else { + $conf->RightsUrl = importRequest( "RightsUrl", "" ); + $conf->RightsText = importRequest( "RightsText", "" ); + $conf->RightsCode = importRequest( "RightsCode", "" ); + $conf->RightsIcon = importRequest( "RightsIcon", "" ); +} + +$conf->Shm = importRequest( "Shm", "none" ); +$conf->MCServers = importRequest( "MCServers" ); + +/* Test memcached servers */ + +if ( $conf->Shm == 'memcached' && $conf->MCServers ) { + $conf->MCServerArray = array_map( 'trim', explode( ',', $conf->MCServers ) ); + foreach ( $conf->MCServerArray as $server ) { + $error = testMemcachedServer( $server ); + if ( $error ) { + $errs["MCServers"] = $error; + break; + } + } +} else if ( $conf->Shm == 'memcached' ) { + $errs["MCServers"] = "Please specify at least one server if you wish to use memcached"; +} + +/* default values for installation */ +$conf->Email =importRequest("Email", "email_enabled"); +$conf->Emailuser=importRequest("Emailuser", "emailuser_enabled"); +$conf->Enotif =importRequest("Enotif", "enotif_allpages"); +$conf->Eauthent =importRequest("Eauthent", "eauthent_enabled"); + +if( $conf->posted && ( 0 == count( $errs ) ) ) { + do { /* So we can 'continue' to end prematurely */ + $conf->Root = ($conf->RootPW != ""); + + /* Load up the settings and get installin' */ + $local = writeLocalSettings( $conf ); + echo "

    Generating configuration file...

    \n"; + // for debugging: // echo "
    " . htmlspecialchars( $local ) . "
    \n"; + + $wgCommandLineMode = false; + chdir( ".." ); + eval($local); + $conf->DBtypename = ''; + foreach (array_keys($ourdb) as $db) { + if ($conf->DBtype === $db) + $conf->DBtypename = $ourdb[$db]['fullname']; + } + if (! $conf->DBtypename) { + $errs["DBtype"] = "Unknown database type '$conf->DBtype'"; + continue; + } + print "
  • Database type: {$conf->DBtypename}
  • \n"; + $dbclass = 'Database'.ucfirst($conf->DBtype); + $wgDBtype = $conf->DBtype; + $wgDBadminuser = "root"; + $wgDBadminpassword = $conf->RootPW; + + ## Mysql specific: + $wgDBprefix = $conf->DBprefix; + + ## Postgres specific: + $wgDBport = $conf->DBport; + $wgDBmwschema = $conf->DBmwschema; + $wgDBts2schema = $conf->DBts2schema; + + $wgCommandLineMode = true; + $wgUseDatabaseMessages = false; /* FIXME: For database failure */ + require_once( "includes/Setup.php" ); + chdir( "config" ); + + require_once( "maintenance/InitialiseMessages.inc" ); + + $wgTitle = Title::newFromText( "Installation script" ); +error_reporting( E_ALL ); + print "
  • Loading class: $dbclass"; + $dbc = new $dbclass; + + if( $conf->DBtype == 'mysql' ) { + $mysqlOldClient = version_compare( mysql_get_client_info(), "4.1.0", "lt" ); + if( $mysqlOldClient ) { + print "
  • PHP is linked with old MySQL client libraries. If you are + using a MySQL 4.1 server and have problems connecting to the database, + see http://dev.mysql.com/doc/mysql/en/old-client.html for help.
  • \n"; + } + $ok = true; # Let's be optimistic + + # Decide if we're going to use the superuser or the regular database user + if( $conf->RootPW == '-' ) { + # Regular user + $conf->Root = false; + $db_user = $wgDBuser; + $db_pass = $wgDBpassword; + } else { + # Superuser + $conf->Root = true; + $db_user = $conf->RootUser; + $db_pass = $conf->RootPW; + } + + # Attempt to connect + echo( "
  • Attempting to connect to database server as $db_user..." ); + $wgDatabase = Database::newFromParams( $wgDBserver, $db_user, $db_pass, '', 1 ); + + # Check the connection and respond to errors + if( $wgDatabase->isOpen() ) { + # Seems OK + $ok = true; + $wgDBadminuser = $db_user; + $wgDBadminpassword = $db_pass; + echo( "success.
  • \n" ); + $wgDatabase->ignoreErrors( true ); + $myver = $wgDatabase->getServerVersion(); + } else { + # There were errors, report them and back out + $ok = false; + $errno = mysql_errno(); + $errtx = htmlspecialchars( mysql_error() ); + switch( $errno ) { + case 1045: + case 2000: + echo( "failed due to authentication errors. Check passwords." ); + if( $conf->Root ) { + # The superuser details are wrong + $errs["RootUser"] = "Check username"; + $errs["RootPW"] = "and password"; + } else { + # The regular user details are wrong + $errs["DBuser"] = "Check username"; + $errs["DBpassword"] = "and password"; + } + break; + case 2002: + case 2003: + default: + # General connection problem + echo( "failed with error [$errno] $errtx.\n" ); + $errs["DBserver"] = "Connection failed"; + break; + } # switch + } #conn. att. + + if( !$ok ) { continue; } + + } else /* not mysql */ { + echo( "
  • Attempting to connect to database server as $wgDBuser..." ); + $wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1); + if (!$wgDatabase->isOpen()) { + print " error: " . $wgDatabase->lastError() . "
  • \n"; + } else { + $wgDatabase->ignoreErrors(true); + $myver = $wgDatabase->getServerVersion(); + } + } + + if ( !$wgDatabase->isOpen() ) { + $errs["DBserver"] = "Couldn't connect to database"; + continue; + } + + print "
  • Connected to $myver"; + if ($conf->DBtype == 'mysql') { + if( version_compare( $myver, "4.0.14" ) < 0 ) { + die( " -- mysql 4.0.14 or later required. Aborting." ); + } + $mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" ); + if( $mysqlNewAuth && $mysqlOldClient ) { + print "; You are using MySQL 4.1 server, but PHP is linked + to old client libraries; if you have trouble with authentication, see + http://dev.mysql.com/doc/mysql/en/old-client.html for help."; + } + if( $wgDBmysql5 ) { + if( $mysqlNewAuth ) { + print "; enabling MySQL 4.1/5.0 charset mode"; + } else { + print "; MySQL 4.1/5.0 charset mode enabled, + but older version detected; will likely fail."; + } + } + print "
  • \n"; + + @$sel = $wgDatabase->selectDB( $wgDBname ); + if( $sel ) { + print "
  • Database " . htmlspecialchars( $wgDBname ) . " exists
  • \n"; + } else { + $err = mysql_errno(); + if ( $err != 1049 ) { + print ""; + continue; + } + $res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" ); + if( !$res ) { + print "
  • Couldn't create database " . + htmlspecialchars( $wgDBname ) . + "; try with root access or check your username/pass.
  • \n"; + $errs["RootPW"] = "<- Enter"; + continue; + } + print "
  • Created database " . htmlspecialchars( $wgDBname ) . "
  • \n"; + } + $wgDatabase->selectDB( $wgDBname ); + } + + if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) { + print "
  • There are already MediaWiki tables in this database. Checking if updates are needed...
  • \n"; + + # Create user if required (todo: other databases) + if ( $conf->Root && $conf->DBtype == 'mysql') { + $conn = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 ); + if ( $conn->isOpen() ) { + print "
  • DB user account ok
  • \n"; + $conn->close(); + } else { + print "
  • Granting user permissions..."; + if( $mysqlOldClient && $mysqlNewAuth ) { + print " If the next step fails, see http://dev.mysql.com/doc/mysql/en/old-client.html for help."; + } + print "
  • \n"; + dbsource( "../maintenance/users.sql", $wgDatabase ); + } + } + if ( $conf->DBtype == 'mysql') { + print "
    \n";
    +				chdir( ".." );
    +				flush();
    +				do_all_updates();
    +				chdir( "config" );
    +				print "
    \n"; + } + print "
  • Finished update checks.
  • \n"; + } else { + # FIXME: Check for errors + print "
  • Creating tables..."; + if ($conf->DBtype == 'mysql') { + if( $wgDBmysql5 ) { + print " using MySQL 5 table defs..."; + dbsource( "../maintenance/mysql5/tables.sql", $wgDatabase ); + } else { + print " using MySQL 4 table defs..."; + dbsource( "../maintenance/tables.sql", $wgDatabase ); + } + dbsource( "../maintenance/interwiki.sql", $wgDatabase ); + } else if ($conf->DBtype == 'postgres') { + dbsource( "../maintenance/postgres/tables.sql", $wgDatabase ); + $wgDatabase->update_interwiki(); + } else if ($conf->DBtype == 'oracle') { + dbsource( "../maintenance/oracle/tables.sql", $wgDatabase ); + dbsource( "../maintenance/oracle/interwiki.sql", $wgDatabase ); + } + else { + $errs["DBtype"] = "Do not know how to handle database type '$conf->DBtype'"; + continue; + } + + print " done.
  • \n"; + + print "
  • Initializing data..."; + $wgDatabase->insert( 'site_stats', + array( 'ss_row_id' => 1, + 'ss_total_views' => 0, + 'ss_total_edits' => 0, + 'ss_good_articles' => 0 ) ); + + # Set up the "regular user" account *if we can, and if we need to* + if( $conf->Root ) { + # See if we need to + $wgDatabase2 = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 ); + if( $wgDatabase2->isOpen() ) { + # Nope, just close the test connection and continue + $wgDatabase2->close(); + echo( "
  • User $wgDBuser exists. Skipping grants.
  • " ); + } else { + # Yes, so run the grants + echo( "
  • Granting user permissions to $wgDBuser on $wgDBname..." ); + dbsource( "../maintenance/users.sql", $wgDatabase ); + echo( "success.
  • " ); + } + } + + if( $conf->SysopName ) { + $u = User::newFromName( $conf->getSysopName() ); + if ( 0 == $u->idForName() ) { + $u->addToDatabase(); + $u->setPassword( $conf->getSysopPass() ); + $u->saveSettings(); + + $u->addGroup( "sysop" ); + $u->addGroup( "bureaucrat" ); + + print "
  • Created sysop account " . + htmlspecialchars( $conf->SysopName ) . ".
  • \n"; + } else { + print "
  • Could not create user - already exists!
  • \n"; + } + } else { + print "
  • Skipped sysop account creation, no name given.
  • \n"; + } + + $titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) ); + $article = new Article( $titleobj ); + $newid = $article->insertOn( $wgDatabase ); + $revision = new Revision( array( + 'page' => $newid, + 'text' => wfMsg( 'mainpagetext' ) . "\n\n" . wfMsg( 'mainpagedocfooter' ), + 'comment' => '', + 'user' => 0, + 'user_text' => 'MediaWiki default', + ) ); + $revid = $revision->insertOn( $wgDatabase ); + $article->updateRevisionOn( $wgDatabase, $revision ); + + print "
  • ";
    +			initialiseMessages();
    +			print "
  • \n"; + } + + /* Write out the config file now that all is well */ + print "

    Creating LocalSettings.php...

    \n\n"; + $localSettings = "<" . "?php$endl$local$endl?" . ">"; + // Fix up a common line-ending problem (due to CVS on Windows) + $localSettings = str_replace( "\r\n", "\n", $localSettings ); + + if( version_compare( phpversion(), "4.3.2" ) >= 0 ) { + $xt = "xt"; # Refuse to overwrite an existing file + } else { + $xt = "wt"; # 'x' is not available prior to PHP 4.3.2. We did check above, but race conditions blah blah + } + $f = fopen( "LocalSettings.php", $xt ); + + if( $f == false ) { + dieout( "

    Couldn't write out LocalSettings.php. Check that the directory permissions are correct and that there isn't already a file of that name here...

    \n" . + "

    Here's the file that would have been written, try to paste it into place manually:

    \n" . + "
    \n" . htmlspecialchars( $localSettings ) . "
    \n" ); + } + if(fwrite( $f, $localSettings ) ) { + fclose( $f ); + writeSuccessMessage(); + } else { + fclose( $f ); + die("

    An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again.

    \n"); + + } + + } while( false ); +} +?> + + + +posted ) { + echo "

    Something's not quite right yet; make sure everything below is filled out correctly.

    \n"; + } +?> + +
    + + +

    Site config

    + +
    +
    + +
    +

    + Preferably a short word without punctuation, i.e. "Wikipedia".
    + Will appear as the namespace name for "meta" pages, and throughout the interface. +

    + +
    + +
    +

    + Displayed to users in some error messages, used as the return address for password reminders, and used as the default sender address of e-mail notifications. +

    + +
    + + +
    +

    + Select the language for your wiki's interface. Some localizations aren't fully complete. Unicode (UTF-8) used for all localizations. +

    + +
    + + +
      +
    • +
    • +
    • ScriptPath}/config/index.php?License=cc&RightsUrl=[license_url]&RightsText=[license_name]&RightsCode=[license_code]&RightsIcon=[license_button]" ); + $icon = urlencode( "$wgServer$wgUploadPath/wiki.png" ); + $ccApp = htmlspecialchars( "http://creativecommons.org/license/?partner=$partner&exit_url=$exit&partner_icon_url=$icon" ); + print "choose"; + ?> + License == "cc" ) { ?> +
        +
      • RightsIcon ) . "\" alt='icon' />", "hidden" ); ?>
      • +
      • RightsText ), "hidden" ); ?>
      • +
      • RightsCode ), "hidden" ); ?>
      • +
      • RightsUrl ) . "\">" . htmlspecialchars( $conf->RightsUrl ) . "", "hidden" ); ?>
      • +
      + +
    • +
    +
    +

    + A notice, icon, and machine-readable copyright metadata will be displayed for the license you pick. +

    + + +
    + +
    +
    + +
    +
    + +
    +

    + An admin can lock/delete pages, block users from editing, and other maintenance tasks.
    + A new account will be added only when creating a new wiki database. +

    + +
    + + +
      +
    • + turck ) { + echo "
    • "; + aField( $conf, "Shm", "Turck MMCache", "radio", "turck" ); + echo "
    • "; + } + if ( $conf->apc ) { + echo "
    • "; + aField( $conf, "Shm", "APC", "radio", "apc" ); + echo "
    • "; + } + if ( $conf->eaccel ) { + echo "
    • "; + aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" ); + echo "
    • "; + } + ?> +
    • +
    +
    +
    +

    + 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 + use Turck shared memory if the wiki will be running on a single Apache server. +

    +
    + +

    E-mail, e-mail notification and authentication setup

    + +
    +
    + +
      +
    • +
    • +
    +
    +

    + 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. +

    + +
    + +
      +
    • +
    • +
    +
    +

    + The user-to-user e-mail feature (Special:Emailuser) lets the wiki act as a relay to allow users to exchange e-mail without publicly advertising their e-mail address. +

    +
    + +
      +
    • +
    • +
    • +
    +
    +
    +

    + For this feature to work, an e-mail address must be present for the user account, and the notification + options in the user's preferences must be enabled. Also note the + authentication option below. When testing the feature, keep in mind that your own changes will never trigger notifications to be sent to yourself.

    + +

    There are additional options for fine tuning in /includes/DefaultSettings.php; copy these to your LocalSettings.php and edit them there to change them.

    +
    + +
    + +
      +
    • +
    • +
    +
    +
    +

    If this option is enabled, users have to confirm their e-mail address using a magic link sent to them whenever they set or change it, and only authenticated e-mail addresses can receive mails from other users and/or + change notification mails. Setting this option is recommended for public wikis because of potential abuse of the e-mail features above.

    +
    + +
    + +

    Database config

    + +
    +
    + +
    +
    + +
    +

    + If your database server isn't on your web server, enter the name or IP address here. +

    + +
    +
    +
    +
    +

    + If you only have a single user account and database available, + 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. +

    + + +
    +
    +

    If you need to share one database between multiple wikis, or + MediaWiki and another web application, you may choose to + add a prefix to all the table names to avoid conflicts.

    + +

    Avoid exotic characters; something like mw_ is good.

    +
    + +
    +
    Select one:
    +
      +
    • +
    • +
    +
    +

    + EXPERIMENTAL: You can enable explicit Unicode charset support + for MySQL 4.1 and 5.0 servers. This is not well tested and may + cause things to break. If upgrading an older installation, leave + in backwards-compatible mode. +

    +
    + + +
    +
    +
    +
    +

    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.

    +
    + + +
    + +
    +
    + +
    + +

    + 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 provide details of a superuser account, + such as root, which does. Leave the password set to - if this is not needed. +

    + +
    + + +
    + + + + + +
    + +Installation successful!

    +

    To complete the installation, please do the following: +

      +
    1. Download config/LocalSettings.php with your FTP client or file manager
    2. +
    3. Upload it to the parent directory
    4. +
    5. Delete config/LocalSettings.php
    6. +
    7. Start using your wiki! +
    +

    If you are in a shared hosting environment, do not just move LocalSettings.php +remotely. LocalSettings.php is currently owned by the user your webserver is running under, +which means that anyone on the same server can read your database password! Downloading +it and uploading it again will hopefully change the ownership to a user ID specific to you.

    +EOT; + } else { + echo "

    Installation successful! Move the config/LocalSettings.php file into the parent directory, then follow + this link to your wiki.

    \n"; + } +} + + +function escapePhpString( $string ) { + return strtr( $string, + array( + "\n" => "\\n", + "\r" => "\\r", + "\t" => "\\t", + "\\" => "\\\\", + "\$" => "\\\$", + "\"" => "\\\"" + )); +} + +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" ); + $pretty = ($conf->prettyURLs ? "" : "# "); + $ugly = ($conf->prettyURLs ? "# " : ""); + $rights = ($conf->RightsUrl) ? "" : "# "; + $hashedUploads = $conf->safeMode ? '' : '# '; + + switch ( $conf->Shm ) { + case 'memcached': + $cacheType = 'CACHE_MEMCACHED'; + $mcservers = var_export( $conf->MCServerArray, true ); + break; + case 'turck': + case 'apc': + case 'eaccel': + $cacheType = 'CACHE_ACCEL'; + $mcservers = 'array()'; + break; + default: + $cacheType = 'CACHE_NONE'; + $mcservers = 'array()'; + } + + if ( $conf->Email == 'email_enabled' ) { + $enableemail = 'true'; + $enableuseremail = ( $conf->Emailuser == 'emailuser_enabled' ) ? 'true' : 'false' ; + $eauthent = ( $conf->Eauthent == 'eauthent_enabled' ) ? 'true' : 'false' ; + switch ( $conf->Enotif ) { + case 'enotif_usertalk': + $enotifusertalk = 'true'; + $enotifwatchlist = 'false'; + break; + case 'enotif_allpages': + $enotifusertalk = 'true'; + $enotifwatchlist = 'true'; + break; + default: + $enotifusertalk = 'false'; + $enotifwatchlist = 'false'; + } + } else { + $enableuseremail = 'false'; + $enableemail = 'false'; + $eauthent = 'false'; + $enotifusertalk = 'false'; + $enotifwatchlist = 'false'; + } + + $file = @fopen( "/dev/urandom", "r" ); + if ( $file ) { + $secretKey = bin2hex( fread( $file, 32 ) ); + fclose( $file ); + } else { + $secretKey = ""; + for ( $i=0; $i<8; $i++ ) { + $secretKey .= dechex(mt_rand(0, 0x7fffffff)); + } + print "
  • Warning: \$wgSecretKey key is insecure, generated with mt_rand(). Consider changing it manually.
  • \n"; + } + + # Add slashes to strings for double quoting + $slconf = array_map( "escapePhpString", get_object_vars( $conf ) ); + if( $conf->License == 'gfdl' ) { + # Needs literal string interpolation for the current style path + $slconf['RightsIcon'] = $conf->RightsIcon; + } + + $localsettings = " +# This file was automatically generated by the MediaWiki installer. +# If you make manual changes, please keep track in case you need to +# recreate them later. +# +# See includes/DefaultSettings.php for all configurable settings +# and their default values, but don't forget to make changes in _this_ +# file, not there. + +# If you customize your file layout, set \$IP to the directory that contains +# the other MediaWiki files. It will be used as a base to locate files. +if( defined( 'MW_INSTALL_PATH' ) ) { + \$IP = MW_INSTALL_PATH; +} else { + \$IP = dirname( __FILE__ ); +} + +\$path = array( \$IP, \"\$IP/includes\", \"\$IP/languages\" ); +set_include_path( implode( PATH_SEPARATOR, \$path ) . PATH_SEPARATOR . get_include_path() ); + +require_once( \"includes/DefaultSettings.php\" ); + +# If PHP's memory limit is very low, some operations may fail. +" . ($conf->raiseMemory ? '' : '# ' ) . "ini_set( 'memory_limit', '20M' );" . " + +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' ); +} + +\$wgSitename = \"{$slconf['Sitename']}\"; + +\$wgScriptPath = \"{$slconf['ScriptPath']}\"; +\$wgScript = \"\$wgScriptPath/index.php\"; +\$wgRedirectScript = \"\$wgScriptPath/redirect.php\"; + +## For more information on customizing the URLs please see: +## http://meta.wikimedia.org/wiki/Eliminating_index.php_from_the_url +## If using PHP as a CGI module, the ?title= style usually must be used. +{$pretty}\$wgArticlePath = \"\$wgScript/\$1\"; +{$ugly}\$wgArticlePath = \"\$wgScript?title=\$1\"; + +\$wgStylePath = \"\$wgScriptPath/skins\"; +\$wgStyleDirectory = \"\$IP/skins\"; +\$wgLogo = \"\$wgStylePath/common/images/wiki.png\"; + +\$wgUploadPath = \"\$wgScriptPath/images\"; +\$wgUploadDirectory = \"\$IP/images\"; + +\$wgEnableEmail = $enableemail; +\$wgEnableUserEmail = $enableuseremail; + +\$wgEmergencyContact = \"{$slconf['EmergencyContact']}\"; +\$wgPasswordSender = \"{$slconf['PasswordSender']}\"; + +## For a detailed description of the following switches see +## http://meta.wikimedia.org/Enotif and http://meta.wikimedia.org/Eauthent +## There are many more options for fine tuning available see +## /includes/DefaultSettings.php +## UPO means: this is also a user preference option +\$wgEnotifUserTalk = $enotifusertalk; # UPO +\$wgEnotifWatchlist = $enotifwatchlist; # UPO +\$wgEmailAuthentication = $eauthent; + +\$wgDBserver = \"{$slconf['DBserver']}\"; +\$wgDBname = \"{$slconf['DBname']}\"; +\$wgDBuser = \"{$slconf['DBuser']}\"; +\$wgDBpassword = \"{$slconf['DBpassword']}\"; +\$wgDBprefix = \"{$slconf['DBprefix']}\"; +\$wgDBtype = \"{$slconf['DBtype']}\"; +\$wgDBport = \"{$slconf['DBport']}\"; + +# Experimental charset support for MySQL 4.1/5.0. +\$wgDBmysql5 = {$conf->DBmysql5}; + +## Shared memory settings +\$wgMainCacheType = $cacheType; +\$wgMemCachedServers = $mcservers; + +## 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}\"; + +## If you want to use image uploads under safe mode, +## create the directories images/archive, images/thumb and +## images/temp, and make them all writable. Then uncomment +## this, if it's not already uncommented: +{$hashedUploads}\$wgHashedUploadDirectory = false; + +## If you have the appropriate support software installed +## you can enable inline LaTeX equations: +\$wgUseTeX = false; +\$wgMathPath = \"{\$wgUploadPath}/math\"; +\$wgMathDirectory = \"{\$wgUploadDirectory}/math\"; +\$wgTmpDirectory = \"{\$wgUploadDirectory}/tmp\"; + +\$wgLocalInterwiki = \$wgSitename; + +\$wgLanguageCode = \"{$slconf['LanguageCode']}\"; + +\$wgProxyKey = \"$secretKey\"; + +## Default skin: you can change the default skin. Use the internal symbolic +## names, ie 'standard', 'nostalgia', 'cologneblue', 'monobook': +\$wgDefaultSkin = 'monobook'; + +## For attaching licensing metadata to pages, and displaying an +## appropriate copyright notice / icon. GNU Free Documentation +## License and Creative Commons licenses are supported so far. +{$rights}\$wgEnableCreativeCommonsRdf = true; +\$wgRightsPage = \"\"; # Set to the title of a wiki page that describes your license/copyright +\$wgRightsUrl = \"{$slconf['RightsUrl']}\"; +\$wgRightsText = \"{$slconf['RightsText']}\"; +\$wgRightsIcon = \"{$slconf['RightsIcon']}\"; +# \$wgRightsCode = \"{$slconf['RightsCode']}\"; # Not yet used + +\$wgDiff3 = \"{$slconf['diff3']}\"; + +# When you make changes to this configuration file, this will make +# sure that cached pages are cleared. +\$configdate = gmdate( 'YmdHis', @filemtime( __FILE__ ) ); +\$wgCacheEpoch = max( \$wgCacheEpoch, \$configdate ); +"; + // Keep things in Unix line endings internally; + // the system will write out as local text type. + return str_replace( "\r\n", "\n", $localsettings ); +} + +function dieout( $text ) { + die( $text . "\n\n\n" ); +} + +function importVar( &$var, $name, $default = "" ) { + if( isset( $var[$name] ) ) { + $retval = $var[$name]; + if ( get_magic_quotes_gpc() ) { + $retval = stripslashes( $retval ); + } + } else { + $retval = $default; + } + return $retval; +} + +function importPost( $name, $default = "" ) { + return importVar( $_POST, $name, $default ); +} + +function importRequest( $name, $default = "" ) { + return importVar( $_REQUEST, $name, $default ); +} + +$radioCount = 0; + +function aField( &$conf, $field, $text, $type = "text", $value = "", $onclick = '' ) { + global $radioCount; + if( $type != "" ) { + $xtype = "type=\"$type\""; + } else { + $xtype = ""; + } + + $id = $field; + $nolabel = ($type == "radio") || ($type == "hidden"); + + if ($type == 'radio') + $id .= $radioCount++; + + if( $nolabel ) { + echo "\t\t\n"; + } + + global $errs; + if(isset($errs[$field])) echo "" . $errs[$field] . "\n"; +} + +function getLanguageList() { + global $wgLanguageNames; + if( !isset( $wgLanguageNames ) ) { + require_once( "languages/Names.php" ); + } + + $codes = array(); + + $d = opendir( "../languages" ); + /* In case we are called from the root directory */ + if (!$d) + $d = opendir( "languages"); + while( false !== ($f = readdir( $d ) ) ) { + $m = array(); + if( preg_match( '/Language([A-Z][a-z_]+)\.php$/', $f, $m ) ) { + $code = str_replace( '_', '-', strtolower( $m[1] ) ); + if( isset( $wgLanguageNames[$code] ) ) { + $name = $code . ' - ' . $wgLanguageNames[$code]; + } else { + $name = $code; + } + $codes[$code] = $name; + } + } + closedir( $d ); + ksort( $codes ); + return $codes; +} + +#Check for location of an executable +# @param string $loc single location to check +# @param array $names filenames to check for. +# @param mixed $versioninfo array of details to use when checking version, use false for no version checking +function locate_executable($loc, $names, $versioninfo = false) { + if (!is_array($names)) + $names = array($names); + + foreach ($names as $name) { + $command = "$loc".DIRECTORY_SEPARATOR."$name"; + if (file_exists($command)) { + if (!$versioninfo) + return $command; + + $file = str_replace('$1', $command, $versioninfo[0]); + if (strstr(`$file`, $versioninfo[1]) !== false) + return $command; + } + } + return false; +} + +# Test a memcached server +function testMemcachedServer( $server ) { + $hostport = explode(":", $server); + $errstr = false; + $fp = false; + if ( !function_exists( 'fsockopen' ) ) { + $errstr = "Can't connect to memcached, fsockopen() not present"; + } + if ( !$errstr && count( $hostport ) != 2 ) { + $errstr = 'Please specify host and port'; + var_dump( $hostport ); + } + if ( !$errstr ) { + list( $host, $port ) = $hostport; + $errno = 0; + $fsockerr = ''; + + $fp = @fsockopen( $host, $port, $errno, $fsockerr, 1.0 ); + if ( $fp === false ) { + $errstr = "Cannot connect to memcached on $host:$port : $fsockerr"; + } + } + if ( !$errstr ) { + $command = "version\r\n"; + $bytes = fwrite( $fp, $command ); + if ( $bytes != strlen( $command ) ) { + $errstr = "Cannot write to memcached socket on $host:$port"; + } + } + if ( !$errstr ) { + $expected = "VERSION "; + $response = fread( $fp, strlen( $expected ) ); + if ( $response != $expected ) { + $errstr = "Didn't get correct memcached response from $host:$port"; + } + } + if ( $fp ) { + fclose( $fp ); + } + if ( !$errstr ) { + echo "
  • Connected to memcached on $host:$port successfully"; + } + return $errstr; +} + +function database_picker($conf) { + global $ourdb; + print "\n"; + foreach(array_keys($ourdb) as $db) { + if ($ourdb[$db]['havedriver']) { + print "
  • "; + aField( $conf, "DBtype", $ourdb[$db]['fullname'], 'radio', $db, 'onclick'); + print "
  • \n"; + } + } + print "\n"; +} + +function database_switcher($db) { + global $ourdb; + $color = $ourdb[$db]['bgcolor']; + $full = $ourdb[$db]['fullname']; + print " + + +
    + + +
    + +

    MediaWiki is Copyright © 2001-2006 by Magnus Manske, Brion Vibber, Lee Daniel Crocker, Tim Starling, Erik Möller, Gabriel Wicke and others.

    +
    +
    + + + + + -- cgit v1.2.3-54-g00ecf