MediaWiki  master
Setup.php
Go to the documentation of this file.
1 <?php
53 // phpcs:disable MediaWiki.Usage.DeprecatedGlobalVariables
67 use Psr\Log\LoggerInterface;
68 use Wikimedia\RequestTimeout\RequestTimeout;
69 
77 // This file must be included from a valid entry point (e.g. WebStart.php, Maintenance.php)
78 if ( !defined( 'MEDIAWIKI' ) ) {
79  exit( 1 );
80 }
81 
82 // PHP must not be configured to overload mbstring functions. (T5782, T122807)
83 // This was deprecated by upstream in PHP 7.2, likely to be removed in PHP 8.0.
84 if ( ini_get( 'mbstring.func_overload' ) ) {
85  die( 'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
86 }
87 
88 // The MW_ENTRY_POINT constant must always exists, to make it safe to access.
89 // For compat, we do support older and custom MW entrypoints that don't set this,
90 // in which case we assign a default here.
91 if ( !defined( 'MW_ENTRY_POINT' ) ) {
97  define( 'MW_ENTRY_POINT', 'unknown' );
98 }
99 
100 // The $IP variable is defined for use by LocalSettings.php.
101 // It is made available as a global variable for backwards compatibility.
102 //
103 // Source code should instead use the MW_INSTALL_PATH constant, or the
104 // MainConfigNames::BaseDirectory setting. The BaseDirectory setting is set further
105 // down in Setup.php to the value of MW_INSTALL_PATH.
106 global $IP;
107 $IP = $IP = wfDetectInstallPath(); // ensure MW_INSTALL_PATH is defined
108 
114 require_once MW_INSTALL_PATH . '/includes/AutoLoader.php';
115 require_once MW_INSTALL_PATH . '/includes/Defines.php';
116 
117 // Assert that composer dependencies were successfully loaded
118 if ( !interface_exists( LoggerInterface::class ) ) {
119  $message = (
120  'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
121  "library</a> to be present. This library is not embedded directly in MediaWiki's " .
122  "git repository and must be installed separately by the end user.\n\n" .
123  'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
124  '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
125  'for help on installing the required components.'
126  );
127  echo $message;
128  trigger_error( $message, E_USER_ERROR );
129 }
130 
131 // Set $wgCommandLineMode to false if it wasn't set to true.
133 
140 
142 
144  MW_INSTALL_PATH,
146  new GlobalConfigBuilder( 'wg' ),
147  new PhpIniSink()
148 );
149 
150 if ( defined( 'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
151  // Load config schema from MainConfigSchema. Useful for running scripts that
152  // generate other representations of the config schema. This is slow, so it
153  // should not be used for serving web traffic.
154  $wgSettings->load( new ReflectionSchemaSource( MainConfigSchema::class ) );
155 } elseif ( getenv( 'MW_USE_LEGACY_DEFAULT_SETTINGS' ) || defined( 'MW_USE_LEGACY_DEFAULT_SETTINGS' ) ) {
156  // Load the old DefaultSettings.php file. Should be removed in 1.39. See T300129.
157  require_once MW_INSTALL_PATH . '/includes/DefaultSettings.php';
158 
159  // This is temporary until we no longer need this mode.
160  // TODO: delete config-merge-strategies.php when this code is removed.
161  $wgSettings->load( new PhpSettingsSource( MW_INSTALL_PATH . '/includes/config-merge-strategies.php' ) );
162 } else {
163  $wgSettings->load( new PhpSettingsSource( MW_INSTALL_PATH . '/includes/config-schema.php' ) );
164 }
165 
166 require_once MW_INSTALL_PATH . '/includes/GlobalFunctions.php';
167 
168 HeaderCallback::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.
172 mb_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';
193 if ( !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 }
201 unset( $wgScopeTest );
202 
203 if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
204  call_user_func( MW_CONFIG_CALLBACK, $wgSettings );
205 } else {
206  wfDetectLocalSettingsFile( MW_INSTALL_PATH );
207 
208  if ( getenv( 'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
209  // NOTE: This will not work for configuration variables that use a prefix
210  // other than "wg".
211  $localSettingsLoader = new LocalSettingsLoader( $wgSettings, MW_INSTALL_PATH );
212  $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
213  unset( $localSettingsLoader );
214  } else {
215  if ( str_ends_with( MW_CONFIG_FILE, '.php' ) ) {
216  // make defaults available as globals
217  $wgSettings->apply();
218  require_once MW_CONFIG_FILE;
219  } else {
220  $wgSettings->loadFile( MW_CONFIG_FILE );
221  }
222  }
223 }
224 
225 // Make settings loaded by LocalSettings.php available in globals for use here
226 $wgSettings->apply();
227 
235 if ( defined( 'MW_SETUP_CALLBACK' ) ) {
236  call_user_func( MW_SETUP_CALLBACK, $wgSettings );
237  // Make any additional settings available in globals for use here
238  $wgSettings->apply();
239 }
240 
241 // If in a wiki-farm, load site-specific settings
242 if ( $wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
243  $wikiFarmSettingsLoader = new WikiFarmSettingsLoader( $wgSettings );
244  $wikiFarmSettingsLoader->loadWikiFarmSettings();
245  unset( $wikiFarmSettingsLoader );
246 }
247 
248 // Apply dynamic defaults declared in config schema callbacks.
250 $dynamicDefaults->applyDynamicDefaults( $wgSettings->getConfigBuilder() );
251 
252 // Make updated config available in global scope.
253 $wgSettings->apply();
254 
255 // Apply dynamic defaults implemented in SetupDynamicConfig.php.
256 // Ideally, all logic in SetupDynamicConfig would be converted to
257 // callbacks in the config schema.
258 require __DIR__ . '/SetupDynamicConfig.php';
259 
260 // All settings should be loaded now.
261 $wgSettings->finalize();
262 if ( $wgBaseDirectory !== MW_INSTALL_PATH ) {
263  throw new FatalError(
264  '$wgBaseDirectory must not be modified in settings files! ' .
265  'Use the MW_INSTALL_PATH environment variable to override the installation root directory.'
266  );
267 }
268 
269 // Start time limit
271  RequestTimeout::singleton()->setWallTimeLimit( $wgRequestTimeLimit );
272 }
273 
278 ExtensionRegistry::getInstance()->loadFromQueue();
279 // Don't let any other extensions load
281 
282 // Set an appropriate locale (T291234)
283 // setlocale() will return the locale name actually set.
284 // The putenv() is meant to propagate the choice of locale to shell commands
285 // so that they will interpret UTF-8 correctly. If you have a problem with a
286 // shell command and need to send a special locale, you can override the locale
287 // with Command::environment().
288 putenv( "LC_ALL=" . setlocale( LC_ALL, 'C.UTF-8', 'C' ) );
289 
290 // Set PHP runtime to the desired timezone
291 date_default_timezone_set( $wgLocaltimezone );
292 
294 
295 // Enable the global service locator.
296 // Trivial expansion of site configuration should go before this point.
297 // Any non-trivial expansion that requires calling into MediaWikiServices or other parts of MW.
298 MediaWikiServices::allowGlobalInstance();
299 
300 // Define a constant that indicates that the bootstrapping of the service locator
301 // is complete.
302 define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
303 
306 
307 // Non-trivial validation of: $wgServer
308 // The FatalError page only renders cleanly after MWExceptionHandler is installed.
309 if ( $wgServer === false ) {
310  // T30798: $wgServer must be explicitly set
311  throw new FatalError(
312  '$wgServer must be set in LocalSettings.php. ' .
313  'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
314  'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
315  );
316 }
317 
318 // Non-trivial expansion of: $wgCanonicalServer, $wgServerName.
319 // These require calling global functions.
320 // Also here are other settings that further depend on these two.
321 if ( $wgCanonicalServer === false ) {
323 }
325 
327 if ( $wgServerName !== false ) {
328  wfWarn( '$wgServerName should be derived from $wgCanonicalServer, '
329  . 'not customized. Overwriting $wgServerName.' );
330 }
332 unset( $serverParts );
333 
334 // $wgEmergencyContact and $wgPasswordSender may be false or empty string (T104142)
335 if ( !$wgEmergencyContact ) {
336  $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
337 }
338 if ( !$wgPasswordSender ) {
339  $wgPasswordSender = 'apache@' . $wgServerName;
340 }
341 if ( !$wgNoReplyAddress ) {
343 }
344 
345 // Non-trivial expansion of: $wgSecureLogin
346 // (due to calling wfWarn).
347 if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
348  $wgSecureLogin = false;
349  wfWarn( 'Secure login was enabled on a server that only supports '
350  . 'HTTP or HTTPS. Disabling secure login.' );
351 }
352 
353 // Now that GlobalFunctions is loaded, set defaults that depend on it.
354 if ( $wgTmpDirectory === false ) {
356 }
357 
358 if ( $wgSharedDB && $wgSharedTables ) {
359  // Apply $wgSharedDB table aliases for the local LB (all non-foreign DB connections)
360  MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
361  array_fill_keys(
363  [
364  'dbname' => $wgSharedDB,
365  'schema' => $wgSharedSchema,
366  'prefix' => $wgSharedPrefix
367  ]
368  )
369  );
370 }
371 
372 // Raise the memory limit if it's too low
373 // NOTE: This use wfDebug, and must remain after the MWDebug::setup() call.
375 
376 // Explicit globals, so this works with bootstrap.php
378 
379 // Initialize the request object in $wgRequest
380 $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
381 
382 // Make sure that object caching does not undermine the ChronologyProtector improvements
383 if ( $wgRequest->getCookie( 'UseDC', '' ) === 'master' ) {
384  // The user is pinned to the primary DC, meaning that they made recent changes which should
385  // be reflected in their subsequent web requests. Avoid the use of interim cache keys because
386  // they use a blind TTL and could be stale if an object changes twice in a short time span.
387  MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching( false );
388 }
389 
390 // Useful debug output
391 ( static function () {
393  $logger = LoggerFactory::getInstance( 'wfDebug' );
394  if ( $wgCommandLineMode ) {
395  $self = $_SERVER['PHP_SELF'] ?? '';
396  $logger->debug( "\n\nStart command line script $self" );
397  } else {
398  $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
399  $debug .= "IP: " . $wgRequest->getIP() . "\n";
400  $debug .= "HTTP HEADERS:\n";
401  foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
402  $debug .= "$name: $value\n";
403  }
404  $debug .= "(end headers)";
405  $logger->debug( $debug );
406  }
407 } )();
408 
409 // Most of the config is out, some might want to run hooks here.
410 Hooks::runner()->onSetupAfterCache();
411 
412 // Now that variant lists may be available, parse any action paths and article paths
413 // as query parameters.
414 //
415 // Skip title interpolation on API queries where it is useless and sometimes harmful (T18019).
416 //
417 // Optimization: Skip on load.php and all other entrypoints besides index.php to save time.
418 //
419 // TODO: Figure out if this can be safely done after everything else in Setup.php (e.g. any
420 // hooks or other state that would miss this?). If so, move to wfIndexMain or MediaWiki::run.
421 if ( MW_ENTRY_POINT === 'index' ) {
422  $wgRequest->interpolateTitle();
423 }
424 
428 $wgInitialSessionId = null;
429 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
430  // If session.auto_start is there, we can't touch session name
431  if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
432  HeaderCallback::warnIfHeadersSent();
433  session_name( $wgSessionName ?: $wgCookiePrefix . '_session' );
434  }
435 
436  // Create the SessionManager singleton and set up our session handler,
437  // unless we're specifically asked not to.
438  if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
440  MediaWiki\Session\SessionManager::singleton()
441  );
442  }
443 
444  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
445 
446  // Initialize the session
447  try {
449  } catch ( MediaWiki\Session\SessionOverflowException $ex ) {
450  // The exception is because the request had multiple possible
451  // sessions tied for top priority. Report this to the user.
452  $list = [];
453  foreach ( $ex->getSessionInfos() as $info ) {
454  $list[] = $info->getProvider()->describe( $contLang );
455  }
456  $list = $contLang->listToText( $list );
457  throw new HttpError( 400,
458  Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $contLang )
459  );
460  }
461 
462  unset( $contLang );
463 
464  if ( $session->isPersistent() ) {
465  $wgInitialSessionId = $session->getSessionId();
466  }
467 
468  $session->renew();
469  if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
470  ( $session->isPersistent() || $session->shouldRememberUser() ) &&
471  session_id() !== $session->getId()
472  ) {
473  // Start the PHP-session for backwards compatibility
474  if ( session_id() !== '' ) {
475  wfDebugLog( 'session', 'PHP session {old_id} was already started, changing to {new_id}', 'all', [
476  'old_id' => session_id(),
477  'new_id' => $session->getId(),
478  ] );
479  session_write_close();
480  }
481  session_id( $session->getId() );
482  session_start();
483  }
484 
485  unset( $session );
486 } else {
487  // Even if we didn't set up a global Session, still install our session
488  // handler unless specifically requested not to.
489  if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
491  MediaWiki\Session\SessionManager::singleton()
492  );
493  }
494 }
495 
496 // Explicit globals, so this works with bootstrap.php
498 
505 register_shutdown_function( static function () {
507 } );
508 
512 $wgLang = new StubUserLang;
513 
517 $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
518 
522 $wgTitle = null;
523 
524 // Explicit globals, so this works with bootstrap.php
526 
527 // Extension setup functions
528 // Entries should be added to this variable during the inclusion
529 // of the extension file. This allows the extension to perform
530 // any necessary initialisation in the fully initialised environment
531 foreach ( $wgExtensionFunctions as $func ) {
532  call_user_func( $func );
533 }
534 unset( $func ); // no global pollution; destroy reference
535 
536 // If the session user has a 0 id but a valid name, that means we need to
537 // autocreate it.
538 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
539  $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
540  if ( $sessionUser->getId() === 0 &&
541  MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
542  ) {
543  $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
544  $sessionUser,
545  MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
546  true
547  );
548  \MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
549  'event' => 'autocreate',
550  'status' => strval( $res ),
551  ] );
552  unset( $res );
553  }
554  unset( $sessionUser );
555 }
556 
557 if ( !$wgCommandLineMode ) {
559 }
560 
562 if ( $settingsWarnings ) {
563  $logger = LoggerFactory::getInstance( 'Settings' );
564  foreach ( $settingsWarnings as $msg ) {
565  $logger->warning( $msg );
566  }
567  unset( $logger );
568 }
569 
570 unset( $settingsWarnings );
571 
572 // Explicit globals, so this works with bootstrap.php
573 global $wgFullyInitialised;
574 $wgFullyInitialised = true;
575 
576 // T264370
577 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
578  MediaWiki\Session\SessionManager::singleton()->logPotentialSessionLeakage();
579 }
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:36
const PROTO_HTTP
Definition: Defines.php:193
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
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.
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
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:91
global $wgRequest
Definition: Setup.php:377
if(defined( 'MW_SETUP_CALLBACK')) if( $wgSettings->getConfig() ->get(MainConfigNames::WikiFarmSettingsDirectory)) $dynamicDefaults
Customization point after all loading (constants, functions, classes, LocalSettings).
Definition: Setup.php:249
$wgUser
Definition: Setup.php:504
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgOut
Definition: Setup.php:497
if( $wgServer===false) if( $wgCanonicalServer===false) $wgVirtualRestConfig['global']['domain']
Definition: Setup.php:324
$wgAutoloadClasses
Definition: Setup.php:141
$serverParts
Definition: Setup.php:326
global $wgInitialSessionId
The persistent session ID (if any) loaded at startup.
Definition: Setup.php:377
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgLang
Definition: Setup.php:497
$wgConf
$wgConf hold the site configuration.
Definition: Setup.php:139
if( $wgServerName !==false) $wgServerName
Definition: Setup.php:331
if(!interface_exists(LoggerInterface::class)) $wgCommandLineMode
Pre-config setup: Before loading LocalSettings.php.
Definition: Setup.php:132
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgTitle
Definition: Setup.php:497
$wgScopeTest
Definition: Setup.php:192
global $wgFullyInitialised
Definition: Setup.php:525
global $wgExtensionFunctions
Definition: Setup.php:525
$wgSettings
Definition: Setup.php:143
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) if(! $wgCommandLineMode) $settingsWarnings
Definition: Setup.php:561
const MW_ENTRY_POINT
Definition: api.php:41
Abort the web request with a custom HTML string that will represent the entire response.
Definition: FatalError.php:37
static runner()
Get a HookRunner instance for calling hooks using the new interfaces.
Definition: Hooks.php:173
Show an error that looks like an HTTP server error.
Definition: HttpError.php:32
static setup()
Definition: MWDebug.php:81
static installHandler(bool $logExceptionBacktrace=true, bool $propagateErrors=true)
Install handlers with PHP.
static setShowExceptionDetails(bool $showDetails)
PSR-3 logger instance factory.
static getInstance( $channel)
Get a named logger instance from the currently configured logger factory.
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.
static install(SessionManager $manager)
Install a session handler for the current web request.
static getGlobalSession()
If PHP's session_id() has been set, returns that session.
static singleton()
Get the global SessionManager.
Settings sink for values to pass to ini_set.
Definition: PhpIniSink.php:12
Utility for loading LocalSettings files.
Utility for loading settings files.
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...
The MediaWiki class is the helper class for the index.php entry point.
Definition: MediaWiki.php:38
static newFromKey( $key,... $params)
Factory function that is just wrapper for the real constructor.
Definition: Message.php:399
static schedulePingback()
Schedule a deferred callable that will check if a pingback should be sent and (if so) proceed to send...
Definition: Pingback.php:291
static getMain()
Get the RequestContext object associated with the main request.
Configuration holder, particularly for multi-wiki sites.
Stub object for the global user ($wgUser) that makes it possible to change the relevant underlying ob...
static bool $destructorDeprecationDisarmed
Stub object for the user language.
$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.
$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.
Definition: config-vars.php:31
$wgServer
Config variable stub for the Server setting, for use by phpdoc and IDEs.
Definition: config-vars.php:25
$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.
$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.
$self
const MW_CONFIG_CALLBACK
Definition: install.php:30
$debug
Definition: mcc.php:31