Mám nainstalovaný apache, php, mysql vše se chová OK.
Chci rozchodit mediawiki forum takže obsah jsem zkopíroval do www root adresáře a zadal
http://localhost/config/index.php = má se zobrazit stránka s hlavním nastavením
mě se zobrazí ale jako zdrojový kod kde jsem udělal chybu?
Asi nějaké php grafický script nemám povolený?
Díky
Lokální server zobrazuje se mi pouze zdrojový kod
- Stene
- Level 6
- Příspěvky: 3124
- Registrován: únor 09
- Bydliště: Jihlava
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: Lokální server zobrazuje se mi pouze zdrojový kod
Pošli sem zdrojový kód toho indexu.. Do jaké složky si to všechno vložil?
Najede ti samotný http://localhost ?
Najede ti samotný http://localhost ?
Re: Lokální server zobrazuje se mi pouze zdrojový kod
localhost jede normálně.
má to zobrazit toto: http://navody.c4.cz/img3/mediawiki-inst ... talace.jpg
mě to hodí (jde o první část)
<?php
# MediaWiki web-based config/installation
# Copyright (C) 2004 Brion Vibber <brion@pobox.com>, 2006 Rob Church <robchur@gmail.com>
# 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 );
# 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( "$IP/install-utils.inc" );
install_version_checks();
require_once( "$IP/includes/Defines.php" );
require_once( "$IP/includes/DefaultSettings.php" );
require_once( "$IP/includes/AutoLoader.php" );
require_once( "$IP/includes/MagicWord.php" );
require_once( "$IP/includes/Namespace.php" );
require_once( "$IP/includes/ProfilerStub.php" );
require_once( "$IP/includes/GlobalFunctions.php" );
require_once( "$IP/includes/Hooks.php" );
require_once( "$IP/includes/Exception.php" );
# If we get an exception, the user needs to know
# all the details
$wgShowExceptionDetails = true;
$wgShowSQLErrors = true;
wfInstallExceptionHandler();
## Databases we support:
$ourdb = array();
$ourdb['mysql']['fullname'] = 'MySQL';
$ourdb['mysql']['havedriver'] = 0;
$ourdb['mysql']['compile'] = 'mysql';
$ourdb['mysql']['bgcolor'] = '#ffe5a7';
$ourdb['mysql']['rootuser'] = 'root';
$ourdb['postgres']['fullname'] = 'PostgreSQL';
$ourdb['postgres']['havedriver'] = 0;
$ourdb['postgres']['compile'] = 'pgsql';
$ourdb['postgres']['bgcolor'] = '#aaccff';
$ourdb['postgres']['rootuser'] = 'postgres';
$ourdb['sqlite']['fullname'] = 'SQLite';
$ourdb['sqlite']['havedriver'] = 0;
$ourdb['sqlite']['compile'] = 'pdo_sqlite';
$ourdb['sqlite']['bgcolor'] = '#b1ebb1';
$ourdb['sqlite']['rootuser'] = '';
$ourdb['mssql']['fullname'] = 'MSSQL';
$ourdb['mssql']['havedriver'] = 0;
$ourdb['mssql']['compile'] = 'mssql not ready'; # Change to 'mssql' after includes/DatabaseMssql.php added;
$ourdb['mssql']['bgcolor'] = '#ffc0cb';
$ourdb['mssql']['rootuser'] = 'administrator';
$ourdb['ibm_db2']['fullname'] = 'DB2';
$ourdb['ibm_db2']['havedriver'] = 0;
$ourdb['ibm_db2']['compile'] = 'ibm_db2';
$ourdb['ibm_db2']['bgcolor'] = '#ffeba1';
$ourdb['ibm_db2']['rootuser'] = 'db2admin';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex,nofollow"/>
<title>MediaWiki <?php echo htmlspecialchars( $wgVersion ); ?> Installation</title>
<style type="text/css">
@import "../skins/monobook/main.css";
.env-check {
font-size: 90%;
margin: 1em 0 1em 2.5em;
}
.config-section {
margin-top: 2em;
}
.config-section label.column {
clear: left;
font-weight: bold;
width: 13em;
float: left;
text-align: right;
padding-right: 1em;
padding-top: .2em;
}
.config-input {
clear: left;
zoom: 100%; /* IE hack */
}
.config-section .config-desc {
clear: left;
margin: 0 0 2em 18em;
padding-top: 1em;
font-size: 85%;
}
.iput-text, .iput-password {
width: 14em;
margin-right: 1em;
}
.error {
color: red;
background-color: #fff;
font-weight: bold;
left: 1em;
font-size: 100%;
}
.error-top {
color: red;
background-color: #FFF0F0;
border: 2px solid red;
font-size: 130%;
font-weight: bold;
padding: 1em 1.5em;
margin: 2em 0 1em;
}
ul.plain {
list-style-type: none;
list-style-image: none;
float: left;
margin: 0;
padding: 0;
}
.btn-install {
font-weight: bold;
font-size: 110%;
padding: .2em .3em;
}
.license {
font-size: 85%;
padding-top: 3em;
}
span.success-message {
font-weight: bold;
font-size: 110%;
color: green;
}
.success-box {
font-size: 130%;
}
</style>
<script type="text/javascript">
<!--
function hideall() {
<?php foreach (array_keys($ourdb) as $db) {
echo "\n var i = document.getElementById('$db'); if (i) i.style.display='none';";
}
?>
}
function toggleDBarea(id,defaultroot) {
hideall();
var dbarea = document.getElementById(id);
if (dbarea) dbarea.style.display = (dbarea.style.display == 'none') ? 'block' : 'none';
var db = document.getElementById('RootUser');
if (defaultroot) {
<?php foreach (array_keys($ourdb) as $db) {
echo " if (id == '$db') { db.value = '".$ourdb[$db]['rootuser']."';}\n";
}?>
}
}
// -->
</script>
</head>
<body>
<div id="globalWrapper">
<div id="column-content">
<div id="content">
<div id="bodyContent">
<h1>MediaWiki <?php print htmlspecialchars( $wgVersion ) ?> Installation</h1>
<?php
$mainListOpened = false; # Is the main list (environement checking) opend ? Used by dieout
/* Check for existing configurations and bug out! */
if( file_exists( "../LocalSettings.php" ) ) {
$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php';
dieout( "<p><strong>Setup has completed, <a href='../$script'>your wiki</a> is configured.</strong></p>
<p>Please delete the /config directory for extra security.</p>" );
}
if( file_exists( "./LocalSettings.php" ) ) {
writeSuccessMessage();
dieout( '' );
}
if( !is_writable( "." ) ) {
dieout( "<h2>Can't write config file, aborting</h2>
<p>In order to configure the wiki you have to make the <tt>config</tt> subdirectory
writable by the web server. Once configuration is done you'll move the created
<tt>LocalSettings.php</tt> to the parent directory, and for added safety you can
then remove the <tt>config</tt> subdirectory entirely.</p>
<p>To make the directory writable on a Unix/Linux system:</p>
<pre>
cd <i>/path/to/wiki</i>
chmod a+w config
</pre>
<p>Afterwards retry to start the <a href=\"\">setup</a>.</p>" );
}
require_once( "$IP/install-utils.inc" );
require_once( "$IP/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 ); }
function setSchema( $schema, $engine ) {
$this->DBschema = $schema;
if ( !preg_match( '/^\w*$/', $engine ) ){
$engine = 'InnoDB';
}
switch ( $this->DBschema ) {
case 'mysql5':
$this->DBTableOptions = "ENGINE=$engine, DEFAULT CHARSET=utf8";
$this->DBmysql5 = 'true';
break;
case 'mysql5-binary':
$this->DBTableOptions = "ENGINE=$engine, DEFAULT CHARSET=binary";
$this->DBmysql5 = 'true';
break;
default:
$this->DBTableOptions = "TYPE=$engine";
$this->DBmysql5 = 'false';
}
$this->DBengine = $engine;
# Set the global for use during install
global $wgDBTableOptions;
$wgDBTableOptions = $this->DBTableOptions;
}
}
?>
<ul>
<li>
<b>Don't forget security updates!</b> Keep an eye on the
<a href="http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce">low-traffic
release announcements mailing list</a>.
</li>
</ul>
<h2>Checking environment...</h2>
<p><em>Please include all of the lines below when reporting installation problems.</em></p>
<ul class="env-check">
<?php
$mainListOpened = true;
$endl = "
";
define( 'MW_NO_OUTPUT_BUFFER', 1 );
$conf = new ConfigData;
install_version_checks();
$self = 'Installer'; # Maintenance script name, to please Setup.php
print "<li>PHP " . htmlspecialchars( phpversion() ) . " installed</li>\n";
error_reporting( 0 );
$phpdatabases = array();
foreach (array_keys($ourdb) as $db) {
$compname = $ourdb[$db]['compile'];
if( extension_loaded( $compname ) || ( mw_have_dl() && dl( "{$compname}." . PHP_SHLIB_SUFFIX ) ) ) {
array_push($phpdatabases, $db);
$ourdb[$db]['havedriver'] = 1;
}
}
error_reporting( E_ALL );
if (!$phpdatabases) {
print "Could not find a suitable database driver!<ul>";
foreach (array_keys($ourdb) AS $db) {
$comp = $ourdb[$db]['compile'];
$full = $ourdb[$db]['fullname'];
print "<li>For <b>$full</b>, compile PHP using <b>--with-$comp</b>, "
."or install the $comp.so module</li>\n";
}
echo '</ul>';
dieout( '' );
}
print "<li>Found database drivers for:";
$DefaultDBtype = '';
foreach (array_keys($ourdb) AS $db) {
if ($ourdb[$db]['havedriver']) {
if ( $DefaultDBtype == '' ) {
$DefaultDBtype = $db;
}
print " ".$ourdb[$db]['fullname'];
}
}
print "</li>\n";
if( wfIniGetBool( "register_globals" ) ) {
?>
<li>
<div style="font-size:110%">
<strong class="error">Warning:</strong>
<strong>PHP's <tt><a href="http://php.net/register_globals">register_globals</a></tt> option is enabled. Disable it if you can.</strong>
</div>
MediaWiki will work, but your server is more exposed to PHP-based security vulnerabilities.
</li>
<?php
}
$fatal = false;
if( wfIniGetBool( "magic_quotes_runtime" ) ) {
$fatal = true;
?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime'>magic_quotes_runtime</a> is active!</strong>
This option corrupts data input unpredictably; you cannot install or use
MediaWiki unless this option is disabled.</li>
<?php
}
if( wfIniGetBool( "magic_quotes_sybase" ) ) {
$fatal = true;
?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.sybase.php#ini.magic-quotes-sybase'>magic_quotes_sybase</a> is active!</strong>
This option corrupts data input unpredictably; you cannot install or use
MediaWiki unless this option is disabled.</li>
<?php
}
if( wfIniGetBool( "mbstring.func_overload" ) ) {
$fatal = true;
?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload'>mbstring.func_overload</a> is active!</strong>
This option causes errors and may corrupt data unpredictably;
you cannot install or use MediaWiki unless this option is disabled.</li>
<?php
}
if( wfIniGetBool( "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.</li>
<?php
}
if( $fatal ) {
dieout( "Cannot install MediaWiki." );
}
if( wfIniGetBool( "safe_mode" ) ) {
$conf->safeMode = true;
?>
<li><b class='error'>Warning:</b> <strong>PHP's
<a href='http://www.php.net/features.safe-mode'>safe mode</a> is active.</strong>
You may have problems caused by this, particularly if using image uploads.
</li>
<?php
} else {
$conf->safeMode = false;
}
$sapi = htmlspecialchars( php_sapi_name() );
print "<li>PHP server API is $sapi; ";
$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php';
if( $wgUsePathInfo ) {
print "ok, using pretty URLs (<tt>$script/Page_Title</tt>)";
} else {
print "using ugly URLs (<tt>$script?title=Page_Title</tt>)";
}
print "</li>\n";
$conf->xml = function_exists( "utf8_encode" );
if( $conf->xml ) {
print "<li>Have XML / Latin1-UTF-8 conversion support.</li>\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." );
}
# Check for session support
if( !function_exists( 'session_name' ) )
dieout( "PHP's session module is missing. MediaWiki requires session support in order to function." );
# 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 = mw_get_session_save_path();
$ssp = htmlspecialchars( $sessionSavePath );
# 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 (<tt>{$ssp}</tt>) appears to be valid.</li>";
} else {
# Something not right? Warn the user, but let them proceed
print "<li><strong>Warning:</strong> Your <tt>session.save_path</tt> value (<tt>{$ssp}</tt>)
appears to be invalid or is not writable. PHP needs to be able to save data to
this location for correct session operation.</li>";
}
# Check for PCRE support
if( !function_exists( 'preg_match' ) )
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 ) . ". ";
$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.<br /><b>" . htmlspecialchars( $memlimit ) . " seems too low, installation may fail!</b>";
} else {
$conf->raiseMemory = true;
print "ok.";
}
}
print "</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";
}
$conf->xcache = function_exists( 'xcache_get' );
if( $conf->xcache )
print "<li><a href=\"http://trac.lighttpd.net/xcache/\">XCache</a> installed</li>\n";
$conf->apc = function_exists('apc_fetch');
if ($conf->apc ) {
print "<li><a href=\"http://www.php.net/apc\">APC</a> installed</li>\n";
}
$conf->eaccel = function_exists( 'eaccelerator_get' );
if ( $conf->eaccel ) {
$conf->turck = 'eaccelerator';
print "<li><a href=\"http://eaccelerator.sourceforge.net/\">eAccelerator</a> installed</li>\n";
}
$conf->dba = function_exists( 'dba_open' );
if( !( $conf->turck || $conf->eaccel || $conf->apc || $conf->xcache ) ) {
echo( '<li>Couldn\'t find <a href="http://turck-mmcache.sourceforge.net">Turck MMCache</a>,
<a href="http://eaccelerator.sourceforge.net">eAccelerator</a>,
<a href="http://www.php.net/apc">APC</a> or <a href="http://trac.lighttpd.net/xcache/">XCache</a>;
cannot use these for object caching.</li>' );
}
$conf->diff3 = false;
$diff3locations = array_merge(
array(
"/usr/bin",
"/usr/local/bin",
"/opt/csw/bin",
"/usr/gnu/bin",
"/usr/sfw/bin" ),
explode( PATH_SEPARATOR, 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 "<li>Found GNU diff3: <tt>$conf->diff3</tt>.</li>";
else
print "<li>GNU diff3 not found.</li>";
$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 "<li>Found ImageMagick: <tt>$im</tt>; image thumbnailing will be enabled if you enable uploads.</li>\n";
$conf->ImageMagick = $im;
break;
}
}
$conf->HaveGD = function_exists( "imagejpeg" );
if( $conf->HaveGD ) {
print "<li>Found GD graphics library built-in";
if( !$conf->ImageMagick ) {
print ", image thumbnailing will be enabled if you enable uploads";
}
print ".</li>\n";
} else {
if( !$conf->ImageMagick ) {
print "<li>Couldn't find GD library or ImageMagick; image thumbnailing disabled.</li>\n";
}
}
$conf->IP = dirname( dirname( __FILE__ ) );
print "<li>Installation directory: <tt>" . htmlspecialchars( $conf->IP ) . "</tt></li>\n";
// 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
$path = ($_SERVER["PHP_SELF"] === '')
? $_SERVER["SCRIPT_NAME"]
: $_SERVER["PHP_SELF"];
$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $path );
print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</tt></li>\n";
// We may be installing from *.php5 extension file, if so, print message
$conf->ScriptExtension = '.php';
if (defined('MW_INSTALL_PHP5_EXT')) {
$conf->ScriptExtension = '.php5';
print "<li>Installing MediaWiki with <tt>php5</tt> file extensions</li>\n";
} else {
print "<li>Installing MediaWiki with <tt>php</tt> file extensions</li>\n";
}
print "<li style='font-weight:bold;color:green;font-size:110%'>Environment checked. You can install MediaWiki.</li>\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 );
if ( !isset( $ourdb[$conf->DBtype] ) ) {
$conf->DBtype = $DefaultDBtype;
}
$conf->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" );
$conf->RootUser = importPost( "RootUser", "root" );
$conf->RootPW = importPost( "RootPW", "" );
$useRoot = importCheck( 'useroot', false );
$conf->LanguageCode = importPost( "LanguageCode", "en" );
## MySQL specific:
$conf->DBprefix = importPost( "DBprefix" );
$conf->setSchema(
importPost( "DBschema", "mysql5-binary" ),
importPost( "DBengine", "InnoDB" ) );
## Postgres specific:
$conf->DBport = importPost( "DBport", "5432" );
$conf->DBmwschema = importPost( "DBmwschema", "mediawiki" );
$conf->DBts2schema = importPost( "DBts2schema", "public" );
## SQLite specific
$conf->SQLiteDataDir = importPost( "SQLiteDataDir", "" );
## MSSQL specific
// We need a second field so it doesn't overwrite the MySQL one
$conf->DBprefix2 = importPost( "DBprefix2" );
## DB2 specific:
// New variable in order to have a different default port number
$conf->DBport_db2 = importPost( "DBport_db2", "50000" );
$conf->DBmwschema = importPost( "DBmwschema", "mediawiki" );
$conf->DBcataloged = importPost( "DBcataloged", "cataloged" );
$conf->ShellLocale = getShellLocale( $conf->LanguageCode );
/* Check for validity */
$errs = array();
if( preg_match( '/^$|^mediawiki$|#/i', $conf->Sitename ) ) {
$errs["Sitename"] = "Must not be blank or \"MediaWiki\" and may not contain \"#\"";
}
if( $conf->DBuser == "" ) {
$errs["DBuser"] = "Must not be blank";
}
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 ) {
$errs["DBpassword2"] = "Passwords don't match!";
}
if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix ) ) {
$errs["DBprefix"] = "Invalid table prefix";
} else {
untaint( $conf->DBprefix, TC_MYSQL );
}
error_reporting( E_ALL );
/**
* Initialise $wgLang and $wgContLang to something so we can
* call case-folding methods. Per Brion, this is English for
* now, although we could be clever and initialise to the
* user-selected language.
*/
$wgContLang = Language::factory( 'en' );
$wgLang = $wgContLang;
/**
* We're messing about with users, so we need a stub
* authentication plugin...
*/
$wgAuth = new AuthPlugin();
/**
* Validate the initial administrator account; username,
* password checks, etc.
*/
if( $conf->SysopName ) {
# Check that the user can be created
$u = User::newFromName( $conf->SysopName );
if( is_a($u, 'User') ) { // please do not use instanceof, it breaks PHP4
# Various password checks
if( $conf->SysopPass != '' ) {
if( $conf->SysopPass == $conf->SysopPass2 ) {
if( !$u->isValidPassword( $conf->SysopPass ) ) {
$errs['SysopPass'] = "Bad password";
}
} else {
$errs['SysopPass2'] = "Passwords don't match";
}
} else {
$errs['SysopPass'] = "Cannot be blank";
}
unset( $u );
} else {
$errs['SysopName'] = "Bad username";
}
}
$conf->License = importRequest( "License", "none" );
if( $conf->License == "gfdl1_2" ) {
$conf->RightsUrl = "http://www.gnu.org/licenses/old-licenses/fdl-1.2.txt";
$conf->RightsText = "GNU Free Documentation License 1.2";
$conf->RightsCode = "gfdl1_2";
$conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png';
} elseif( $conf->License == "gfdl1_3" ) {
$conf->RightsUrl = "http://www.gnu.org/copyleft/fdl.html";
$conf->RightsText = "GNU Free Documentation License 1.3";
$conf->RightsCode = "gfdl1_3";
$conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png';
} elseif( $conf->License == "none" ) {
$conf->RightsUrl = $conf->RightsText = $conf->RightsCode = $conf->RightsIcon = "";
} elseif( $conf->License == "pd" ) {
$conf->RightsUrl = "http://creativecommons.org/licenses/publicdomain/";
$conf->RightsText = "Public Domain";
$conf->RightsCode = "pd";
$conf->RightsIcon = '${wgScriptPath}/skins/common/images/public-domain.png';
} 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 = wfArrayMap( '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 "<li style=\"list-style: none\">\n";
echo "<p><b>Generating configuration file...</b></p>\n";
echo "</li>\n";
$wgCommandLineMode = false;
chdir( ".." );
$ok = eval( $local );
if( $ok === false ) {
dieout( "<p>Errors in generated configuration; " .
"most likely due to a bug in the installer... " .
"Config file was: </p>" .
"<pre>" .
htmlspecialchars( $local ) .
"</pre>" );
}
$conf->DBtypename = '';
foreach (array_keys($ourdb) as $db) {
if ($conf->DBtype === $db)
$conf->DBtypename = $ourdb[$db]['fullname'];
}
if ( ! strlen($conf->DBtype)) {
$errs["DBpicktype"] = "Please choose a database type";
continue;
}
if (! $conf->DBtypename) {
$errs["DBtype"] = "Unknown database type '$conf->DBtype'";
continue;
}
print "<li>Database type: " . htmlspecialchars( $conf->DBtypename ) . "</li>\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;
if( $conf->DBprefix2 != '' ) {
// For MSSQL
$wgDBprefix = $conf->DBprefix2;
}
## DB2 specific:
$wgDBcataloged = $conf->DBcataloged;
$wgCommandLineMode = true;
if (! defined ( 'STDERR' ) )
define( 'STDERR', fopen("php://stderr", "wb"));
$wgUseDatabaseMessages = false; /* FIXME: For database failure */
require_once( "$IP/includes/Setup.php" );
chdir( "config" );
$wgTitle = Title::newFromText( "Installation script" );
error_reporting( E_ALL );
print "<li>Loading class: " . htmlspecialchars( $dbclass ) . "</li>\n";
if ( $conf->DBtype != 'sqlite' ) {
$dbc = new $dbclass;
}
if( $conf->DBtype == 'mysql' ) {
$mysqlOldClient = version_compare( mysql_get_client_info(), "4.1.0", "lt" );
if( $mysqlOldClient ) {
print "<li><b>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 <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
>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 ) {
$db_user = $conf->RootUser;
$db_pass = $conf->RootPW;
} else {
$db_user = $wgDBuser;
$db_pass = $wgDBpassword;
}
# Attempt to connect
echo( "<li>Attempting to connect to database server as " . htmlspecialchars( $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.</li>\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.</li>" );
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( htmlspecialchars( "failed with error [$errno] $errtx." ) . "</li>\n" );
$errs["DBserver"] = "Connection failed";
break;
} # switch
} #conn. att.
if( !$ok ) { continue; }
}
else if( $conf->DBtype == 'ibm_db2' ) {
if( $useRoot ) {
$db_user = $conf->RootUser;
$db_pass = $conf->RootPW;
} else {
$db_user = $wgDBuser;
$db_pass = $wgDBpassword;
}
echo( "<li>Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) .
"\" as \"" . htmlspecialchars( $db_user ) . "\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $db_user, $db_pass, $wgDBname, 1);
if (!$wgDatabase->isOpen()) {
print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
} else {
$myver = $wgDatabase->getServerVersion();
}
if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname);
} elseif ( $conf->DBtype == 'sqlite' ) {
if ("$wgSQLiteDataDir" == '') {
$wgSQLiteDataDir = dirname($_SERVER['DOCUMENT_ROOT']).'/data';
}
echo "<li>Attempting to connect to SQLite database at \"" .
htmlspecialchars( $wgSQLiteDataDir ) . "\"";
if ( !is_dir( $wgSQLiteDataDir ) ) {
if ( is_writable( dirname( $wgSQLiteDataDir ) ) ) {
$ok = wfMkdirParents( $wgSQLiteDataDir, $wgSQLiteDataDirMode );
} else {
$ok = false;
}
if ( !$ok ) {
echo ": cannot create data directory</li>";
$errs['SQLiteDataDir'] = 'Enter a valid data directory';
continue;
}
}
if ( !is_writable( $wgSQLiteDataDir ) ) {
echo ": data directory not writable</li>";
$errs['SQLiteDataDir'] = 'Enter a writable data directory';
continue;
}
$dataFile = "$wgSQLiteDataDir/$wgDBname.sqlite";
if ( file_exists( $dataFile ) && !is_writable( $dataFile ) ) {
echo ": data file not writable</li>";
$errs['SQLiteDataDir'] = "$wgDBname.sqlite is not writable";
continue;
}
$wgDatabase = new DatabaseSqlite( false, false, false, $wgDBname, 1 );
if (!$wgDatabase->isOpen()) {
print ": error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
$errs['SQLiteDataDir'] = 'Could not connect to database';
continue;
} else {
$myver = $wgDatabase->getServerVersion();
}
if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname);
echo "ok</li>\n";
} else { # not mysql
error_reporting( E_ALL );
$wgSuperUser = '';
## Possible connect as a superuser
// Changed !mysql to postgres check since it seems to only apply to postgres
if( $useRoot && $conf->DBtype == 'postgres' ) {
$wgDBsuperuser = $conf->RootUser;
echo( "<li>Attempting to connect to database \"postgres\" as superuser \"" .
htmlspecialchars( $wgDBsuperuser ) . "\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBsuperuser, $conf->RootPW, "postgres", 1);
if (!$wgDatabase->isOpen()) {
print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
$errs["DBserver"] = "Could not connect to database as superuser";
$errs["RootUser"] = "Check username";
$errs["RootPW"] = "and password";
continue;
}
$wgDatabase->initial_setup($conf->RootPW, 'postgres');
}
echo( "<li>Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) .
"\" as \"" . htmlspecialchars( $wgDBuser ) . "\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1);
if (!$wgDatabase->isOpen()) {
print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
} else {
$myver = $wgDatabase->getServerVersion();
}
if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname);
}
if ( !$wgDatabase->isOpen() ) {
$errs["DBserver"] = "Couldn't connect to database";
continue;
}
print "<li>Connected to " . htmlspecialchars( "{$conf->DBtype} $myver" );
if ($conf->DBtype == 'mysql') {
if( version_compare( $myver, "4.0.14" ) < 0 ) {
print "</li>\n";
dieout( "-- mysql 4.0.14 or later required. Aborting." );
}
$mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" );
if( $mysqlNewAuth && $mysqlOldClient ) {
print "; <b class='error'>You are using MySQL 4.1 server, but PHP is linked
to old client libraries; if you have trouble with authentication, see
<a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
}
if( $wgDBmysql5 ) {
if( $mysqlNewAuth ) {
print "; enabling MySQL 4.1/5.0 charset mode";
} else {
print "; <b class='error'>MySQL 4.1/5.0 charset mode enabled,
but older version detected; will likely fail.</b>";
}
}
print "</li>\n";
@$sel = $wgDatabase->selectDB( $wgDBname );
if( $sel ) {
print "<li>Database <tt>" . htmlspecialchars( $wgDBname ) . "</tt> exists</li>\n";
} else {
$err = mysql_errno();
$databaseSafe = htmlspecialchars( $wgDBname );
if( $err == 1102 /* Invalid database name */ ) {
print "<ul><li><strong>{$databaseSafe}</strong> is not a valid database name.</li></ul>";
continue;
} elseif( $err != 1049 /* Database doesn't exist */ ) {
print "<ul><li>Error selecting database <strong>{$databaseSafe}</strong>: {$err} ";
print htmlspecialchars( mysql_error() ) . "</li></ul>";
continue;
}
print "<li>Attempting to create database...</li>";
$res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" );
if( !$res ) {
print "<li>Couldn't create database <tt>" .
htmlspecialchars( $wgDBname ) .
"</tt>; try with root access or check your username/pass.</li>\n";
$errs["RootPW"] = "<- Enter";
continue;
}
print "<li>Created database <tt>" . htmlspecialchars( $wgDBname ) . "</tt></li>\n";
}
$wgDatabase->selectDB( $wgDBname );
}
else if ($conf->DBtype == 'postgres') {
if( version_compare( $myver, "8.0" ) < 0 ) {
dieout( "<b>Postgres 8.0 or later is required</b>. Aborting." );
}
}
if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) {
print "<li>There are already MediaWiki tables in this database. Checking if updates are needed...</li>\n";
if ( $conf->DBtype == 'mysql') {
# 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;
$existingEngine = false;
} else {
if ( 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 ( isset( $row->Engine ) ) {
$existingEngine = $row->Engine;
} else {
$existingEngine = $row->Type;
}
}
if ( $existingSchema && $existingSchema != $conf->DBschema ) {
$encExisting = htmlspecialchars( $existingSchema );
$encRequested = htmlspecialchars( $conf->DBschema );
print "<li><strong>Warning:</strong> you requested the $encRequested schema, " .
"but the existing database has the $encExisting schema. This upgrade script ".
"can't convert it, so it will remain $encExisting.</li>\n";
$conf->setSchema( $existingSchema, $conf->DBengine );
}
if ( $existingEngine && $existingEngine != $conf->DBengine ) {
$encExisting = htmlspecialchars( $existingEngine );
$encRequested = htmlspecialchars( $conf->DBengine );
print "<li><strong>Warning:</strong> you requested the $encRequested storage " .
"engine, but the existing database uses the $encExisting engine. This upgrade " .
"script can't convert it, so it will remain $encExisting.</li>\n";
$conf->setSchema( $conf->DBschema, $existingEngine );
}
}
# Create user if required
if ( $conf->Root ) {
$conn = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
if ( $conn->isOpen() ) {
print "<li>DB user account ok</li>\n";
$conn->close();
} else {
print "<li>Granting user permissions...";
if( $mysqlOldClient && $mysqlNewAuth ) {
print " <b class='error'>If the next step fails, see <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
}
print "</li>\n";
dbsource( "../maintenance/users.sql", $wgDatabase );
}
}
}
print "</ul><pre>\n";
chdir( ".." );
flush();
do_all_updates();
chdir( "config" );
print "</pre>\n";
print "<ul><li>Finished update checks.</li>\n";
} else {
# Determine available storage engines if possible
if ( $conf->DBtype == 'mysql' && version_compare( $myver, "4.1.2", "ge" ) ) {
$res = $wgDatabase->query( 'SHOW ENGINES' );
$found = false;
while ( $row = $wgDatabase->fetchObject( $res ) ) {
if ( $row->Engine == $conf->DBengine ) {
$found = true;
break;
}
}
$wgDatabase->freeResult( $res );
if ( !$found && $conf->DBengine != 'MyISAM' ) {
echo "<li><strong>Warning:</strong> " . htmlspecialchars( $conf->DBengine ) .
" storage engine not available, " .
"using MyISAM instead</li>\n";
$conf->setSchema( $conf->DBschema, 'MyISAM' );
}
}
# FIXME: Check for errors
print "<li>Creating tables...";
if ($conf->DBtype == 'mysql') {
dbsource( "../maintenance/tables.sql", $wgDatabase );
dbsource( "../maintenance/interwiki.sql", $wgDatabase );
} elseif (is_callable(array($wgDatabase, 'setup_database'))) {
$wgDatabase->setup_database();
}
else {
$errs["DBtype"] = "Do not know how to handle database type '$conf->DBtype'";
continue;
}
print " done.</li>\n";
print "<li>Initializing statistics...</li>\n";
$wgDatabase->insert( 'site_stats',
array ( 'ss_row_id' => 1,
'ss_total_views' => 0,
'ss_total_edits' => 1, # Main page first edit
'ss_good_articles' => 0, # Main page is not a good article - no internal link
'ss_total_pages' => 1, # Main page
'ss_users' => $conf->SysopName ? 1 : 0, # Sysop account, if created
'ss_admins' => $conf->SysopName ? 1 : 0, # Sysop account, if created
'ss_images' => 0 ) );
# Set up the "regular user" account *if we can, and if we need to*
if( $conf->Root and $conf->DBtype == 'mysql') {
# 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( "<li>User " . htmlspecialchars( $wgDBuser ) . " exists. Skipping grants.</li>\n" );
} else {
# Yes, so run the grants
echo( "<li>" . htmlspecialchars( "Granting user permissions to $wgDBuser on $wgDBname..." ) );
dbsource( "../maintenance/users.sql", $wgDatabase );
echo( "success.</li>\n" );
}
}
if( $conf->SysopName ) {
$u = User::newFromName( $conf->getSysopName() );
if ( !$u ) {
print "<li><strong class=\"error\">Warning:</strong> Skipped sysop account creation - invalid username!</li>\n";
}
else if ( 0 == $u->idForName() ) {
$u->addToDatabase();
$u->setPassword( $conf->getSysopPass() );
$u->saveSettings();
$u->addGroup( "sysop" );
$u->addGroup( "bureaucrat" );
print "<li>Created sysop account <tt>" .
htmlspecialchars( $conf->SysopName ) . "</tt>.</li>\n";
} else {
print "<li>Could not create user - already exists!</li>\n";
}
} else {
print "<li>Skipped sysop account creation, no name given.</li>\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" . wfMsgNoTrans( 'mainpagedocfooter' ),
'comment' => '',
'user' => 0,
'user_text' => 'MediaWiki default',
) );
$revid = $revision->insertOn( $wgDatabase );
$article->updateRevisionOn( $wgDatabase, $revision );
}
// Now that all database work is done, make sure everything is committed
$wgDatabase->commit();
/* 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";
// Fix up a common line-ending problem (due to CVS on Windows)
$localSettings = str_replace( "\r\n", "\n", $localSettings );
$f = fopen( "LocalSettings.php", 'xt' );
if( $f == false ) {
print( "</li>\n" );
dieout( "<p>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...</p>\n" .
"<p>Here's the file that would have been written, try to paste it into place manually:</p>\n" .
"<pre>\n" . htmlspecialchars( $localSettings ) . "</pre>\n" );
}
if(fwrite( $f, $localSettings ) ) {
fclose( $f );
print "<hr/>\n";
writeSuccessMessage();
print "</li>\n";
} else {
fclose( $f );
dieout( "<p class='error'>An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again.</p></li>\n" );
}
} while( false );
}
print "</ul>\n";
$mainListOpened = false;
if( count( $errs ) ) {
/* Display options form */
if( $conf->posted ) {
echo "<p class='error-top'>Something's not quite right yet; make sure everything below is filled out correctly.</p>\n";
}
?>
<form action="<?php echo defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php'; ?>" name="config" method="post">
<h2>Site config</h2>
<div class="config-section">
<div class="config-input">
<?php aField( $conf, "Sitename", "Wiki name:" ); ?>
</div>
<p class="config-desc">
Preferably a short word without punctuation, i.e. "Wikipedia".<br />
Will appear as the namespace name for "meta" pages, and throughout the interface.
</p>
<div class="config-input"><?php aField( $conf, "EmergencyContact", "Contact e-mail:" ); ?></div>
<p class="config-desc">
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.
</p>
<div class="config-input">
<label class='column' for="LanguageCode">Language:</label>
<select id="LanguageCode" name="LanguageCode"><?php
$list = getLanguageList();
foreach( $list as $code => $name ) {
$sel = ($code == $conf->LanguageCode) ? 'selected="selected"' : '';
$encCode = htmlspecialchars( $code );
$encName = htmlspecialchars( $name );
echo "\n\t\t<option value=\"$encCode\" $sel>$encName</option>";
}
echo "\n";
?>
</select>
</div>
<p class="config-desc">
Select the language for your wiki's interface. Some localizations aren't fully complete. Unicode (UTF-8) is used for all localizations.
</p>
<div class="config-input">
<label class='column'>Copyright/license:</label>
<ul class="plain">
<li><?php aField( $conf, "License", "No license metadata", "radio", "none" ); ?></li>
<li><?php aField( $conf, "License", "Public Domain", "radio", "pd" ); ?></li>
<li><?php aField( $conf, "License", "GNU Free Documentation License 1.2 (Wikipedia-compatible)", "radio", "gfdl1_2" ); ?></li>
<li><?php aField( $conf, "License", "GNU Free Documentation License 1.3", "radio", "gfdl1_3" ); ?></li>
<li><?php
aField( $conf, "License", "A Creative Commons license - ", "radio", "cc" );
$partner = "MediaWiki";
$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php';
$exit = urlencode( "$wgServer{$conf->ScriptPath}/config/$script?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 "<a href=\"$ccApp\" target='_blank'>choose</a>";
if( $conf->License == "cc" ) { ?>
<ul>
<li><?php aField( $conf, "RightsIcon", "<img src=\"" . htmlspecialchars( $conf->RightsIcon ) . "\" alt='(Creative Commons icon)' />", "hidden" ); ?></li>
<li><?php aField( $conf, "RightsText", htmlspecialchars( $conf->RightsText ), "hidden" ); ?></li>
<li><?php aField( $conf, "RightsCode", "code: " . htmlspecialchars( $conf->RightsCode ), "hidden" ); ?></li>
<li><?php aField( $conf, "RightsUrl", "<a href=\"" . htmlspecialchars( $conf->RightsUrl ) . "\">" . htmlspecialchars( $conf->RightsUrl ) . "</a>", "hidden" ); ?></li>
</ul>
<?php } ?>
</li>
</ul>
</div>
<p class="config-desc">
A notice, icon, and machine-readable copyright metadata will be displayed for the license you pick.
</p>
<div class="config-input">
<?php aField( $conf, "SysopName", "Admin username:" ) ?>
</div>
<div class="config-input">
<?php aField( $conf, "SysopPass", "Password:", "password" ) ?>
</div>
<div class="config-input">
<?php aField( $conf, "SysopPass2", "Password confirm:", "password" ) ?>
</div>
<p class="config-desc">
An admin can lock/delete pages, block users from editing, and do other maintenance tasks.<br />
A new account will be added only when creating a new wiki database.
<br /><br />
The password cannot be the same as the username.
</p>
<div class="config-input">
<label class='column'>Object caching:</label>
<ul class="plain">
<li><?php aField( $conf, "Shm", "No caching", "radio", "none" ); ?></li>
<?php
if ( $conf->turck ) {
echo "<li>";
aField( $conf, "Shm", "Turck MMCache", "radio", "turck" );
echo "</li>\n";
}
if( $conf->xcache ) {
echo "<li>";
aField( $conf, 'Shm', 'XCache', 'radio', 'xcache' );
echo "</li>\n";
}
if ( $conf->apc ) {
echo "<li>";
aField( $conf, "Shm", "APC", "radio", "apc" );
echo "</li>\n";
}
if ( $conf->eaccel ) {
echo "<li>";
aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" );
echo "</li>\n";
}
if ( $conf->dba ) {
echo "<li>";
aField( $conf, "Shm", "DBA (not recommended)", "radio", "dba" );
echo "</li>";
}
?>
<li><?php aField( $conf, "Shm", "Memcached", "radio", "memcached" ); ?></li>
</ul>
<div style="clear:left"><?php aField( $conf, "MCServers", "Memcached servers:", "text" ) ?></div>
</div>
<p class="config-desc">
An object caching system such as memcached will provide a significant performance boost,
but needs to be installed. Provide the server addresses and ports in a comma-separated list.
<br /><br />
MediaWiki can also detect and support eAccelerator, Turck MMCache, APC, and XCache, but
these should not be used if the wiki will be running on multiple application servers.
<br/><br/>
DBA (Berkeley-style DB) is generally slower than using no cache at all, and is only
recommended for testing.
</p>
</div>
<h2>E-mail, e-mail notification and authentication setup</h2>
<div class="config-section">
<div class="config-input">
<label class='column'>E-mail features (global):</label>
<ul class="plain">
<li><?php aField( $conf, "Email", "Enabled", "radio", "email_enabled" ); ?></li>
<li><?php aField( $conf, "Email", "Disabled", "radio", "email_disabled" ); ?></li>
</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)
if sending mail doesn't work on your server.
</p>
má to zobrazit toto: http://navody.c4.cz/img3/mediawiki-inst ... talace.jpg
mě to hodí (jde o první část)
<?php
# MediaWiki web-based config/installation
# Copyright (C) 2004 Brion Vibber <brion@pobox.com>, 2006 Rob Church <robchur@gmail.com>
# 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 );
# 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( "$IP/install-utils.inc" );
install_version_checks();
require_once( "$IP/includes/Defines.php" );
require_once( "$IP/includes/DefaultSettings.php" );
require_once( "$IP/includes/AutoLoader.php" );
require_once( "$IP/includes/MagicWord.php" );
require_once( "$IP/includes/Namespace.php" );
require_once( "$IP/includes/ProfilerStub.php" );
require_once( "$IP/includes/GlobalFunctions.php" );
require_once( "$IP/includes/Hooks.php" );
require_once( "$IP/includes/Exception.php" );
# If we get an exception, the user needs to know
# all the details
$wgShowExceptionDetails = true;
$wgShowSQLErrors = true;
wfInstallExceptionHandler();
## Databases we support:
$ourdb = array();
$ourdb['mysql']['fullname'] = 'MySQL';
$ourdb['mysql']['havedriver'] = 0;
$ourdb['mysql']['compile'] = 'mysql';
$ourdb['mysql']['bgcolor'] = '#ffe5a7';
$ourdb['mysql']['rootuser'] = 'root';
$ourdb['postgres']['fullname'] = 'PostgreSQL';
$ourdb['postgres']['havedriver'] = 0;
$ourdb['postgres']['compile'] = 'pgsql';
$ourdb['postgres']['bgcolor'] = '#aaccff';
$ourdb['postgres']['rootuser'] = 'postgres';
$ourdb['sqlite']['fullname'] = 'SQLite';
$ourdb['sqlite']['havedriver'] = 0;
$ourdb['sqlite']['compile'] = 'pdo_sqlite';
$ourdb['sqlite']['bgcolor'] = '#b1ebb1';
$ourdb['sqlite']['rootuser'] = '';
$ourdb['mssql']['fullname'] = 'MSSQL';
$ourdb['mssql']['havedriver'] = 0;
$ourdb['mssql']['compile'] = 'mssql not ready'; # Change to 'mssql' after includes/DatabaseMssql.php added;
$ourdb['mssql']['bgcolor'] = '#ffc0cb';
$ourdb['mssql']['rootuser'] = 'administrator';
$ourdb['ibm_db2']['fullname'] = 'DB2';
$ourdb['ibm_db2']['havedriver'] = 0;
$ourdb['ibm_db2']['compile'] = 'ibm_db2';
$ourdb['ibm_db2']['bgcolor'] = '#ffeba1';
$ourdb['ibm_db2']['rootuser'] = 'db2admin';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex,nofollow"/>
<title>MediaWiki <?php echo htmlspecialchars( $wgVersion ); ?> Installation</title>
<style type="text/css">
@import "../skins/monobook/main.css";
.env-check {
font-size: 90%;
margin: 1em 0 1em 2.5em;
}
.config-section {
margin-top: 2em;
}
.config-section label.column {
clear: left;
font-weight: bold;
width: 13em;
float: left;
text-align: right;
padding-right: 1em;
padding-top: .2em;
}
.config-input {
clear: left;
zoom: 100%; /* IE hack */
}
.config-section .config-desc {
clear: left;
margin: 0 0 2em 18em;
padding-top: 1em;
font-size: 85%;
}
.iput-text, .iput-password {
width: 14em;
margin-right: 1em;
}
.error {
color: red;
background-color: #fff;
font-weight: bold;
left: 1em;
font-size: 100%;
}
.error-top {
color: red;
background-color: #FFF0F0;
border: 2px solid red;
font-size: 130%;
font-weight: bold;
padding: 1em 1.5em;
margin: 2em 0 1em;
}
ul.plain {
list-style-type: none;
list-style-image: none;
float: left;
margin: 0;
padding: 0;
}
.btn-install {
font-weight: bold;
font-size: 110%;
padding: .2em .3em;
}
.license {
font-size: 85%;
padding-top: 3em;
}
span.success-message {
font-weight: bold;
font-size: 110%;
color: green;
}
.success-box {
font-size: 130%;
}
</style>
<script type="text/javascript">
<!--
function hideall() {
<?php foreach (array_keys($ourdb) as $db) {
echo "\n var i = document.getElementById('$db'); if (i) i.style.display='none';";
}
?>
}
function toggleDBarea(id,defaultroot) {
hideall();
var dbarea = document.getElementById(id);
if (dbarea) dbarea.style.display = (dbarea.style.display == 'none') ? 'block' : 'none';
var db = document.getElementById('RootUser');
if (defaultroot) {
<?php foreach (array_keys($ourdb) as $db) {
echo " if (id == '$db') { db.value = '".$ourdb[$db]['rootuser']."';}\n";
}?>
}
}
// -->
</script>
</head>
<body>
<div id="globalWrapper">
<div id="column-content">
<div id="content">
<div id="bodyContent">
<h1>MediaWiki <?php print htmlspecialchars( $wgVersion ) ?> Installation</h1>
<?php
$mainListOpened = false; # Is the main list (environement checking) opend ? Used by dieout
/* Check for existing configurations and bug out! */
if( file_exists( "../LocalSettings.php" ) ) {
$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php';
dieout( "<p><strong>Setup has completed, <a href='../$script'>your wiki</a> is configured.</strong></p>
<p>Please delete the /config directory for extra security.</p>" );
}
if( file_exists( "./LocalSettings.php" ) ) {
writeSuccessMessage();
dieout( '' );
}
if( !is_writable( "." ) ) {
dieout( "<h2>Can't write config file, aborting</h2>
<p>In order to configure the wiki you have to make the <tt>config</tt> subdirectory
writable by the web server. Once configuration is done you'll move the created
<tt>LocalSettings.php</tt> to the parent directory, and for added safety you can
then remove the <tt>config</tt> subdirectory entirely.</p>
<p>To make the directory writable on a Unix/Linux system:</p>
<pre>
cd <i>/path/to/wiki</i>
chmod a+w config
</pre>
<p>Afterwards retry to start the <a href=\"\">setup</a>.</p>" );
}
require_once( "$IP/install-utils.inc" );
require_once( "$IP/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 ); }
function setSchema( $schema, $engine ) {
$this->DBschema = $schema;
if ( !preg_match( '/^\w*$/', $engine ) ){
$engine = 'InnoDB';
}
switch ( $this->DBschema ) {
case 'mysql5':
$this->DBTableOptions = "ENGINE=$engine, DEFAULT CHARSET=utf8";
$this->DBmysql5 = 'true';
break;
case 'mysql5-binary':
$this->DBTableOptions = "ENGINE=$engine, DEFAULT CHARSET=binary";
$this->DBmysql5 = 'true';
break;
default:
$this->DBTableOptions = "TYPE=$engine";
$this->DBmysql5 = 'false';
}
$this->DBengine = $engine;
# Set the global for use during install
global $wgDBTableOptions;
$wgDBTableOptions = $this->DBTableOptions;
}
}
?>
<ul>
<li>
<b>Don't forget security updates!</b> Keep an eye on the
<a href="http://lists.wikimedia.org/mailman/listinfo/mediawiki-announce">low-traffic
release announcements mailing list</a>.
</li>
</ul>
<h2>Checking environment...</h2>
<p><em>Please include all of the lines below when reporting installation problems.</em></p>
<ul class="env-check">
<?php
$mainListOpened = true;
$endl = "
";
define( 'MW_NO_OUTPUT_BUFFER', 1 );
$conf = new ConfigData;
install_version_checks();
$self = 'Installer'; # Maintenance script name, to please Setup.php
print "<li>PHP " . htmlspecialchars( phpversion() ) . " installed</li>\n";
error_reporting( 0 );
$phpdatabases = array();
foreach (array_keys($ourdb) as $db) {
$compname = $ourdb[$db]['compile'];
if( extension_loaded( $compname ) || ( mw_have_dl() && dl( "{$compname}." . PHP_SHLIB_SUFFIX ) ) ) {
array_push($phpdatabases, $db);
$ourdb[$db]['havedriver'] = 1;
}
}
error_reporting( E_ALL );
if (!$phpdatabases) {
print "Could not find a suitable database driver!<ul>";
foreach (array_keys($ourdb) AS $db) {
$comp = $ourdb[$db]['compile'];
$full = $ourdb[$db]['fullname'];
print "<li>For <b>$full</b>, compile PHP using <b>--with-$comp</b>, "
."or install the $comp.so module</li>\n";
}
echo '</ul>';
dieout( '' );
}
print "<li>Found database drivers for:";
$DefaultDBtype = '';
foreach (array_keys($ourdb) AS $db) {
if ($ourdb[$db]['havedriver']) {
if ( $DefaultDBtype == '' ) {
$DefaultDBtype = $db;
}
print " ".$ourdb[$db]['fullname'];
}
}
print "</li>\n";
if( wfIniGetBool( "register_globals" ) ) {
?>
<li>
<div style="font-size:110%">
<strong class="error">Warning:</strong>
<strong>PHP's <tt><a href="http://php.net/register_globals">register_globals</a></tt> option is enabled. Disable it if you can.</strong>
</div>
MediaWiki will work, but your server is more exposed to PHP-based security vulnerabilities.
</li>
<?php
}
$fatal = false;
if( wfIniGetBool( "magic_quotes_runtime" ) ) {
$fatal = true;
?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime'>magic_quotes_runtime</a> is active!</strong>
This option corrupts data input unpredictably; you cannot install or use
MediaWiki unless this option is disabled.</li>
<?php
}
if( wfIniGetBool( "magic_quotes_sybase" ) ) {
$fatal = true;
?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.sybase.php#ini.magic-quotes-sybase'>magic_quotes_sybase</a> is active!</strong>
This option corrupts data input unpredictably; you cannot install or use
MediaWiki unless this option is disabled.</li>
<?php
}
if( wfIniGetBool( "mbstring.func_overload" ) ) {
$fatal = true;
?><li class='error'><strong>Fatal: <a href='http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload'>mbstring.func_overload</a> is active!</strong>
This option causes errors and may corrupt data unpredictably;
you cannot install or use MediaWiki unless this option is disabled.</li>
<?php
}
if( wfIniGetBool( "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.</li>
<?php
}
if( $fatal ) {
dieout( "Cannot install MediaWiki." );
}
if( wfIniGetBool( "safe_mode" ) ) {
$conf->safeMode = true;
?>
<li><b class='error'>Warning:</b> <strong>PHP's
<a href='http://www.php.net/features.safe-mode'>safe mode</a> is active.</strong>
You may have problems caused by this, particularly if using image uploads.
</li>
<?php
} else {
$conf->safeMode = false;
}
$sapi = htmlspecialchars( php_sapi_name() );
print "<li>PHP server API is $sapi; ";
$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php';
if( $wgUsePathInfo ) {
print "ok, using pretty URLs (<tt>$script/Page_Title</tt>)";
} else {
print "using ugly URLs (<tt>$script?title=Page_Title</tt>)";
}
print "</li>\n";
$conf->xml = function_exists( "utf8_encode" );
if( $conf->xml ) {
print "<li>Have XML / Latin1-UTF-8 conversion support.</li>\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." );
}
# Check for session support
if( !function_exists( 'session_name' ) )
dieout( "PHP's session module is missing. MediaWiki requires session support in order to function." );
# 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 = mw_get_session_save_path();
$ssp = htmlspecialchars( $sessionSavePath );
# 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 (<tt>{$ssp}</tt>) appears to be valid.</li>";
} else {
# Something not right? Warn the user, but let them proceed
print "<li><strong>Warning:</strong> Your <tt>session.save_path</tt> value (<tt>{$ssp}</tt>)
appears to be invalid or is not writable. PHP needs to be able to save data to
this location for correct session operation.</li>";
}
# Check for PCRE support
if( !function_exists( 'preg_match' ) )
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 ) . ". ";
$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.<br /><b>" . htmlspecialchars( $memlimit ) . " seems too low, installation may fail!</b>";
} else {
$conf->raiseMemory = true;
print "ok.";
}
}
print "</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";
}
$conf->xcache = function_exists( 'xcache_get' );
if( $conf->xcache )
print "<li><a href=\"http://trac.lighttpd.net/xcache/\">XCache</a> installed</li>\n";
$conf->apc = function_exists('apc_fetch');
if ($conf->apc ) {
print "<li><a href=\"http://www.php.net/apc\">APC</a> installed</li>\n";
}
$conf->eaccel = function_exists( 'eaccelerator_get' );
if ( $conf->eaccel ) {
$conf->turck = 'eaccelerator';
print "<li><a href=\"http://eaccelerator.sourceforge.net/\">eAccelerator</a> installed</li>\n";
}
$conf->dba = function_exists( 'dba_open' );
if( !( $conf->turck || $conf->eaccel || $conf->apc || $conf->xcache ) ) {
echo( '<li>Couldn\'t find <a href="http://turck-mmcache.sourceforge.net">Turck MMCache</a>,
<a href="http://eaccelerator.sourceforge.net">eAccelerator</a>,
<a href="http://www.php.net/apc">APC</a> or <a href="http://trac.lighttpd.net/xcache/">XCache</a>;
cannot use these for object caching.</li>' );
}
$conf->diff3 = false;
$diff3locations = array_merge(
array(
"/usr/bin",
"/usr/local/bin",
"/opt/csw/bin",
"/usr/gnu/bin",
"/usr/sfw/bin" ),
explode( PATH_SEPARATOR, 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 "<li>Found GNU diff3: <tt>$conf->diff3</tt>.</li>";
else
print "<li>GNU diff3 not found.</li>";
$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 "<li>Found ImageMagick: <tt>$im</tt>; image thumbnailing will be enabled if you enable uploads.</li>\n";
$conf->ImageMagick = $im;
break;
}
}
$conf->HaveGD = function_exists( "imagejpeg" );
if( $conf->HaveGD ) {
print "<li>Found GD graphics library built-in";
if( !$conf->ImageMagick ) {
print ", image thumbnailing will be enabled if you enable uploads";
}
print ".</li>\n";
} else {
if( !$conf->ImageMagick ) {
print "<li>Couldn't find GD library or ImageMagick; image thumbnailing disabled.</li>\n";
}
}
$conf->IP = dirname( dirname( __FILE__ ) );
print "<li>Installation directory: <tt>" . htmlspecialchars( $conf->IP ) . "</tt></li>\n";
// 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
$path = ($_SERVER["PHP_SELF"] === '')
? $_SERVER["SCRIPT_NAME"]
: $_SERVER["PHP_SELF"];
$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $path );
print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</tt></li>\n";
// We may be installing from *.php5 extension file, if so, print message
$conf->ScriptExtension = '.php';
if (defined('MW_INSTALL_PHP5_EXT')) {
$conf->ScriptExtension = '.php5';
print "<li>Installing MediaWiki with <tt>php5</tt> file extensions</li>\n";
} else {
print "<li>Installing MediaWiki with <tt>php</tt> file extensions</li>\n";
}
print "<li style='font-weight:bold;color:green;font-size:110%'>Environment checked. You can install MediaWiki.</li>\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 );
if ( !isset( $ourdb[$conf->DBtype] ) ) {
$conf->DBtype = $DefaultDBtype;
}
$conf->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" );
$conf->RootUser = importPost( "RootUser", "root" );
$conf->RootPW = importPost( "RootPW", "" );
$useRoot = importCheck( 'useroot', false );
$conf->LanguageCode = importPost( "LanguageCode", "en" );
## MySQL specific:
$conf->DBprefix = importPost( "DBprefix" );
$conf->setSchema(
importPost( "DBschema", "mysql5-binary" ),
importPost( "DBengine", "InnoDB" ) );
## Postgres specific:
$conf->DBport = importPost( "DBport", "5432" );
$conf->DBmwschema = importPost( "DBmwschema", "mediawiki" );
$conf->DBts2schema = importPost( "DBts2schema", "public" );
## SQLite specific
$conf->SQLiteDataDir = importPost( "SQLiteDataDir", "" );
## MSSQL specific
// We need a second field so it doesn't overwrite the MySQL one
$conf->DBprefix2 = importPost( "DBprefix2" );
## DB2 specific:
// New variable in order to have a different default port number
$conf->DBport_db2 = importPost( "DBport_db2", "50000" );
$conf->DBmwschema = importPost( "DBmwschema", "mediawiki" );
$conf->DBcataloged = importPost( "DBcataloged", "cataloged" );
$conf->ShellLocale = getShellLocale( $conf->LanguageCode );
/* Check for validity */
$errs = array();
if( preg_match( '/^$|^mediawiki$|#/i', $conf->Sitename ) ) {
$errs["Sitename"] = "Must not be blank or \"MediaWiki\" and may not contain \"#\"";
}
if( $conf->DBuser == "" ) {
$errs["DBuser"] = "Must not be blank";
}
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 ) {
$errs["DBpassword2"] = "Passwords don't match!";
}
if( !preg_match( '/^[A-Za-z_0-9]*$/', $conf->DBprefix ) ) {
$errs["DBprefix"] = "Invalid table prefix";
} else {
untaint( $conf->DBprefix, TC_MYSQL );
}
error_reporting( E_ALL );
/**
* Initialise $wgLang and $wgContLang to something so we can
* call case-folding methods. Per Brion, this is English for
* now, although we could be clever and initialise to the
* user-selected language.
*/
$wgContLang = Language::factory( 'en' );
$wgLang = $wgContLang;
/**
* We're messing about with users, so we need a stub
* authentication plugin...
*/
$wgAuth = new AuthPlugin();
/**
* Validate the initial administrator account; username,
* password checks, etc.
*/
if( $conf->SysopName ) {
# Check that the user can be created
$u = User::newFromName( $conf->SysopName );
if( is_a($u, 'User') ) { // please do not use instanceof, it breaks PHP4
# Various password checks
if( $conf->SysopPass != '' ) {
if( $conf->SysopPass == $conf->SysopPass2 ) {
if( !$u->isValidPassword( $conf->SysopPass ) ) {
$errs['SysopPass'] = "Bad password";
}
} else {
$errs['SysopPass2'] = "Passwords don't match";
}
} else {
$errs['SysopPass'] = "Cannot be blank";
}
unset( $u );
} else {
$errs['SysopName'] = "Bad username";
}
}
$conf->License = importRequest( "License", "none" );
if( $conf->License == "gfdl1_2" ) {
$conf->RightsUrl = "http://www.gnu.org/licenses/old-licenses/fdl-1.2.txt";
$conf->RightsText = "GNU Free Documentation License 1.2";
$conf->RightsCode = "gfdl1_2";
$conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png';
} elseif( $conf->License == "gfdl1_3" ) {
$conf->RightsUrl = "http://www.gnu.org/copyleft/fdl.html";
$conf->RightsText = "GNU Free Documentation License 1.3";
$conf->RightsCode = "gfdl1_3";
$conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png';
} elseif( $conf->License == "none" ) {
$conf->RightsUrl = $conf->RightsText = $conf->RightsCode = $conf->RightsIcon = "";
} elseif( $conf->License == "pd" ) {
$conf->RightsUrl = "http://creativecommons.org/licenses/publicdomain/";
$conf->RightsText = "Public Domain";
$conf->RightsCode = "pd";
$conf->RightsIcon = '${wgScriptPath}/skins/common/images/public-domain.png';
} 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 = wfArrayMap( '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 "<li style=\"list-style: none\">\n";
echo "<p><b>Generating configuration file...</b></p>\n";
echo "</li>\n";
$wgCommandLineMode = false;
chdir( ".." );
$ok = eval( $local );
if( $ok === false ) {
dieout( "<p>Errors in generated configuration; " .
"most likely due to a bug in the installer... " .
"Config file was: </p>" .
"<pre>" .
htmlspecialchars( $local ) .
"</pre>" );
}
$conf->DBtypename = '';
foreach (array_keys($ourdb) as $db) {
if ($conf->DBtype === $db)
$conf->DBtypename = $ourdb[$db]['fullname'];
}
if ( ! strlen($conf->DBtype)) {
$errs["DBpicktype"] = "Please choose a database type";
continue;
}
if (! $conf->DBtypename) {
$errs["DBtype"] = "Unknown database type '$conf->DBtype'";
continue;
}
print "<li>Database type: " . htmlspecialchars( $conf->DBtypename ) . "</li>\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;
if( $conf->DBprefix2 != '' ) {
// For MSSQL
$wgDBprefix = $conf->DBprefix2;
}
## DB2 specific:
$wgDBcataloged = $conf->DBcataloged;
$wgCommandLineMode = true;
if (! defined ( 'STDERR' ) )
define( 'STDERR', fopen("php://stderr", "wb"));
$wgUseDatabaseMessages = false; /* FIXME: For database failure */
require_once( "$IP/includes/Setup.php" );
chdir( "config" );
$wgTitle = Title::newFromText( "Installation script" );
error_reporting( E_ALL );
print "<li>Loading class: " . htmlspecialchars( $dbclass ) . "</li>\n";
if ( $conf->DBtype != 'sqlite' ) {
$dbc = new $dbclass;
}
if( $conf->DBtype == 'mysql' ) {
$mysqlOldClient = version_compare( mysql_get_client_info(), "4.1.0", "lt" );
if( $mysqlOldClient ) {
print "<li><b>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 <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
>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 ) {
$db_user = $conf->RootUser;
$db_pass = $conf->RootPW;
} else {
$db_user = $wgDBuser;
$db_pass = $wgDBpassword;
}
# Attempt to connect
echo( "<li>Attempting to connect to database server as " . htmlspecialchars( $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.</li>\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.</li>" );
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( htmlspecialchars( "failed with error [$errno] $errtx." ) . "</li>\n" );
$errs["DBserver"] = "Connection failed";
break;
} # switch
} #conn. att.
if( !$ok ) { continue; }
}
else if( $conf->DBtype == 'ibm_db2' ) {
if( $useRoot ) {
$db_user = $conf->RootUser;
$db_pass = $conf->RootPW;
} else {
$db_user = $wgDBuser;
$db_pass = $wgDBpassword;
}
echo( "<li>Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) .
"\" as \"" . htmlspecialchars( $db_user ) . "\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $db_user, $db_pass, $wgDBname, 1);
if (!$wgDatabase->isOpen()) {
print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
} else {
$myver = $wgDatabase->getServerVersion();
}
if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname);
} elseif ( $conf->DBtype == 'sqlite' ) {
if ("$wgSQLiteDataDir" == '') {
$wgSQLiteDataDir = dirname($_SERVER['DOCUMENT_ROOT']).'/data';
}
echo "<li>Attempting to connect to SQLite database at \"" .
htmlspecialchars( $wgSQLiteDataDir ) . "\"";
if ( !is_dir( $wgSQLiteDataDir ) ) {
if ( is_writable( dirname( $wgSQLiteDataDir ) ) ) {
$ok = wfMkdirParents( $wgSQLiteDataDir, $wgSQLiteDataDirMode );
} else {
$ok = false;
}
if ( !$ok ) {
echo ": cannot create data directory</li>";
$errs['SQLiteDataDir'] = 'Enter a valid data directory';
continue;
}
}
if ( !is_writable( $wgSQLiteDataDir ) ) {
echo ": data directory not writable</li>";
$errs['SQLiteDataDir'] = 'Enter a writable data directory';
continue;
}
$dataFile = "$wgSQLiteDataDir/$wgDBname.sqlite";
if ( file_exists( $dataFile ) && !is_writable( $dataFile ) ) {
echo ": data file not writable</li>";
$errs['SQLiteDataDir'] = "$wgDBname.sqlite is not writable";
continue;
}
$wgDatabase = new DatabaseSqlite( false, false, false, $wgDBname, 1 );
if (!$wgDatabase->isOpen()) {
print ": error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
$errs['SQLiteDataDir'] = 'Could not connect to database';
continue;
} else {
$myver = $wgDatabase->getServerVersion();
}
if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname);
echo "ok</li>\n";
} else { # not mysql
error_reporting( E_ALL );
$wgSuperUser = '';
## Possible connect as a superuser
// Changed !mysql to postgres check since it seems to only apply to postgres
if( $useRoot && $conf->DBtype == 'postgres' ) {
$wgDBsuperuser = $conf->RootUser;
echo( "<li>Attempting to connect to database \"postgres\" as superuser \"" .
htmlspecialchars( $wgDBsuperuser ) . "\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBsuperuser, $conf->RootPW, "postgres", 1);
if (!$wgDatabase->isOpen()) {
print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
$errs["DBserver"] = "Could not connect to database as superuser";
$errs["RootUser"] = "Check username";
$errs["RootPW"] = "and password";
continue;
}
$wgDatabase->initial_setup($conf->RootPW, 'postgres');
}
echo( "<li>Attempting to connect to database \"" . htmlspecialchars( $wgDBname ) .
"\" as \"" . htmlspecialchars( $wgDBuser ) . "\"..." );
$wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1);
if (!$wgDatabase->isOpen()) {
print " error: " . htmlspecialchars( $wgDatabase->lastError() ) . "</li>\n";
} else {
$myver = $wgDatabase->getServerVersion();
}
if (is_callable(array($wgDatabase, 'initial_setup'))) $wgDatabase->initial_setup('', $wgDBname);
}
if ( !$wgDatabase->isOpen() ) {
$errs["DBserver"] = "Couldn't connect to database";
continue;
}
print "<li>Connected to " . htmlspecialchars( "{$conf->DBtype} $myver" );
if ($conf->DBtype == 'mysql') {
if( version_compare( $myver, "4.0.14" ) < 0 ) {
print "</li>\n";
dieout( "-- mysql 4.0.14 or later required. Aborting." );
}
$mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" );
if( $mysqlNewAuth && $mysqlOldClient ) {
print "; <b class='error'>You are using MySQL 4.1 server, but PHP is linked
to old client libraries; if you have trouble with authentication, see
<a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
}
if( $wgDBmysql5 ) {
if( $mysqlNewAuth ) {
print "; enabling MySQL 4.1/5.0 charset mode";
} else {
print "; <b class='error'>MySQL 4.1/5.0 charset mode enabled,
but older version detected; will likely fail.</b>";
}
}
print "</li>\n";
@$sel = $wgDatabase->selectDB( $wgDBname );
if( $sel ) {
print "<li>Database <tt>" . htmlspecialchars( $wgDBname ) . "</tt> exists</li>\n";
} else {
$err = mysql_errno();
$databaseSafe = htmlspecialchars( $wgDBname );
if( $err == 1102 /* Invalid database name */ ) {
print "<ul><li><strong>{$databaseSafe}</strong> is not a valid database name.</li></ul>";
continue;
} elseif( $err != 1049 /* Database doesn't exist */ ) {
print "<ul><li>Error selecting database <strong>{$databaseSafe}</strong>: {$err} ";
print htmlspecialchars( mysql_error() ) . "</li></ul>";
continue;
}
print "<li>Attempting to create database...</li>";
$res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" );
if( !$res ) {
print "<li>Couldn't create database <tt>" .
htmlspecialchars( $wgDBname ) .
"</tt>; try with root access or check your username/pass.</li>\n";
$errs["RootPW"] = "<- Enter";
continue;
}
print "<li>Created database <tt>" . htmlspecialchars( $wgDBname ) . "</tt></li>\n";
}
$wgDatabase->selectDB( $wgDBname );
}
else if ($conf->DBtype == 'postgres') {
if( version_compare( $myver, "8.0" ) < 0 ) {
dieout( "<b>Postgres 8.0 or later is required</b>. Aborting." );
}
}
if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) {
print "<li>There are already MediaWiki tables in this database. Checking if updates are needed...</li>\n";
if ( $conf->DBtype == 'mysql') {
# 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;
$existingEngine = false;
} else {
if ( 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 ( isset( $row->Engine ) ) {
$existingEngine = $row->Engine;
} else {
$existingEngine = $row->Type;
}
}
if ( $existingSchema && $existingSchema != $conf->DBschema ) {
$encExisting = htmlspecialchars( $existingSchema );
$encRequested = htmlspecialchars( $conf->DBschema );
print "<li><strong>Warning:</strong> you requested the $encRequested schema, " .
"but the existing database has the $encExisting schema. This upgrade script ".
"can't convert it, so it will remain $encExisting.</li>\n";
$conf->setSchema( $existingSchema, $conf->DBengine );
}
if ( $existingEngine && $existingEngine != $conf->DBengine ) {
$encExisting = htmlspecialchars( $existingEngine );
$encRequested = htmlspecialchars( $conf->DBengine );
print "<li><strong>Warning:</strong> you requested the $encRequested storage " .
"engine, but the existing database uses the $encExisting engine. This upgrade " .
"script can't convert it, so it will remain $encExisting.</li>\n";
$conf->setSchema( $conf->DBschema, $existingEngine );
}
}
# Create user if required
if ( $conf->Root ) {
$conn = $dbc->newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
if ( $conn->isOpen() ) {
print "<li>DB user account ok</li>\n";
$conn->close();
} else {
print "<li>Granting user permissions...";
if( $mysqlOldClient && $mysqlNewAuth ) {
print " <b class='error'>If the next step fails, see <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'>http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b>";
}
print "</li>\n";
dbsource( "../maintenance/users.sql", $wgDatabase );
}
}
}
print "</ul><pre>\n";
chdir( ".." );
flush();
do_all_updates();
chdir( "config" );
print "</pre>\n";
print "<ul><li>Finished update checks.</li>\n";
} else {
# Determine available storage engines if possible
if ( $conf->DBtype == 'mysql' && version_compare( $myver, "4.1.2", "ge" ) ) {
$res = $wgDatabase->query( 'SHOW ENGINES' );
$found = false;
while ( $row = $wgDatabase->fetchObject( $res ) ) {
if ( $row->Engine == $conf->DBengine ) {
$found = true;
break;
}
}
$wgDatabase->freeResult( $res );
if ( !$found && $conf->DBengine != 'MyISAM' ) {
echo "<li><strong>Warning:</strong> " . htmlspecialchars( $conf->DBengine ) .
" storage engine not available, " .
"using MyISAM instead</li>\n";
$conf->setSchema( $conf->DBschema, 'MyISAM' );
}
}
# FIXME: Check for errors
print "<li>Creating tables...";
if ($conf->DBtype == 'mysql') {
dbsource( "../maintenance/tables.sql", $wgDatabase );
dbsource( "../maintenance/interwiki.sql", $wgDatabase );
} elseif (is_callable(array($wgDatabase, 'setup_database'))) {
$wgDatabase->setup_database();
}
else {
$errs["DBtype"] = "Do not know how to handle database type '$conf->DBtype'";
continue;
}
print " done.</li>\n";
print "<li>Initializing statistics...</li>\n";
$wgDatabase->insert( 'site_stats',
array ( 'ss_row_id' => 1,
'ss_total_views' => 0,
'ss_total_edits' => 1, # Main page first edit
'ss_good_articles' => 0, # Main page is not a good article - no internal link
'ss_total_pages' => 1, # Main page
'ss_users' => $conf->SysopName ? 1 : 0, # Sysop account, if created
'ss_admins' => $conf->SysopName ? 1 : 0, # Sysop account, if created
'ss_images' => 0 ) );
# Set up the "regular user" account *if we can, and if we need to*
if( $conf->Root and $conf->DBtype == 'mysql') {
# 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( "<li>User " . htmlspecialchars( $wgDBuser ) . " exists. Skipping grants.</li>\n" );
} else {
# Yes, so run the grants
echo( "<li>" . htmlspecialchars( "Granting user permissions to $wgDBuser on $wgDBname..." ) );
dbsource( "../maintenance/users.sql", $wgDatabase );
echo( "success.</li>\n" );
}
}
if( $conf->SysopName ) {
$u = User::newFromName( $conf->getSysopName() );
if ( !$u ) {
print "<li><strong class=\"error\">Warning:</strong> Skipped sysop account creation - invalid username!</li>\n";
}
else if ( 0 == $u->idForName() ) {
$u->addToDatabase();
$u->setPassword( $conf->getSysopPass() );
$u->saveSettings();
$u->addGroup( "sysop" );
$u->addGroup( "bureaucrat" );
print "<li>Created sysop account <tt>" .
htmlspecialchars( $conf->SysopName ) . "</tt>.</li>\n";
} else {
print "<li>Could not create user - already exists!</li>\n";
}
} else {
print "<li>Skipped sysop account creation, no name given.</li>\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" . wfMsgNoTrans( 'mainpagedocfooter' ),
'comment' => '',
'user' => 0,
'user_text' => 'MediaWiki default',
) );
$revid = $revision->insertOn( $wgDatabase );
$article->updateRevisionOn( $wgDatabase, $revision );
}
// Now that all database work is done, make sure everything is committed
$wgDatabase->commit();
/* 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";
// Fix up a common line-ending problem (due to CVS on Windows)
$localSettings = str_replace( "\r\n", "\n", $localSettings );
$f = fopen( "LocalSettings.php", 'xt' );
if( $f == false ) {
print( "</li>\n" );
dieout( "<p>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...</p>\n" .
"<p>Here's the file that would have been written, try to paste it into place manually:</p>\n" .
"<pre>\n" . htmlspecialchars( $localSettings ) . "</pre>\n" );
}
if(fwrite( $f, $localSettings ) ) {
fclose( $f );
print "<hr/>\n";
writeSuccessMessage();
print "</li>\n";
} else {
fclose( $f );
dieout( "<p class='error'>An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again.</p></li>\n" );
}
} while( false );
}
print "</ul>\n";
$mainListOpened = false;
if( count( $errs ) ) {
/* Display options form */
if( $conf->posted ) {
echo "<p class='error-top'>Something's not quite right yet; make sure everything below is filled out correctly.</p>\n";
}
?>
<form action="<?php echo defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php'; ?>" name="config" method="post">
<h2>Site config</h2>
<div class="config-section">
<div class="config-input">
<?php aField( $conf, "Sitename", "Wiki name:" ); ?>
</div>
<p class="config-desc">
Preferably a short word without punctuation, i.e. "Wikipedia".<br />
Will appear as the namespace name for "meta" pages, and throughout the interface.
</p>
<div class="config-input"><?php aField( $conf, "EmergencyContact", "Contact e-mail:" ); ?></div>
<p class="config-desc">
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.
</p>
<div class="config-input">
<label class='column' for="LanguageCode">Language:</label>
<select id="LanguageCode" name="LanguageCode"><?php
$list = getLanguageList();
foreach( $list as $code => $name ) {
$sel = ($code == $conf->LanguageCode) ? 'selected="selected"' : '';
$encCode = htmlspecialchars( $code );
$encName = htmlspecialchars( $name );
echo "\n\t\t<option value=\"$encCode\" $sel>$encName</option>";
}
echo "\n";
?>
</select>
</div>
<p class="config-desc">
Select the language for your wiki's interface. Some localizations aren't fully complete. Unicode (UTF-8) is used for all localizations.
</p>
<div class="config-input">
<label class='column'>Copyright/license:</label>
<ul class="plain">
<li><?php aField( $conf, "License", "No license metadata", "radio", "none" ); ?></li>
<li><?php aField( $conf, "License", "Public Domain", "radio", "pd" ); ?></li>
<li><?php aField( $conf, "License", "GNU Free Documentation License 1.2 (Wikipedia-compatible)", "radio", "gfdl1_2" ); ?></li>
<li><?php aField( $conf, "License", "GNU Free Documentation License 1.3", "radio", "gfdl1_3" ); ?></li>
<li><?php
aField( $conf, "License", "A Creative Commons license - ", "radio", "cc" );
$partner = "MediaWiki";
$script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php';
$exit = urlencode( "$wgServer{$conf->ScriptPath}/config/$script?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 "<a href=\"$ccApp\" target='_blank'>choose</a>";
if( $conf->License == "cc" ) { ?>
<ul>
<li><?php aField( $conf, "RightsIcon", "<img src=\"" . htmlspecialchars( $conf->RightsIcon ) . "\" alt='(Creative Commons icon)' />", "hidden" ); ?></li>
<li><?php aField( $conf, "RightsText", htmlspecialchars( $conf->RightsText ), "hidden" ); ?></li>
<li><?php aField( $conf, "RightsCode", "code: " . htmlspecialchars( $conf->RightsCode ), "hidden" ); ?></li>
<li><?php aField( $conf, "RightsUrl", "<a href=\"" . htmlspecialchars( $conf->RightsUrl ) . "\">" . htmlspecialchars( $conf->RightsUrl ) . "</a>", "hidden" ); ?></li>
</ul>
<?php } ?>
</li>
</ul>
</div>
<p class="config-desc">
A notice, icon, and machine-readable copyright metadata will be displayed for the license you pick.
</p>
<div class="config-input">
<?php aField( $conf, "SysopName", "Admin username:" ) ?>
</div>
<div class="config-input">
<?php aField( $conf, "SysopPass", "Password:", "password" ) ?>
</div>
<div class="config-input">
<?php aField( $conf, "SysopPass2", "Password confirm:", "password" ) ?>
</div>
<p class="config-desc">
An admin can lock/delete pages, block users from editing, and do other maintenance tasks.<br />
A new account will be added only when creating a new wiki database.
<br /><br />
The password cannot be the same as the username.
</p>
<div class="config-input">
<label class='column'>Object caching:</label>
<ul class="plain">
<li><?php aField( $conf, "Shm", "No caching", "radio", "none" ); ?></li>
<?php
if ( $conf->turck ) {
echo "<li>";
aField( $conf, "Shm", "Turck MMCache", "radio", "turck" );
echo "</li>\n";
}
if( $conf->xcache ) {
echo "<li>";
aField( $conf, 'Shm', 'XCache', 'radio', 'xcache' );
echo "</li>\n";
}
if ( $conf->apc ) {
echo "<li>";
aField( $conf, "Shm", "APC", "radio", "apc" );
echo "</li>\n";
}
if ( $conf->eaccel ) {
echo "<li>";
aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" );
echo "</li>\n";
}
if ( $conf->dba ) {
echo "<li>";
aField( $conf, "Shm", "DBA (not recommended)", "radio", "dba" );
echo "</li>";
}
?>
<li><?php aField( $conf, "Shm", "Memcached", "radio", "memcached" ); ?></li>
</ul>
<div style="clear:left"><?php aField( $conf, "MCServers", "Memcached servers:", "text" ) ?></div>
</div>
<p class="config-desc">
An object caching system such as memcached will provide a significant performance boost,
but needs to be installed. Provide the server addresses and ports in a comma-separated list.
<br /><br />
MediaWiki can also detect and support eAccelerator, Turck MMCache, APC, and XCache, but
these should not be used if the wiki will be running on multiple application servers.
<br/><br/>
DBA (Berkeley-style DB) is generally slower than using no cache at all, and is only
recommended for testing.
</p>
</div>
<h2>E-mail, e-mail notification and authentication setup</h2>
<div class="config-section">
<div class="config-input">
<label class='column'>E-mail features (global):</label>
<ul class="plain">
<li><?php aField( $conf, "Email", "Enabled", "radio", "email_enabled" ); ?></li>
<li><?php aField( $conf, "Email", "Disabled", "radio", "email_disabled" ); ?></li>
</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)
if sending mail doesn't work on your server.
</p>
Re: Lokální server zobrazuje se mi pouze zdrojový kod
ten zdroják Wikimedie prosím umaž, je k ničemu a je zbytečně dlouhý (díky).
podle mě nemáš nastavenu podporu PHP v apachi.
do souboru: apache/conf/httpd.conf
přidej na konec:
# podpora PHP
LoadModule php5_module "D:/dev/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
cestu k php5apache2_2.dll si uprav podle toho, kde máš PHPčko nainstalované.
podle mě nemáš nastavenu podporu PHP v apachi.
do souboru: apache/conf/httpd.conf
přidej na konec:
# podpora PHP
LoadModule php5_module "D:/dev/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
cestu k php5apache2_2.dll si uprav podle toho, kde máš PHPčko nainstalované.
Re: Lokální server zobrazuje se mi pouze zdrojový kod
Původně tam mám:
LoadModule php5_module "D:/dev/prog/php5/php5apache2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
LoadModule php5_module "D:/dev/prog/php5/php5apache2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Re: Lokální server zobrazuje se mi pouze zdrojový kod
zkusil jsi CTRL+F5 pro načtení s vyčištěním cache paměti?
extension_dir = “c:/dev/php/ext”
máš v php.ini nastaveno?
viz:
http://radja.cz/72/jak-zprovoznit-php-v ... -serverem/
http://radja.cz/71/jak-zprovoznit-apach ... indows-xp/
extension_dir = “c:/dev/php/ext”
máš v php.ini nastaveno?
viz:
http://radja.cz/72/jak-zprovoznit-php-v ... -serverem/
http://radja.cz/71/jak-zprovoznit-apach ... indows-xp/
Re: Lokální server zobrazuje se mi pouze zdrojový kod
Je možný problém pokud to všechno mám místo na C: na D: ale všude správné syntaxe
Re: Lokální server zobrazuje se mi pouze zdrojový kod
nemyslím. Nenapsal jsi ale jestli máš Mysql, apacha a PHPčko s instalarem, nebo jsi rozjel ručně noinstall verze...
Já osobně jsem šel do noinstall verze, protože aspoň vím kde co je...
zkusil jsi nastoupit a vystoupit? (=restart PC a znovu spuštění všeho?)
potom mě napadá WAMP, kde by ses snad o detaily nemusel starat... ale nemám osobně vyzkoušeno
Já osobně jsem šel do noinstall verze, protože aspoň vím kde co je...
zkusil jsi nastoupit a vystoupit? (=restart PC a znovu spuštění všeho?)
potom mě napadá WAMP, kde by ses snad o detaily nemusel starat... ale nemám osobně vyzkoušeno
Re: Lokální server zobrazuje se mi pouze zdrojový kod
Tak to bylo restartem. Už dlouho jsem nic nedělal na webu tak jsem dost mimo.
PHP, Apache i mysql jsem instaloval samostatně.
Jedinou chybu po restartu to hlásí
dynamická knihovna D:/dev/prog/php5/ext/php_curl.dll -% 1 nelze spustit.
Dám http://localhost = naskočí úvodní mediawiki stránka jak má ale pak to hodí hlášku po kliknutí na setup mediawiki
MediaWiki 1.15.4 Installation
* Don't forget security updates! Keep an eye on the low-traffic release announcements mailing list.
Checking environment...
Please include all of the lines below when reporting installation problems.
* PHP 5.2.13 installed
Could not find a suitable database driver!
o For MySQL, compile PHP using --with-mysql, or install the mysql.so module
o For PostgreSQL, compile PHP using --with-pgsql, or install the pgsql.so module
o For SQLite, compile PHP using --with-pdo_sqlite, or install the pdo_sqlite.so module
o For MSSQL, compile PHP using --with-mssql not ready, or install the mssql not ready.so module
o For DB2, compile PHP using --with-ibm_db2, or install the ibm_db2.so module
Co ted?

