Project:Support desk/Sections/Miscellaneous

__NEWSECTIONLINK__ = Unsorted Threads =

Terminology - Call

 * MediaWiki: (Reported by your Wiki's Special:Version page)
 * PHP:
 * MySQL:
 * URL:

Would it be correct to say that index.php "calls" the Logo image, calls the menus, etc? Smaug 22:32, 2 March 2008 (UTC)


 * I would say "define", and please, Smaug, use the template to post your topic. -PatPeter, [[Image:Tournesol.png|20px]] MediaWiki Support Team  19:33, 3 March 2008 (UTC)
 * The logo image path is defined in LocalSettings.php which is included by index.php --Nad 21:40, 9 March 2008 (UTC)
 * Thank you. Smaug 18:25, 18 March 2008 (UTC)

Lost sysop access
OH CRAP!!!!! I was trying to figure out how to turn on uploads (still haven't figured that one out yet: documentation is not easily found on this site) and I accidentally killed my bureaucrat privileges on the Userrights Page. Poof! How do I restore them???? No one else is a Bureaucrat and I can't find anything on this site to help me fix this.
 * MediaWiki: 1.10.1
 * PHP: 5.1.4
 * MySQL: 4.1.22
 * URL: I'm too embarrassed to release this!

I'm just starting to learn the ins and now especially the outs of PHP and SQL...is there a way of fixing this in MySQL? or in one of the myriad of PHP files?

Thanks!

—Keng 23:45, 10 March 2008 (UTC)
 * You'll need to update the database directly with the following query. First login and go to Special:Preferences to get your user id number (I've used 999 in the example below, so replace that with your own user id), then shell in to your server or do a query with whatever means you have of accessing your database. Also note that if you're using a table prefix you'll need to prepend that to the user_groups table name.

INSERT INTO user_groups (ug_user,ug_group) VALUES(999,'sysop');
 * --Nad 02:18, 13 March 2008 (UTC)
 * Also regarding uploads, you need to set $wgEnableUploads to true in your LocalSettings.php. There are also a number of other settings relating to uploads, see Category:Upload variables. --Nad 02:27, 13 March 2008 (UTC)


 * MediaWiki: (Reported by your Wiki's Special:Version page)
 * PHP:
 * MySQL:
 * URL:

Hi. I'm terribly sorry, but I happened to create the page myTestPage on the mediawiki.org Wiki when I thought I was doing on my newly installed own wiki page (because they look so similar). Could you please delete this page?

Questions? Mail me at anders@kupa.se.

—193.15.169.146 14:19, 13 March 2008 (UTC)


 * MediaWiki: (Reported by your Wiki's Special:Version page)
 * PHP:
 * MySQL:
 * URL:

Is it possible to include the HTML code below in a wiki page without installing Google Maps extension ?

 View Larger Map

—201.21.160.180 15:14, 13 March 2008 (UTC)

How to integrate media wiki log in with website?
How to integrate media wiki log in with website.? Please help ....


 * You mean how do you sync the MW login with non-MW login elsewhere on your site? It depends on how the rest of your website logs users in. Smaug  18:28, 18 March 2008 (UTC)

Fatal Error on 'Recent Changes'

 * MediaWiki: 1.12.0
 * PHP: 5.?
 * MySQL: 4.?
 * URL: Wyfopedia

My wiki has just stopped working. I can get ftp to it. Help!

-Wyfopedia 21:23, 14 March 2008 (UTC)

Hi I have created an MediaWiki account now. IF you want to know what versions I'm on then please instruct me on how to find out. I'm worried that I have lost my database. I can see my wiki images. If I can download the database and images, I don't mind re-installing again from scratch. -Wyfopedia 21:31, 14 March 2008 (UTC)
 * You appear to have some problems with your rewrites. As a first measure you can set $wgUsePathInfo to false in your LocalSettings.php. Bryan Tong Minh 20:54, 15 March 2008 (UTC)


 * Thank you for your help Bryan Tong Minh. Wyfopedia 20:01, 21 March 2008 (UTC)

I have backed up the database and image files, and upgraded to v. 1.12.0. The site now seems to be working again. However, I have the following error on 'Recent Changes':

'Fatal error: Class 'ChangesList' not found in /home/fhlinux182/w/wyfopedia.org.uk/user/htdocs/includes/SpecialRecentchanges.php on line 221'

-Wyfopedia 20:01, 21 March 2008 (UTC)

Pages imported by ImportTextFile.php NOT searchable

 * MediaWiki: 1.8.3
 * PHP: 5.2.0
 * MySQL: 5.0.27
 * URL:

I am using ImportTextFile.php to import a number of pages and they show up in Recent Changes.

But if I do a search on some text that I know is in the pages, the results are NOT showing them.

Is there a way that I can ensure that these pages are also searchable?

Thanks.

—68.147.72.69 06:34, 15 March 2008 (UTC)


 * Run the updateSearchIndex.php maintenance script. Emufarmers 02:23, 21 March 2008 (UTC)

That didn't work for imported pages as these pages were not selected during the run of the updateSearchIndex.php. The problem seems to be in the SELECT statement in updateSearchIndex.inc where "iaisrecentchanges" and "iaispage" tables are matched up to find the pages to be updated. The original SELECT statement is SELECT ... FROM $recentchanges JOIN $page on    rc_cur_id=page_id AND rc_this_oldid=page_latest and since an imported page has a clean slate of attributes, they are NOT selected.

Looking at the actual attributes in the imported pages, rc_last_oldid is always set to 0, thus by changing the SELECT statement to SELECT ... FROM $recentchanges JOIN $page on     rc_cur_id=page_id AND (rc_this_oldid=page_latest OR rc_last_oldid=0) then those imported pages are also selected.

I also believe that newer versions of mediawiki might have fixed this.

68.147.72.69 16:21, 25 March 2008 (UTC)

Changing sidebar according to article-language

 * MediaWiki: 1.10.1
 * PHP: 5.2.4 (cgi-fcgi)
 * MySQL: 5.0.27
 * URL: www.GS-500.info

Hi,

I'm currently translating my wiki from German to both English and Spanish. I'm happy with the solution to swap between the three languages, but as I modified the sidebar: Is there any possibility to indicate the article-language and change the sidebar accordingly? I already looked at Extension:LanguageSelector, Extension:Multilang and Extension: MultiLanguageManager but they all don't seem to tackle my problem as they assume the usage of an unchanged sidebar.

Kind regards, Timo

—82.11.169.246 11:09, 16 March 2008 (UTC)

questions
I have many questions :

- How can I create many pages automatically ? If I can't, is there another solution ? IS there a programm for injecting pages ( created by scripting shell) - How can I know all the pages depending on a page ? - How can I delete all the page created the same day ?

Thanks —192.54.193.51 09:36, 19 March 2008 (UTC)

http://www.mediawiki.org/wiki/Manual:FAQ#Importing_from_other_types_of_files

if you look through this site or use google you will find many helpful articles like that one JohnShep 20:42, 19 March 2008 (UTC)

CheckUser weirdness - please investigate

 * MediaWiki: 1.13alpha from SVN
 * PHP:
 * MySQL:
 * URL: it's on a localhost

I got CheckUser working, as well as Oversight and Makesysop, and surprisingly, despite what the CheckUser page here tells me, I didn't need run the command-line to get it working (to be honest, though, I actually had no PHP commandline utilities on XAMPP. Just added the SQL queries, and then copied the files to extensions directory, and for some reason, it actually worked and did a query. Is this a bug or is this meant to happen?? Should this go to Bugzilla?? Thanks, AP @ —82.42.237.84 15:08, 20 March 2008 (UTC)


 * How did en.wikipedia.org grant the rollback extension in the user rights log?? nothing in Special:Version about it. Thanks, AP @ --82.42.237.84 15:37, 20 March 2008 (UTC)


 * If you ran the SQL queries that the installation script includes, then you've done its job.


 * The non-sysop rollback functionality has been in the core code since version 1.11 (Manual:User_rights_management). Emufarmers 02:13, 21 March 2008 (UTC)


 * OK, so doing what I did above actually gets it working and it's not a bug?? Confused. AP @ --82.42.237.84 11:37, 22 March 2008 (UTC)


 * If it's actually working, then yeah. The installation script just happens to be more convenient (and less error-prone) than running the queries directly. —Emufarmers(T 01:31, 23 March 2008 (UTC)

Subcategories with the same name

 * MediaWiki: 1.11.2
 * PHP: 5.2.5
 * MySQL: 5.0.45
 * URL: not ready

For example,I want create 3 categories: -Slackware -Ubuntu -openSuse I want,that each category must have the subcategory called "Script". But the slackware's script,must be different from ubuntu's script and suse's script. It is possible?How?

—79.3.253.38 19:27, 20 March 2008 (UTC)


 * Maybe you could just call the ubuntu subcategory "Ubuntu script" and the suse subcategory "suse script". I don't know if doing what you want to do is possible.  Is this a suitable workaround? Smaug  19:39, 22 March 2008 (UTC)

Ajax Search doesn't work since 1.12.0 upgrade

 * MediaWiki: 1.12.0
 * PHP: 5.2.5 (apache2handler)
 * MySQL: 5.0.51
 * URL: I don't have URL because it is internal

Hi all,

I've upgrade MediaWiki 1.11.2 to 1.12.0 and everything went fine until I tested the AjaxSearch. It is not working anymore. In my LocalSettings.php I have $wgAjaxSearch = true; and to be sure I added $wgUseAjax = true;. I thought the problem may have been because of the upgrade, so I did a fresh install, but this did not helped at all.

Is there something new we need to do, so that the AjaxSearch actually works? Or is there a bug. I know AjaxSearch received some bugfix since the patch 1.12.0.

Thank you for your help.

Maxime.

—199.243.65.6 14:09, 21 March 2008 (UTC)

It seems like we now need to activate the AjaxSearch in the preferences of the user in the Search tab... Also, the new version of this Ajax search is bugged... I'll need to use the one from 1.11 + 1.12 to have a functional Search.

--199.243.65.6 14:57, 21 March 2008 (UTC)

Reading passwords of users

 * MediaWiki: 1.12.0
 * PHP: 5
 * MySQL: 4.1
 * URL: www.wikilh.tk

Hi. I have question. How I can read the password of my users? I dont want to change them, but i need to read them. I need fast answer. Thank you.

drake

—83.26.71.3 20:21, 23 March 2008 (UTC)
 * You can't. —Emufarmers(T 21:54, 23 March 2008 (UTC)
 * I don't know the answer, but I must assume that since they are stored somewhere in the database, there must be some way to read them, even if it requires some decryption. Smaug 00:33, 24 March 2008 (UTC)
 * MediaWiki salts its MD5-hashed passwords, which, as far as I know, makes decryption impractical, if not impossible.


 * The only sort of counsel that I'll offer is that this is not ethical, and you're wasting your time anyway. —Emufarmers(T 05:49, 24 March 2008 (UTC)

MediaWiki optimization

 * MediaWiki: 1.10.0
 * PHP: 5.2.5 (apache)
 * MySQL: 4.1.22-standard-log
 * URL: Fan History Wiki

My wiki had problems with pages loading where we ended up with a few thousand articles in a category. This caused these pages either not to load or to load slowly. I queried my host about this. They said, among other things:

We tested the above mentioned URLs and managed to re-create the issue on our end. It is most likely caused by the timeout settings of our shared hosting servers, especially if the problematic pages contain lots of links with reference to your application's database.

Upon further investigation, we found out that the home page of your wiki is also loading a little bit slowly, due to the 274 links on this page. It loads for more than 2 seconds locally on the server, which it should not load for more than 1 second.

We will recommend you to contact a developer which is familiar with the source code of your application and possesses the required knowledge for optimizing it. The optimization usually involves reducing the number of links on the pages, reducing the overall size of the application's database, creating indexes for each table in the database, etc.

I switched to a VPS which makes some pages which previously wouldn't load now load. I also optimized the database on phpMyAdmin. I removed a few of the extensions which were not being used actively. But if some pages link to certain categories, like Category:People, new pages won't create and will time out. What more can be done to optimize things, fix the overly large category problem or just generally make the wiki load faster? I really want to continue to grow Fan History but this has thrown me for a loop. Is this something I can fix myself?

—PurplePopple 02:29, 24 March 2008 (UTC)


 * Your site doesn't load for me, so I can't take a look at your categories, but we just had a similar query on the MWusers forums, and the simple answer was "caching." —Emufarmers(T 05:49, 24 March 2008 (UTC)


 * The whole site doesn't load or just those pages? I've added the caching elements by adding     $wgUseFileCache = true; and   $wgFileCacheDirectory = "$IP/cache"; to the local settings but it doesn't seem to make the load any faster.  I've removed a few more extensions.  I've removed Google Analytics. It is still taking about 15 seconds for me to get Category:People to load and about 3 to get the main page to load.  If I remove

$wgMainCacheType = CACHE_NONE; $wgMemCachedServers = array; $wgUseFileCache = true; $wgFileCacheDirectory = "$IP/cache";
 * 1) Shared memory settings


 * It actually seems to load a bit faster but not much. :/ (On a completely unrelated note, my host seems to have disabled image uploads...  *sighs*) --PurplePopple 12:09, 24 March 2008 (UTC)

Help
This is what i get on my website.



Can somebody help me?

I will copy the text in the background for you.

, 2006 Rob Church # http://www.mediawiki.org/ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # http://www.gnu.org/copyleft/gpl.html error_reporting( E_ALL ); header( "Content-type: text/html; charset=utf-8" ); @ini_set( "display_errors", true ); # In case of errors, let output be clean. $wgRequestTime = microtime( true ); # Attempt to set up the include path, to fix problems with relative includes $IP = dirname( dirname( __FILE__ ) ); define( 'MW_INSTALL_PATH', $IP ); # 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" ); # If we get an exception, the user needs to know # all the details $wgShowExceptionDetails = true; ## 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'; ?> MediaWiki Installation Setup has completed, your wiki is configured.

Please delete the /config directory for extra security. " ); } if( file_exists( "./LocalSettings.php" ) ) { writeSuccessMessage; dieout( '' ); } if( !is_writable( "." ) ) { dieout( " Can't write config file, aborting

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

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

cd /path/to/wiki chmod a+w config

Afterwards retry to start the setup. " ); } 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; } } ?>

* 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 " . phpversion . " installed\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! o "; foreach (array_keys($ourdb) AS $db) { $comp = $ourdb[$db]['compile']; $full = $ourdb[$db]['fullname']; print "For $full, compile PHP using --with-$comp, " ."or install the $comp.so module \n"; } dieout( "

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

Cannot install MediaWiki. " ); } if( wfIniGetBool( "safe_mode" ) ) { $conf->safeMode = true; ?> " . htmlspecialchars( $memlimit ) . " seems too low, installation may fail!"; } else { $conf->raiseMemory = true; print "ok."; } } print "
 * 1) Warning: PHP's safe mode is active. You may have problems caused by this, particularly if using image uploads.
 * 2) safeMode = false; } $sapi = php_sapi_name; print "PHP server API is $sapi; "; $script = defined('MW_INSTALL_PHP5_EXT') ? 'index.php5' : 'index.php'; if( $wgUsePathInfo ) { print "ok, using pretty URLs ($script/Page_Title)"; } else { print "using ugly URLs ($script?title=Page_Title)"; } print "
 * 3) \n"; $conf->xml = function_exists( "utf8_encode" ); if( $conf->xml ) { print "Have XML / Latin1-UTF-8 conversion support.
 * 4) \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 "Warning: A value for session.save_path 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.
 * 5) "; } elseif ( is_dir( $sessionSavePath ) && is_writable( $sessionSavePath ) ) { # All good? Let the user know print "Session save path ({$ssp}) appears to be valid.
 * 6) "; } else { # Something not right? Warn the user, but let them proceed print "Warning: Your session.save_path value ({$ssp}) appears to be invalid or is not writable. PHP needs to be able to save data to this location for correct session operation.
 * 7) "; } # 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 "PHP is configured with no memory_limit.
 * 8) \n"; } else { print "PHP's memory_limit 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.
 * 1) \n"; } $conf->turck = function_exists( 'mmcache_get' ); if ( $conf->turck ) { print "Turck MMCache installed
 * 2) \n"; } $conf->xcache = function_exists( 'xcache_get' ); if( $conf->xcache ) print "XCache installed
 * 3) "; $conf->apc = function_exists('apc_fetch'); if ($conf->apc ) { print "APC installed
 * 4) "; } $conf->eaccel = function_exists( 'eaccelerator_get' ); if ( $conf->eaccel ) { $conf->turck = 'eaccelerator'; print "eAccelerator installed
 * 5) \n"; } $conf->dba = function_exists( 'dba_open' ); if( !( $conf->turck || $conf->eaccel || $conf->apc || $conf->xcache ) ) { echo( 'Couldn\'t find Turck MMCache, eAccelerator, APC or XCache; cannot use these for object caching.
 * 6) ' ); } $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 "Found GNU diff3: $conf->diff3.
 * 7) "; else print "GNU diff3 not found.
 * 8) "; $conf->ImageMagick = false; $imcheck = array( "/usr/bin", "/opt/csw/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" ); foreach( $imcheck as $dir ) { $im = "$dir/convert"; if( @file_exists( $im ) ) { print "Found ImageMagick: $im; image thumbnailing will be enabled if you enable uploads.
 * 9) \n"; $conf->ImageMagick = $im; break; } } $conf->HaveGD = function_exists( "imagejpeg" ); if( $conf->HaveGD ) { print "Found GD graphics library built-in"; if( !$conf->ImageMagick ) { print ", image thumbnailing will be enabled if you enable uploads"; } print ".
 * 10) \n"; } else { if( !$conf->ImageMagick ) { print "Couldn't find GD library or ImageMagick; image thumbnailing disabled.
 * 11) \n"; } } $conf->IP = dirname( dirname( __FILE__ ) ); print "Installation directory: " . htmlspecialchars( $conf->IP ) . "
 * 12) \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 "Script URI path: " . htmlspecialchars( $conf->ScriptPath ) . "
 * 13) \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 "Installing MediaWiki with php5 file extensions
 * 14) \n"; } else { print "Installing MediaWiki with php file extensions
 * 15) \n"; } print "Environment checked. You can install MediaWiki.
 * 16) \n"; $conf->posted = ($_SERVER["REQUEST_METHOD"] == "POST"); $conf->Sitename = ucfirst( importPost( "Sitename", "" ) ); $defaultEmail = empty( $_SERVER["SERVER_ADMIN"] ) ? 'root@localhost' : $_SERVER["SERVER_ADMIN"]; $conf->EmergencyContact = importPost( "EmergencyContact", $defaultEmail ); $conf->DBtype = importPost( "DBtype", $DefaultDBtype ); ?> DBserver = importPost( "DBserver", "localhost" ); $conf->DBname = importPost( "DBname", "wikidb" ); $conf->DBuser = importPost( "DBuser", "wikiuser" ); $conf->DBpassword = importPost( "DBpassword" ); $conf->DBpassword2 = importPost( "DBpassword2" ); $conf->SysopName = importPost( "SysopName", "WikiSysop" ); $conf->SysopPass = importPost( "SysopPass" ); $conf->SysopPass2 = importPost( "SysopPass2" ); $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", "mysql4" ), importPost( "DBengine", "InnoDB" ) ); ## Postgres specific: $conf->DBport = importPost( "DBport", "5432" ); $conf->DBmwschema = importPost( "DBmwschema", "mediawiki" ); $conf->DBts2schema = importPost( "DBts2schema", "public" ); /* 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"; } 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 == "gfdl" ) { $conf->RightsUrl = "http://www.gnu.org/copyleft/fdl.html"; $conf->RightsText = "GNU Free Documentation License 1.2"; $conf->RightsCode = "gfdl"; $conf->RightsIcon = '${wgScriptPath}/skins/common/images/gnu-fdl.png'; } elseif( $conf->License == "none" ) { $conf->RightsUrl = $conf->RightsText = $conf->RightsCode = $conf->RightsIcon = ""; } else { $conf->RightsUrl = importRequest( "RightsUrl", "" ); $conf->RightsText = importRequest( "RightsText", "" ); $conf->RightsCode = importRequest( "RightsCode", "" ); $conf->RightsIcon = importRequest( "RightsIcon", "" ); } $conf->Shm = importRequest( "Shm", "none" ); $conf->MCServers = importRequest( "MCServers" ); /* Test memcached servers */ if ( $conf->Shm == 'memcached' && $conf->MCServers ) { $conf->MCServerArray = array_map( 'trim', explode( ',', $conf->MCServers ) ); foreach ( $conf->MCServerArray as $server ) { $error = testMemcachedServer( $server ); if ( $error ) { $errs["MCServers"] = $error; break; } } } else if ( $conf->Shm == 'memcached' ) { $errs["MCServers"] = "Please specify at least one server if you wish to use memcached"; } /* default values for installation */ $conf->Email = importRequest("Email", "email_enabled"); $conf->Emailuser = importRequest("Emailuser", "emailuser_enabled"); $conf->Enotif = importRequest("Enotif", "enotif_allpages"); $conf->Eauthent = importRequest("Eauthent", "eauthent_enabled"); if( $conf->posted && ( 0 == count( $errs ) ) ) { do { /* So we can 'continue' to end prematurely */ $conf->Root = ($conf->RootPW != ""); /* Load up the settings and get installin' */ $local = writeLocalSettings( $conf ); echo "\n"; echo "

Generating configuration file... \n"; echo " \n"; $wgCommandLineMode = false; chdir( ".." ); $ok = eval( $local ); if( $ok === false ) { dieout( "Errors in generated configuration; " . "most likely due to a bug in the installer... " . "Config file was: " . "

" .				htmlspecialchars( $local ) .				"

\n"; } else { $err = mysql_errno; $databaseSafe = htmlspecialchars( $wgDBname ); if( $err == 1102 /* Invalid database name */ ) { print "
 * 1) " . "" ); } $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 "Database type: {$conf->DBtypename}
 * 2) \n"; $dbclass = 'Database'.ucfirst($conf->DBtype); $wgDBtype = $conf->DBtype; $wgDBadminuser = "root"; $wgDBadminpassword = $conf->RootPW; ## Mysql specific: $wgDBprefix = $conf->DBprefix; ## Postgres specific: $wgDBport = $conf->DBport; $wgDBmwschema = $conf->DBmwschema; $wgDBts2schema = $conf->DBts2schema; $wgCommandLineMode = true; 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 "Loading class: $dbclass"; $dbc = new $dbclass; if( $conf->DBtype == 'mysql' ) { $mysqlOldClient = version_compare( mysql_get_client_info, "4.1.0", "lt" ); if( $mysqlOldClient ) { print "
 * 3) PHP is linked with old MySQL client libraries. If you are using a MySQL 4.1 server and have problems connecting to the database, see http://dev.mysql.com/doc/mysql/en/old-client.html for help.
 * 4) \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( "Attempting to connect to database server as $db_user..." ); $wgDatabase = Database::newFromParams( $wgDBserver, $db_user, $db_pass, '', 1 ); # Check the connection and respond to errors if( $wgDatabase->isOpen ) { # Seems OK $ok = true; $wgDBadminuser = $db_user; $wgDBadminpassword = $db_pass; echo( "success.
 * 5) \n" ); $wgDatabase->ignoreErrors( true ); $myver = $wgDatabase->getServerVersion; } else { # There were errors, report them and back out $ok = false; $errno = mysql_errno; $errtx = htmlspecialchars( mysql_error ); switch( $errno ) { case 1045: case 2000: echo( "failed due to authentication errors. Check passwords." ); if( $conf->Root ) { # The superuser details are wrong $errs["RootUser"] = "Check username"; $errs["RootPW"] = "and password"; } else { # The regular user details are wrong $errs["DBuser"] = "Check username"; $errs["DBpassword"] = "and password"; } break; case 2002: case 2003: default: # General connection problem echo( "failed with error [$errno] $errtx.\n" ); $errs["DBserver"] = "Connection failed"; break; } # switch } #conn. att. if( !$ok ) { continue; } } else /* not mysql */ { error_reporting( E_ALL ); $wgSuperUser = ''; ## Possible connect as a superuser if( $useRoot ) { $wgDBsuperuser = $conf->RootUser; echo( "Attempting to connect to database \"postgres\" as superuser \"$wgDBsuperuser\"..." ); $wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBsuperuser, $conf->RootPW, "postgres", 1); if (!$wgDatabase->isOpen) { print " error: " . $wgDatabase->lastError . "
 * 6) \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( "Attempting to connect to database \"$wgDBname\" as \"$wgDBuser\"..." ); $wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1); if (!$wgDatabase->isOpen) { print " error: " . $wgDatabase->lastError . "
 * 7) \n"; } else { $myver = $wgDatabase->getServerVersion; } $wgDatabase->initial_setup('', $wgDBname); } if ( !$wgDatabase->isOpen ) { $errs["DBserver"] = "Couldn't connect to database"; continue; } print "Connected to $myver"; if ($conf->DBtype == 'mysql') { if( version_compare( $myver, "4.0.14" ) < 0 ) { dieout( " -- mysql 4.0.14 or later required. Aborting." ); } $mysqlNewAuth = version_compare( $myver, "4.1.0", "ge" ); if( $mysqlNewAuth && $mysqlOldClient ) { print "; You are using MySQL 4.1 server, but PHP is linked to old client libraries; if you have trouble with authentication, see http://dev.mysql.com/doc/mysql/en/old-client.html for help."; } if( $wgDBmysql5 ) { if( $mysqlNewAuth ) { print "; enabling MySQL 4.1/5.0 charset mode"; } else { print "; MySQL 4.1/5.0 charset mode enabled, but older version detected; will likely fail."; } } print "
 * 8) \n"; @$sel = $wgDatabase->selectDB( $wgDBname ); if( $sel ) { print "Database " . htmlspecialchars( $wgDBname ) . " exists

* {$databaseSafe} is not a valid database name.

"; continue; } elseif( $err != 1049 /* Database doesn't exist */ ) { print "

* Error selecting database {$databaseSafe}: {$err} "; print htmlspecialchars( mysql_error ) . "

\n"; dbsource( "../maintenance/users.sql", $wgDatabase ); } } } print "
 * 1) "; continue; } print "Attempting to create database...
 * 2) "; $res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" ); if( !$res ) { print "Couldn't create database " . htmlspecialchars( $wgDBname ) . "; try with root access or check your username/pass.
 * 3) \n"; $errs["RootPW"] = "<- Enter"; continue; } print "Created database " . htmlspecialchars( $wgDBname ) . "
 * 4) \n"; } $wgDatabase->selectDB( $wgDBname ); } else if ($conf->DBtype == 'postgres') { if( version_compare( $myver, "PostgreSQL 8.0" ) < 0 ) { dieout( " Postgres 8.0 or later is required. Aborting." ); } } if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) { print "There are already MediaWiki tables in this database. Checking if updates are needed...
 * 5) \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 "SHOW TABLE STATUS query failed!
 * 6) \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 "Warning: Unrecognised existing collation
 * 7) \n"; } if ( isset( $row->Engine ) ) { $existingEngine = $row->Engine; } else { $existingEngine = $row->Type; } } if ( $existingSchema && $existingSchema != $conf->DBschema ) { print "Warning: you requested the {$conf->DBschema} schema, " . "but the existing database has the $existingSchema schema. This upgrade script ". "can't convert it, so it will remain $existingSchema.
 * 8) \n"; $conf->setSchema( $existingSchema, $conf->DBengine ); } if ( $existingEngine && $existingEngine != $conf->DBengine ) { print "Warning: you requested the {$conf->DBengine} storage " . "engine, but the existing database uses the $existingEngine engine. This upgrade " . "script can't convert it, so it will remain $existingEngine.
 * 9) \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 "DB user account ok
 * 10) \n"; $conn->close; } else { print "Granting user permissions..."; if( $mysqlOldClient && $mysqlNewAuth ) { print " If the next step fails, see http://dev.mysql.com/doc/mysql/en/old-client.html for help."; } print "

\n";			chdir( ".." );			flush;			do_all_updates;			chdir( "config" );			print "

\n"; print "

* Finished update checks. * \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 "Warning: {$conf->DBengine} storage engine not available, " . "using MyISAM instead * \n"; $conf->setSchema( $conf->DBschema, 'MyISAM' ); } } # FIXME: Check for errors print "Creating tables..."; if ($conf->DBtype == 'mysql') { dbsource( "../maintenance/tables.sql", $wgDatabase ); dbsource( "../maintenance/interwiki.sql", $wgDatabase ); } else if ($conf->DBtype == 'postgres') { $wgDatabase->setup_database; } else { $errs["DBtype"] = "Do not know how to handle database type '$conf->DBtype'"; continue; } print " done. * \n"; print "Initializing statistics...   * \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( "User $wgDBuser exists. Skipping grants.    * \n" ); } else { # Yes, so run the grants echo( "Granting user permissions to $wgDBuser on $wgDBname..." ); dbsource( "../maintenance/users.sql", $wgDatabase ); echo( "success.   * \n" ); } } if( $conf->SysopName ) { $u = User::newFromName( $conf->getSysopName ); if ( !$u ) { print "Warning: Skipped sysop account creation - invalid username!    * \n"; } else if ( 0 == $u->idForName ) { $u->addToDatabase; $u->setPassword( $conf->getSysopPass ); $u->saveSettings; $u->addGroup( "sysop" ); $u->addGroup( "bureaucrat" ); print "Created sysop account " . htmlspecialchars( $conf->SysopName ) . ".    * \n"; } else { print "Could not create user - already exists!    * \n"; } } else { print "Skipped sysop account creation, no name given.    * \n"; } $titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) ); $article = new Article( $titleobj ); $newid = $article->insertOn( $wgDatabase ); $revision = new Revision( array( 'page' => $newid, 'text' => wfMsg( 'mainpagetext' ) . "\n\n" . wfMsgNoTrans( 'mainpagedocfooter' ), 'comment' => '', 'user' => 0, 'user_text' => 'MediaWiki default', ) ); $revid = $revision->insertOn( $wgDatabase ); $article->updateRevisionOn( $wgDatabase, $revision ); } /* Write out the config file now that all is well */ print "\n"; print "

Creating LocalSettings.php...     \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 ) { dieout( "

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

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

\n" . htmlspecialchars( $localSettings ) . "

\n" ); } if(fwrite( $f, $localSettings ) ) { fclose( $f ); print "

\n"; writeSuccessMessage; } else { fclose( $f ); die("

An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again. \n"); print "\n"; } } while( false ); } ?> posted ) { echo "

Something's not quite right yet; make sure everything below is filled out correctly. \n"; } ?> Site config

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

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

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

*   *    * 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 "choose"; ?> License == "cc" ) { ?>          o RightsIcon ) . "\" alt='(Creative Commons icon)' />", "hidden" ); ?> o RightsText ), "hidden" ); ?> o RightsCode ), "hidden" ); ?> o RightsUrl ) . "\">" . htmlspecialchars( $conf->RightsUrl ) . "", "hidden" ); ?>

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

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

The password cannot be the same as the username. Object caching:

*   * turck ) { echo ""; aField( $conf, "Shm", "Turck MMCache", "radio", "turck" ); echo "    * "; } if( $conf->xcache ) { echo( '' ); aField( $conf, 'Shm', 'XCache', 'radio', 'xcache' ); echo( ' * ' ); } if ( $conf->apc ) { echo ""; aField( $conf, "Shm", "APC", "radio", "apc" ); echo "   * "; } if ( $conf->eaccel ) { echo ""; aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" ); echo "    * "; } if ( $conf->dba ) { echo ""; aField( $conf, "Shm", "DBA (not recommended)", "radio", "dba" ); echo "    * "; } ?>

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.

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.

DBA (Berkeley-style DB) is generally slower than using no cache at all, and is only recommended for testing. E-mail, e-mail notification and authentication setup E-mail features (global):

*   *

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. User-to-user e-mail:

*   *

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

*   *    *

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

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

*   *

If this option is enabled, users have to confirm their e-mail address using a magic link sent to them whenever they set or change it, and only authenticated e-mail addresses can receive mails from other users and/or change notification mails. Setting this option is recommended for public wikis because of potential abuse of the e-mail features above. Database config Database type: $errs[DBpicktype]\n"; ?>

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

If you only have a single user account and database available, enter those here. If you have database root access (see below) you can specify new accounts/databases to be created. This account will not be created if it pre-exists. If this is the case, ensure that it has SELECT, INSERT, UPDATE, and DELETE permissions on the MediaWiki database. Superuser account: checked="checked" /> Use superuser account

If the database user specified above does not exist, or does not have access to create the database (if needed) or tables within it, please check the box and provide details of a superuser account, such as root, which does.

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

Avoid exotic characters; something like mw_ is good. Storage Engine Select one:

*   *

InnoDB is best for public web installations, since it has good concurrency support. MyISAM may be faster in single-user installations. MyISAM databases tend to get corrupted more often than InnoDB databases. Database character set Select one:

*   *    *

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

The username specified above (at "DB username") will have its search path set to the above schemas, so it is recommended that you create a new user. The above schemas are generally correct: only change them if you are sure you need to.

Installation successful!

To complete the installation, please do the following:

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

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

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

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

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. or read it online

* MediaWiki home * Readme * Release notes * Documentation * User's Guide * FAQ

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

Thank you! – i123Pie biocontribs 20:01, 24 March 2008 (UTC) --172.189.160.70 20:24, 24 March 2008 (UTC)