MediaWiki master
Setup.php
Go to the documentation of this file.
1<?php
53// phpcs:disable MediaWiki.Usage.DeprecatedGlobalVariables
78use Psr\Log\LoggerInterface;
79use Wikimedia\RequestTimeout\RequestTimeout;
80
88// This file must be included from a valid entry point (e.g. WebStart.php, Maintenance.php)
89if ( !defined( 'MEDIAWIKI' ) ) {
90 exit( 1 );
91}
92
93// PHP must not be configured to overload mbstring functions. (T5782, T122807)
94// This was deprecated by upstream in PHP 7.2 and was removed in PHP 8.0.
95if ( ini_get( 'mbstring.func_overload' ) ) {
96 die( 'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
97}
98
99// The MW_ENTRY_POINT constant must always exists, to make it safe to access.
100// For compat, we do support older and custom MW entrypoints that don't set this,
101// in which case we assign a default here.
102if ( !defined( 'MW_ENTRY_POINT' ) ) {
108 define( 'MW_ENTRY_POINT', 'unknown' );
109}
110
111// The $IP variable is defined for use by LocalSettings.php.
112// It is made available as a global variable for backwards compatibility.
113//
114// Source code should instead use the MW_INSTALL_PATH constant, or the
115// MainConfigNames::BaseDirectory setting. The BaseDirectory setting is set further
116// down in Setup.php to the value of MW_INSTALL_PATH.
117global $IP;
118$IP = wfDetectInstallPath(); // ensure MW_INSTALL_PATH is defined
119
125require_once MW_INSTALL_PATH . '/includes/AutoLoader.php';
126require_once MW_INSTALL_PATH . '/includes/Defines.php';
127
128// Assert that composer dependencies were successfully loaded
129if ( !interface_exists( LoggerInterface::class ) ) {
130 $message = (
131 'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
132 "library</a> to be present. This library is not embedded directly in MediaWiki's " .
133 "git repository and must be installed separately by the end user.\n\n" .
134 'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
135 '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
136 'for help on installing the required components.'
137 );
138 echo $message;
139 trigger_error( $message, E_USER_ERROR );
140}
141
142// Deprecated global variable for backwards-compatibility.
143// New code should check MW_ENTRY_POINT directly.
145
152
154
155$wgSettings = SettingsBuilder::getInstance();
156
157if ( defined( 'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
158 // Load config schema from MainConfigSchema. Useful for running scripts that
159 // generate other representations of the config schema. This is slow, so it
160 // should not be used for serving web traffic.
161 $wgSettings->load( new ReflectionSchemaSource( MainConfigSchema::class ) );
162} else {
163 $wgSettings->load( new PhpSettingsSource( MW_INSTALL_PATH . '/includes/config-schema.php' ) );
164}
165
166require_once MW_INSTALL_PATH . '/includes/GlobalFunctions.php';
167
168HeaderCallback::register();
169
170// Set the encoding used by PHP for reading HTTP input, and writing output.
171// This is also the default for mbstring functions.
172mb_internal_encoding( 'UTF-8' );
173
178// Initialize some config settings with dynamic defaults, and
179// make default settings available in globals for use in LocalSettings.php.
180$wgSettings->putConfigValues( [
181 MainConfigNames::BaseDirectory => MW_INSTALL_PATH,
182 MainConfigNames::ExtensionDirectory => MW_INSTALL_PATH . '/extensions',
183 MainConfigNames::StyleDirectory => MW_INSTALL_PATH . '/skins',
184 MainConfigNames::ServiceWiringFiles => [ MW_INSTALL_PATH . '/includes/ServiceWiring.php' ],
185 'Version' => MW_VERSION,
186] );
187$wgSettings->apply();
188
189// $wgSettings->apply() puts all configuration into global variables.
190// If we are not in global scope, make all relevant globals available
191// in this file's scope as well.
192$wgScopeTest = 'MediaWiki Setup.php scope test';
193if ( !isset( $GLOBALS['wgScopeTest'] ) || $GLOBALS['wgScopeTest'] !== $wgScopeTest ) {
194 foreach ( $wgSettings->getConfigSchema()->getDefinedKeys() as $key ) {
195 $var = "wg$key";
196 // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.allowedPrefix
197 global $$var;
198 }
199 unset( $key, $var );
200}
201unset( $wgScopeTest );
202
203try {
204 if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
205 call_user_func( MW_CONFIG_CALLBACK, $wgSettings );
206 } else {
207 wfDetectLocalSettingsFile( MW_INSTALL_PATH );
208
209 if ( getenv( 'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
210 // NOTE: This will not work for configuration variables that use a prefix
211 // other than "wg".
212 $localSettingsLoader = new LocalSettingsLoader( $wgSettings, MW_INSTALL_PATH );
213 $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
214 unset( $localSettingsLoader );
215 } else {
216 if ( str_ends_with( MW_CONFIG_FILE, '.php' ) ) {
217 // make defaults available as globals
218 $wgSettings->apply();
219 require_once MW_CONFIG_FILE;
220 } else {
221 $wgSettings->loadFile( MW_CONFIG_FILE );
222 }
223 }
224 }
225
226 // Make settings loaded by LocalSettings.php available in globals for use here
227 $wgSettings->apply();
228} catch ( MissingExtensionException $e ) {
229 // Make a common mistake give a friendly error
230 $e->render();
231}
232
233// If in a wiki-farm, load site-specific settings
234if ( $wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
235 $wikiFarmSettingsLoader = new WikiFarmSettingsLoader( $wgSettings );
236 $wikiFarmSettingsLoader->loadWikiFarmSettings();
237 unset( $wikiFarmSettingsLoader );
238}
239
240// All settings should be loaded now.
241$wgSettings->enterRegistrationStage();
242
250if ( defined( 'MW_SETUP_CALLBACK' ) ) {
251 call_user_func( MW_SETUP_CALLBACK, $wgSettings );
252 // Make any additional settings available in globals for use here
253 $wgSettings->apply();
254}
255
256// Apply dynamic defaults declared in config schema callbacks.
258$dynamicDefaults->applyDynamicDefaults( $wgSettings->getConfigBuilder() );
259
260// Make updated config available in global scope.
261$wgSettings->apply();
262
263// Apply dynamic defaults implemented in SetupDynamicConfig.php.
264// Ideally, all logic in SetupDynamicConfig would be converted to
265// callbacks in the config schema.
266require __DIR__ . '/SetupDynamicConfig.php';
267
268if ( defined( 'MW_AUTOLOAD_TEST_CLASSES' ) ) {
269 require_once __DIR__ . '/../tests/common/TestsAutoLoader.php';
270}
271
272if ( $wgBaseDirectory !== MW_INSTALL_PATH ) {
273 throw new FatalError(
274 '$wgBaseDirectory must not be modified in settings files! ' .
275 'Use the MW_INSTALL_PATH environment variable to override the installation root directory.'
276 );
277}
278
279// Start time limit
280if ( $wgRequestTimeLimit && MW_ENTRY_POINT !== 'cli' ) {
281 RequestTimeout::singleton()->setWallTimeLimit( $wgRequestTimeLimit );
282}
283
287if ( defined( 'MW_AUTOLOAD_TEST_CLASSES' ) ) {
288 ExtensionRegistry::getInstance()->setLoadTestClassesAndNamespaces( true );
289}
290
291ExtensionRegistry::getInstance()->setSettingsBuilder( $wgSettings );
292ExtensionRegistry::getInstance()->loadFromQueue();
293// Don't let any other extensions load
294ExtensionRegistry::getInstance()->finish();
295
301if ( defined( 'MW_FINAL_SETUP_CALLBACK' ) ) {
302 call_user_func( MW_FINAL_SETUP_CALLBACK, $wgSettings );
303 // Make any additional settings available in globals for use below
304 $wgSettings->apply();
305}
306
307// Config can no longer be changed.
308$wgSettings->enterReadOnlyStage();
309
310// Set an appropriate locale (T291234)
311// setlocale() will return the locale name actually set.
312// The putenv() is meant to propagate the choice of locale to shell commands
313// so that they will interpret UTF-8 correctly. If you have a problem with a
314// shell command and need to send a special locale, you can override the locale
315// with Command::environment().
316putenv( "LC_ALL=" . setlocale( LC_ALL, 'C.UTF-8', 'C' ) );
317
318// Set PHP runtime to the desired timezone
319date_default_timezone_set( $wgLocaltimezone );
320
321MWDebug::setup();
322
323// Enable the global service locator.
324// Trivial expansion of site configuration should go before this point.
325// Any non-trivial expansion that requires calling into MediaWikiServices or other parts of MW.
326MediaWikiServices::allowGlobalInstance();
327
328// Define a constant that indicates that the bootstrapping of the service locator
329// is complete.
330define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
331
332MWExceptionRenderer::setShowExceptionDetails( $wgShowExceptionDetails );
333if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
334 // Never install the handler in PHPUnit tests, otherwise PHPUnit's own handler will be unset and things
335 // like convertWarningsToExceptions won't work.
336 MWExceptionHandler::installHandler( $wgLogExceptionBacktrace, $wgPropagateErrors );
337}
339
340// Non-trivial validation of: $wgServer
341// The FatalError page only renders cleanly after MWExceptionHandler is installed.
342if ( $wgServer === false ) {
343 // T30798: $wgServer must be explicitly set
344 throw new FatalError(
345 '$wgServer must be set in LocalSettings.php. ' .
346 'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
347 'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
348 );
349}
350
351// Set up a fake $wgHooks array.
352// XXX: It would be nice if we could still get the originally configured hook handlers
353// using the MainConfigNames::Hooks setting, but it's not really needed,
354// since we need the HookContainer to be initialized first anyway.
355
356global $wgHooks;
358 MediaWikiServices::getInstance()->getHookContainer(),
360);
361
362// Non-trivial expansion of: $wgCanonicalServer, $wgServerName.
363// These require calling global functions.
364// Also here are other settings that further depend on these two.
365if ( $wgCanonicalServer === false ) {
366 $wgCanonicalServer = MediaWikiServices::getInstance()->getUrlUtils()->getCanonicalServer();
367}
369
370if ( $wgServerName !== false ) {
371 wfWarn( '$wgServerName should be derived from $wgCanonicalServer, '
372 . 'not customized. Overwriting $wgServerName.' );
373}
374$wgServerName = parse_url( $wgCanonicalServer, PHP_URL_HOST );
375
376// $wgEmergencyContact and $wgPasswordSender may be false or empty string (T104142)
377if ( !$wgEmergencyContact ) {
378 $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
379}
380if ( !$wgPasswordSender ) {
381 $wgPasswordSender = 'apache@' . $wgServerName;
382}
383if ( !$wgNoReplyAddress ) {
385}
386
387// Non-trivial expansion of: $wgSecureLogin
388// (due to calling wfWarn).
389if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
390 $wgSecureLogin = false;
391 wfWarn( 'Secure login was enabled on a server that only supports '
392 . 'HTTP or HTTPS. Disabling secure login.' );
393}
394
395// Now that GlobalFunctions is loaded, set defaults that depend on it.
396if ( $wgTmpDirectory === false ) {
398}
399
401 // Apply $wgSharedDB table aliases for the local LB (all non-foreign DB connections)
402 MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
403 array_fill_keys(
405 [
406 'dbname' => $wgSharedDB,
407 'schema' => $wgSharedSchema,
408 'prefix' => $wgSharedPrefix
409 ]
410 )
411 );
412}
413
414// Raise the memory limit if it's too low
415// NOTE: This use wfDebug, and must remain after the MWDebug::setup() call.
417
418// Explicit globals, so this works with bootstrap.php
420
421// Initialize the request object in $wgRequest
422$wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
423
424// Make sure that object caching does not undermine the ChronologyProtector improvements
425if ( $wgRequest->getCookie( 'UseDC', '' ) === 'master' ) {
426 // The user is pinned to the primary DC, meaning that they made recent changes which should
427 // be reflected in their subsequent web requests. Avoid the use of interim cache keys because
428 // they use a blind TTL and could be stale if an object changes twice in a short time span.
429 MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching( false );
430}
431
432// Useful debug output
433( static function () {
434 global $wgRequest;
435
436 $logger = LoggerFactory::getInstance( 'wfDebug' );
437 if ( MW_ENTRY_POINT === 'cli' ) {
438 $self = $_SERVER['PHP_SELF'] ?? '';
439 $logger->debug( "\n\nStart command line script $self" );
440 } else {
441 $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
442 $debug .= "IP: " . $wgRequest->getIP() . "\n";
443 $debug .= "HTTP HEADERS:\n";
444 foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
445 $debug .= "$name: $value\n";
446 }
447 $debug .= "(end headers)";
448 $logger->debug( $debug );
449 }
450} )();
451
452// Most of the config is out, some might want to run hooks here.
453( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )->onSetupAfterCache();
454
455// Now that variant lists may be available, parse any action paths and article paths
456// as query parameters.
457//
458// Skip title interpolation on API queries where it is useless and sometimes harmful (T18019).
459//
460// Optimization: Skip on load.php and all other entrypoints besides index.php to save time.
461//
462// TODO: Figure out if this can be safely done after everything else in Setup.php (e.g. any
463// hooks or other state that would miss this?). If so, move to wfIndexMain or MediaWiki::run.
464if ( MW_ENTRY_POINT === 'index' ) {
465 $wgRequest->interpolateTitle();
466}
467
472if ( !defined( 'MW_NO_SESSION' ) && MW_ENTRY_POINT !== 'cli' ) {
473 // If session.auto_start is there, we can't touch session name
474 if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
475 HeaderCallback::warnIfHeadersSent();
476 session_name( $wgSessionName ?: $wgCookiePrefix . '_session' );
477 }
478
479 // Create the SessionManager singleton and set up our session handler,
480 // unless we're specifically asked not to.
481 if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
482 MediaWiki\Session\PHPSessionHandler::install(
483 MediaWiki\Session\SessionManager::singleton()
484 );
485 }
486
487 $contLang = MediaWikiServices::getInstance()->getContentLanguage();
488
489 // Initialize the session
490 try {
491 $session = MediaWiki\Session\SessionManager::getGlobalSession();
492 } catch ( MediaWiki\Session\SessionOverflowException $ex ) {
493 // The exception is because the request had multiple possible
494 // sessions tied for top priority. Report this to the user.
495 $list = [];
496 foreach ( $ex->getSessionInfos() as $info ) {
497 $list[] = $info->getProvider()->describe( $contLang );
498 }
499 $list = $contLang->listToText( $list );
500 throw new HttpError( 400,
501 Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $contLang )
502 );
503 }
504
505 unset( $contLang );
506
507 if ( $session->isPersistent() ) {
508 $wgInitialSessionId = $session->getSessionId();
509 }
510
511 $session->renew();
512 if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
513 ( $session->isPersistent() || $session->shouldRememberUser() ) &&
514 session_id() !== $session->getId()
515 ) {
516 // Start the PHP-session for backwards compatibility
517 if ( session_id() !== '' ) {
518 wfDebugLog( 'session', 'PHP session {old_id} was already started, changing to {new_id}', 'all', [
519 'old_id' => session_id(),
520 'new_id' => $session->getId(),
521 ] );
522 session_write_close();
523 }
524 session_id( $session->getId() );
525 session_start();
526 }
527
528 unset( $session );
529} else {
530 // Even if we didn't set up a global Session, still install our session
531 // handler unless specifically requested not to.
532 if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
533 MediaWiki\Session\PHPSessionHandler::install(
534 MediaWiki\Session\SessionManager::singleton()
535 );
536 }
537}
538
539// Explicit globals, so this works with bootstrap.php
541
547$wgUser = new StubGlobalUser( RequestContext::getMain()->getUser() ); // BackCompat
548register_shutdown_function( static function () {
549 StubGlobalUser::$destructorDeprecationDisarmed = true;
550} );
551
556
560$wgOut = RequestContext::getMain()->getOutput(); // BackCompat
561
565$wgTitle = null;
566
567// Explicit globals, so this works with bootstrap.php
569
570// Extension setup functions
571// Entries should be added to this variable during the inclusion
572// of the extension file. This allows the extension to perform
573// any necessary initialisation in the fully initialised environment
574foreach ( $wgExtensionFunctions as $func ) {
575 call_user_func( $func );
576}
577unset( $func ); // no global pollution; destroy reference
578
579// If the session user has a 0 id but a valid name, that means we need to
580// autocreate it.
581if ( !defined( 'MW_NO_SESSION' ) && MW_ENTRY_POINT !== 'cli' ) {
582 $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
583 if ( $sessionUser->getId() === 0 &&
584 MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
585 ) {
586 $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
587 $sessionUser,
588 MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
589 true,
590 true,
591 $sessionUser
592 );
593 $firstMessage = $res->getMessages( 'error' )[0] ?? $res->getMessages( 'warning' )[0] ?? null;
594 \MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
595 'event' => 'autocreate',
596 'successful' => $res->isGood(),
597 'status' => $firstMessage ? $firstMessage->getKey() : '-',
598 ] );
599 unset( $res );
600 unset( $firstMessage );
601 }
602 unset( $sessionUser );
603}
604
605// Optimization: Avoid overhead from DeferredUpdates and Pingback deps when turned off.
606if ( MW_ENTRY_POINT !== 'cli' && $wgPingback ) {
607 // NOTE: Do not refactor to inject Config or otherwise make unconditional service call.
608 //
609 // On a plain install of MediaWiki, Pingback is likely the *only* feature
610 // involving DeferredUpdates or DB_PRIMARY on a regular page view.
611 // To allow for error recovery and fault isolation, let admins turn this
612 // off completely. (T269516)
613 DeferredUpdates::addCallableUpdate( static function () {
614 MediaWikiServices::getInstance()->getPingback()->run();
615 } );
616}
617
619if ( $settingsWarnings ) {
620 $logger = LoggerFactory::getInstance( 'Settings' );
621 foreach ( $settingsWarnings as $msg ) {
622 $logger->warning( $msg );
623 }
624 unset( $logger );
625}
626
627unset( $settingsWarnings );
628
629// Explicit globals, so this works with bootstrap.php
632
633// T264370
634if ( !defined( 'MW_NO_SESSION' ) && MW_ENTRY_POINT !== 'cli' ) {
635 MediaWiki\Session\SessionManager::singleton()->logPotentialSessionLeakage();
636}
getUser()
wfDetectLocalSettingsFile(?string $installationPath=null)
Decide and remember where to load LocalSettings from.
wfDetectInstallPath()
Decide and remember where mediawiki is installed.
const MW_VERSION
The running version of MediaWiki.
Definition Defines.php:37
wfTempDir()
Tries to get the system directory for temporary files.
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
wfMemoryLimit( $newLimit)
Raise PHP's memory limit (if needed).
wfIniGetBool( $setting)
Safety wrapper around ini_get() for boolean settings.
wfDebugLog( $logGroup, $text, $dest='all', array $context=[])
Send a line to a supplementary debug log file, if configured, or main debug log if not.
if(!defined( 'MEDIAWIKI')) if(ini_get('mbstring.func_overload')) if(!defined( 'MW_ENTRY_POINT')) global $IP
Environment checks.
Definition Setup.php:102
global $wgRequest
Definition Setup.php:419
if(defined( 'MW_SETUP_CALLBACK')) $dynamicDefaults
Customization point after most things are loaded (constants, functions, classes, LocalSettings.
Definition Setup.php:257
if(!defined('MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli') if(MW_ENTRY_POINT !=='cli' && $wgPingback $settingsWarnings)
Definition Setup.php:618
$wgUser
Definition Setup.php:547
if( $wgCanonicalServer===false) $wgVirtualRestConfig['global']['domain']
Definition Setup.php:368
$wgAutoloadClasses
Definition Setup.php:153
global $wgInitialSessionId
Definition Setup.php:419
if( $wgServer===false) global $wgHooks
Definition Setup.php:342
if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgLang
Definition Setup.php:540
if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgOut
Definition Setup.php:540
$wgConf
$wgConf hold the site configuration.
Definition Setup.php:151
if( $wgServerName !==false) $wgServerName
Definition Setup.php:374
if(!interface_exists(LoggerInterface::class)) $wgCommandLineMode
Pre-config setup: Before loading LocalSettings.php.
Definition Setup.php:144
if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgTitle
Definition Setup.php:540
$wgScopeTest
Definition Setup.php:192
global $wgFullyInitialised
Definition Setup.php:568
global $wgExtensionFunctions
Definition Setup.php:568
$wgSettings
Definition Setup.php:155
const MW_ENTRY_POINT
Definition api.php:35
Abort the web request with a custom HTML string that will represent the entire response.
Show an error that looks like an HTTP server error.
Definition HttpError.php:33
Configuration holder, particularly for multi-wiki sites.
Group all the pieces relevant to the context of a request into one instance.
Debug toolbar.
Definition MWDebug.php:48
Defer callable updates to run later in the PHP process.
This class provides an implementation of the core hook interfaces, forwarding hook calls to HookConta...
Create PSR-3 logger objects.
A class containing constants representing the names of configuration variables.
This class contains schema declarations for all configuration variables known to MediaWiki core.
Service locator for MediaWiki core services.
The Message class deals with fetching and processing of interface message into a variety of formats.
Definition Message.php:150
Load JSON files, and uses a Processor to extract information.
Thrown when ExtensionRegistry cannot open the extension.json or skin.json file.
Utility for loading LocalSettings files.
Builder class for constructing a Config object from a set of sources during bootstrap.
Settings loaded from a PHP file path as an array structure.
Constructs a settings array based on a PHP class by inspecting class members to construct a schema.
Utility for loading site-specific settings in a multi-tenancy ("wiki farm" or "wiki family") environm...
Stub object for the global user ($wgUser) that makes it possible to change the relevant underlying ob...
Stub object for the user language.
Represents a title within MediaWiki.
Definition Title.php:78
internal since 1.36
Definition User.php:93
static init(array $profilerConf)
Definition Profiler.php:68
$wgMemoryLimit
Config variable stub for the MemoryLimit setting, for use by phpdoc and IDEs.
$wgEmergencyContact
Config variable stub for the EmergencyContact setting, for use by phpdoc and IDEs.
$wgSharedTables
Config variable stub for the SharedTables setting, for use by phpdoc and IDEs.
$wgSessionName
Config variable stub for the SessionName setting, for use by phpdoc and IDEs.
$wgLogExceptionBacktrace
Config variable stub for the LogExceptionBacktrace setting, for use by phpdoc and IDEs.
$wgTmpDirectory
Config variable stub for the TmpDirectory setting, for use by phpdoc and IDEs.
$wgNoReplyAddress
Config variable stub for the NoReplyAddress setting, for use by phpdoc and IDEs.
$wgProfiler
Config variable stub for the Profiler setting, for use by phpdoc and IDEs.
$wgBaseDirectory
Config variable stub for the BaseDirectory setting, for use by phpdoc and IDEs.
$wgSecureLogin
Config variable stub for the SecureLogin setting, for use by phpdoc and IDEs.
$wgLocaltimezone
Config variable stub for the Localtimezone setting, for use by phpdoc and IDEs.
$wgShowExceptionDetails
Config variable stub for the ShowExceptionDetails setting, for use by phpdoc and IDEs.
$wgRequestTimeLimit
Config variable stub for the RequestTimeLimit setting, for use by phpdoc and IDEs.
$wgSharedDB
Config variable stub for the SharedDB setting, for use by phpdoc and IDEs.
$wgCanonicalServer
Config variable stub for the CanonicalServer setting, for use by phpdoc and IDEs.
$wgServer
Config variable stub for the Server setting, for use by phpdoc and IDEs.
$wgPropagateErrors
Config variable stub for the PropagateErrors setting, for use by phpdoc and IDEs.
$wgSharedSchema
Config variable stub for the SharedSchema setting, for use by phpdoc and IDEs.
$wgPasswordSender
Config variable stub for the PasswordSender setting, for use by phpdoc and IDEs.
$wgPingback
Config variable stub for the Pingback setting, for use by phpdoc and IDEs.
$wgCookiePrefix
Config variable stub for the CookiePrefix setting, for use by phpdoc and IDEs.
$wgSharedPrefix
Config variable stub for the SharedPrefix setting, for use by phpdoc and IDEs.
$wgPHPSessionHandling
Config variable stub for the PHPSessionHandling setting, for use by phpdoc and IDEs.
const MW_CONFIG_CALLBACK
Definition install.php:33
A helper class for throttling authentication attempts.