PHP, Apache i mysql jsem instaloval samostatně.
Jedinou chybu po restartu to hlásí
dynamická knihovna D:/dev/prog/php5/ext/php_curl.dll -% 1 nelze spustit.
Dám http://localhost = naskočí úvodní mediawiki stránka jak má ale pak to hodí hlášku po kliknutí na setup mediawiki
MediaWiki 1.15.4 Installation
* Don't forget security updates! Keep an eye on the low-traffic release announcements mailing list.
Checking environment...
Please include all of the lines below when reporting installation problems.
* PHP 5.2.13 installed
Could not find a suitable database driver!
o For MySQL, compile PHP using --with-mysql, or install the mysql.so module
o For PostgreSQL, compile PHP using --with-pgsql, or install the pgsql.so module
o For SQLite, compile PHP using --with-pdo_sqlite, or install the pdo_sqlite.so module
o For MSSQL, compile PHP using --with-mssql not ready, or install the mssql not ready.so module
o For DB2, compile PHP using --with-ibm_db2, or install the ibm_db2.so module
Co ted?

-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 6
- 4646
-
od 4Lift
Zobrazit poslední příspěvek
10 úno 2025 21:09
-
-
Náhodné zamrznutí PC, řešením je pouze tvrdý restart.
od Sipsisipi » 21 srp 2024 19:12 » v Problémy s hardwarem - 10
- 4315
-
od Sipsisipi
Zobrazit poslední příspěvek
25 srp 2024 10:37
-
-
-
Google->Apple kalendář, synchronizace pouze mých událostí
od Zakk » 13 črc 2024 16:18 » v Vše ostatní (sw) - 3
- 3940
-
od Martab
Zobrazit poslední příspěvek
13 črc 2024 21:01
-
-
- 2
- 1552
-
od DeNNI85
Zobrazit poslední příspěvek
11 bře 2025 21:32
-
- 7
- 3404
-
od petrvorisek
Zobrazit poslední příspěvek
05 led 2025 16:26
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti