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 and was 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 
143 $wgSettings = SettingsBuilder::getInstance();
144 
145 if ( defined( 'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
146  // Load config schema from MainConfigSchema. Useful for running scripts that
147  // generate other representations of the config schema. This is slow, so it
148  // should not be used for serving web traffic.
149  $wgSettings->load( new ReflectionSchemaSource( MainConfigSchema::class ) );
150 } elseif ( getenv( 'MW_USE_LEGACY_DEFAULT_SETTINGS' ) || defined( 'MW_USE_LEGACY_DEFAULT_SETTINGS' ) ) {
151  // Load the old DefaultSettings.php file. Should be removed in 1.39. See T300129.
152  require_once MW_INSTALL_PATH . '/includes/DefaultSettings.php';
153 
154  // This is temporary until we no longer need this mode.
155  // TODO: delete config-merge-strategies.php when this code is removed.
156  $wgSettings->load( new PhpSettingsSource( MW_INSTALL_PATH . '/includes/config-merge-strategies.php' ) );
157 } else {
158  $wgSettings->load( new PhpSettingsSource( MW_INSTALL_PATH . '/includes/config-schema.php' ) );
159 }
160 
161 require_once MW_INSTALL_PATH . '/includes/GlobalFunctions.php';
162 
163 HeaderCallback::register();
164 
165 // Set the encoding used by PHP for reading HTTP input, and writing output.
166 // This is also the default for mbstring functions.
167 mb_internal_encoding( 'UTF-8' );
168 
173 // Initialize some config settings with dynamic defaults, and
174 // make default settings available in globals for use in LocalSettings.php.
175 $wgSettings->putConfigValues( [
176  MainConfigNames::BaseDirectory => MW_INSTALL_PATH,
177  MainConfigNames::ExtensionDirectory => MW_INSTALL_PATH . '/extensions',
178  MainConfigNames::StyleDirectory => MW_INSTALL_PATH . '/skins',
179  MainConfigNames::ServiceWiringFiles => [ MW_INSTALL_PATH . '/includes/ServiceWiring.php' ],
180  'Version' => MW_VERSION,
181 ] );
182 $wgSettings->apply();
183 
184 // $wgSettings->apply() puts all configuration into global variables.
185 // If we are not in global scope, make all relevant globals available
186 // in this file's scope as well.
187 $wgScopeTest = 'MediaWiki Setup.php scope test';
188 if ( !isset( $GLOBALS['wgScopeTest'] ) || $GLOBALS['wgScopeTest'] !== $wgScopeTest ) {
189  foreach ( $wgSettings->getConfigSchema()->getDefinedKeys() as $key ) {
190  $var = "wg$key";
191  // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.allowedPrefix
192  global $$var;
193  }
194  unset( $key, $var );
195 }
196 unset( $wgScopeTest );
197 
198 if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
199  call_user_func( MW_CONFIG_CALLBACK, $wgSettings );
200 } else {
201  wfDetectLocalSettingsFile( MW_INSTALL_PATH );
202 
203  if ( getenv( 'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
204  // NOTE: This will not work for configuration variables that use a prefix
205  // other than "wg".
206  $localSettingsLoader = new LocalSettingsLoader( $wgSettings, MW_INSTALL_PATH );
207  $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
208  unset( $localSettingsLoader );
209  } else {
210  if ( str_ends_with( MW_CONFIG_FILE, '.php' ) ) {
211  // make defaults available as globals
212  $wgSettings->apply();
213  require_once MW_CONFIG_FILE;
214  } else {
215  $wgSettings->loadFile( MW_CONFIG_FILE );
216  }
217  }
218 }
219 
220 // Make settings loaded by LocalSettings.php available in globals for use here
221 $wgSettings->apply();
222 
223 // If in a wiki-farm, load site-specific settings
224 if ( $wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
225  $wikiFarmSettingsLoader = new WikiFarmSettingsLoader( $wgSettings );
226  $wikiFarmSettingsLoader->loadWikiFarmSettings();
227  unset( $wikiFarmSettingsLoader );
228 }
229 
230 // All settings should be loaded now.
231 $wgSettings->enterRegistrationStage();
232 
240 if ( defined( 'MW_SETUP_CALLBACK' ) ) {
241  call_user_func( MW_SETUP_CALLBACK, $wgSettings );
242  // Make any additional settings available in globals for use here
243  $wgSettings->apply();
244 }
245 
246 // Apply dynamic defaults declared in config schema callbacks.
248 $dynamicDefaults->applyDynamicDefaults( $wgSettings->getConfigBuilder() );
249 
250 // Make updated config available in global scope.
251 $wgSettings->apply();
252 
253 // Apply dynamic defaults implemented in SetupDynamicConfig.php.
254 // Ideally, all logic in SetupDynamicConfig would be converted to
255 // callbacks in the config schema.
256 require __DIR__ . '/SetupDynamicConfig.php';
257 
258 if ( $wgBaseDirectory !== MW_INSTALL_PATH ) {
259  throw new FatalError(
260  '$wgBaseDirectory must not be modified in settings files! ' .
261  'Use the MW_INSTALL_PATH environment variable to override the installation root directory.'
262  );
263 }
264 
265 // Start time limit
267  RequestTimeout::singleton()->setWallTimeLimit( $wgRequestTimeLimit );
268 }
269 
273 ExtensionRegistry::getInstance()->setSettingsBuilder( $wgSettings );
274 ExtensionRegistry::getInstance()->loadFromQueue();
275 // Don't let any other extensions load
277 
283 if ( defined( 'MW_FINAL_SETUP_CALLBACK' ) ) {
284  call_user_func( MW_FINAL_SETUP_CALLBACK, $wgSettings );
285  // Make any additional settings available in globals for use below
286  $wgSettings->apply();
287 }
288 
289 // Config can no longer be changed.
290 $wgSettings->enterReadOnlyStage();
291 
292 // Set an appropriate locale (T291234)
293 // setlocale() will return the locale name actually set.
294 // The putenv() is meant to propagate the choice of locale to shell commands
295 // so that they will interpret UTF-8 correctly. If you have a problem with a
296 // shell command and need to send a special locale, you can override the locale
297 // with Command::environment().
298 putenv( "LC_ALL=" . setlocale( LC_ALL, 'C.UTF-8', 'C' ) );
299 
300 // Set PHP runtime to the desired timezone
301 date_default_timezone_set( $wgLocaltimezone );
302 
304 
305 // Enable the global service locator.
306 // Trivial expansion of site configuration should go before this point.
307 // Any non-trivial expansion that requires calling into MediaWikiServices or other parts of MW.
308 MediaWikiServices::allowGlobalInstance();
309 
310 // Define a constant that indicates that the bootstrapping of the service locator
311 // is complete.
312 define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
313 
317 
318 // Non-trivial validation of: $wgServer
319 // The FatalError page only renders cleanly after MWExceptionHandler is installed.
320 if ( $wgServer === false ) {
321  // T30798: $wgServer must be explicitly set
322  throw new FatalError(
323  '$wgServer must be set in LocalSettings.php. ' .
324  'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
325  'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
326  );
327 }
328 
329 // Non-trivial expansion of: $wgCanonicalServer, $wgServerName.
330 // These require calling global functions.
331 // Also here are other settings that further depend on these two.
332 if ( $wgCanonicalServer === false ) {
334 }
336 
338 if ( $wgServerName !== false ) {
339  wfWarn( '$wgServerName should be derived from $wgCanonicalServer, '
340  . 'not customized. Overwriting $wgServerName.' );
341 }
343 unset( $serverParts );
344 
345 // $wgEmergencyContact and $wgPasswordSender may be false or empty string (T104142)
346 if ( !$wgEmergencyContact ) {
347  $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
348 }
349 if ( !$wgPasswordSender ) {
350  $wgPasswordSender = 'apache@' . $wgServerName;
351 }
352 if ( !$wgNoReplyAddress ) {
354 }
355 
356 // Non-trivial expansion of: $wgSecureLogin
357 // (due to calling wfWarn).
358 if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
359  $wgSecureLogin = false;
360  wfWarn( 'Secure login was enabled on a server that only supports '
361  . 'HTTP or HTTPS. Disabling secure login.' );
362 }
363 
364 // Now that GlobalFunctions is loaded, set defaults that depend on it.
365 if ( $wgTmpDirectory === false ) {
367 }
368 
369 if ( $wgSharedDB && $wgSharedTables ) {
370  // Apply $wgSharedDB table aliases for the local LB (all non-foreign DB connections)
371  MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
372  array_fill_keys(
374  [
375  'dbname' => $wgSharedDB,
376  'schema' => $wgSharedSchema,
377  'prefix' => $wgSharedPrefix
378  ]
379  )
380  );
381 }
382 
383 // Raise the memory limit if it's too low
384 // NOTE: This use wfDebug, and must remain after the MWDebug::setup() call.
386 
387 // Explicit globals, so this works with bootstrap.php
389 
390 // Initialize the request object in $wgRequest
391 $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
392 
393 // Make sure that object caching does not undermine the ChronologyProtector improvements
394 if ( $wgRequest->getCookie( 'UseDC', '' ) === 'master' ) {
395  // The user is pinned to the primary DC, meaning that they made recent changes which should
396  // be reflected in their subsequent web requests. Avoid the use of interim cache keys because
397  // they use a blind TTL and could be stale if an object changes twice in a short time span.
398  MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching( false );
399 }
400 
401 // Useful debug output
402 ( static function () {
404  $logger = LoggerFactory::getInstance( 'wfDebug' );
405  if ( $wgCommandLineMode ) {
406  $self = $_SERVER['PHP_SELF'] ?? '';
407  $logger->debug( "\n\nStart command line script $self" );
408  } else {
409  $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
410  $debug .= "IP: " . $wgRequest->getIP() . "\n";
411  $debug .= "HTTP HEADERS:\n";
412  foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
413  $debug .= "$name: $value\n";
414  }
415  $debug .= "(end headers)";
416  $logger->debug( $debug );
417  }
418 } )();
419 
420 // Most of the config is out, some might want to run hooks here.
421 Hooks::runner()->onSetupAfterCache();
422 
423 // Now that variant lists may be available, parse any action paths and article paths
424 // as query parameters.
425 //
426 // Skip title interpolation on API queries where it is useless and sometimes harmful (T18019).
427 //
428 // Optimization: Skip on load.php and all other entrypoints besides index.php to save time.
429 //
430 // TODO: Figure out if this can be safely done after everything else in Setup.php (e.g. any
431 // hooks or other state that would miss this?). If so, move to wfIndexMain or MediaWiki::run.
432 if ( MW_ENTRY_POINT === 'index' ) {
433  $wgRequest->interpolateTitle();
434 }
435 
439 $wgInitialSessionId = null;
440 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
441  // If session.auto_start is there, we can't touch session name
442  if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
443  HeaderCallback::warnIfHeadersSent();
444  session_name( $wgSessionName ?: $wgCookiePrefix . '_session' );
445  }
446 
447  // Create the SessionManager singleton and set up our session handler,
448  // unless we're specifically asked not to.
449  if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
451  MediaWiki\Session\SessionManager::singleton()
452  );
453  }
454 
455  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
456 
457  // Initialize the session
458  try {
460  } catch ( MediaWiki\Session\SessionOverflowException $ex ) {
461  // The exception is because the request had multiple possible
462  // sessions tied for top priority. Report this to the user.
463  $list = [];
464  foreach ( $ex->getSessionInfos() as $info ) {
465  $list[] = $info->getProvider()->describe( $contLang );
466  }
467  $list = $contLang->listToText( $list );
468  throw new HttpError( 400,
469  Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $contLang )
470  );
471  }
472 
473  unset( $contLang );
474 
475  if ( $session->isPersistent() ) {
476  $wgInitialSessionId = $session->getSessionId();
477  }
478 
479  $session->renew();
480  if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
481  ( $session->isPersistent() || $session->shouldRememberUser() ) &&
482  session_id() !== $session->getId()
483  ) {
484  // Start the PHP-session for backwards compatibility
485  if ( session_id() !== '' ) {
486  wfDebugLog( 'session', 'PHP session {old_id} was already started, changing to {new_id}', 'all', [
487  'old_id' => session_id(),
488  'new_id' => $session->getId(),
489  ] );
490  session_write_close();
491  }
492  session_id( $session->getId() );
493  session_start();
494  }
495 
496  unset( $session );
497 } else {
498  // Even if we didn't set up a global Session, still install our session
499  // handler unless specifically requested not to.
500  if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
502  MediaWiki\Session\SessionManager::singleton()
503  );
504  }
505 }
506 
507 // Explicit globals, so this works with bootstrap.php
509 
516 register_shutdown_function( static function () {
517  StubGlobalUser::$destructorDeprecationDisarmed = true;
518 } );
519 
523 $wgLang = new StubUserLang;
524 
528 $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
529 
533 $wgTitle = null;
534 
535 // Explicit globals, so this works with bootstrap.php
537 
538 // Extension setup functions
539 // Entries should be added to this variable during the inclusion
540 // of the extension file. This allows the extension to perform
541 // any necessary initialisation in the fully initialised environment
542 foreach ( $wgExtensionFunctions as $func ) {
543  call_user_func( $func );
544 }
545 unset( $func ); // no global pollution; destroy reference
546 
547 // If the session user has a 0 id but a valid name, that means we need to
548 // autocreate it.
549 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
550  $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
551  if ( $sessionUser->getId() === 0 &&
552  MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
553  ) {
554  $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
555  $sessionUser,
556  MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
557  true
558  );
559  \MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
560  'event' => 'autocreate',
561  'status' => strval( $res ),
562  ] );
563  unset( $res );
564  }
565  unset( $sessionUser );
566 }
567 
568 if ( !$wgCommandLineMode ) {
570 }
571 
573 if ( $settingsWarnings ) {
574  $logger = LoggerFactory::getInstance( 'Settings' );
575  foreach ( $settingsWarnings as $msg ) {
576  $logger->warning( $msg );
577  }
578  unset( $logger );
579 }
580 
581 unset( $settingsWarnings );
582 
583 // Explicit globals, so this works with bootstrap.php
584 global $wgFullyInitialised;
585 $wgFullyInitialised = true;
586 
587 // T264370
588 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
589  MediaWiki\Session\SessionManager::singleton()->logPotentialSessionLeakage();
590 }
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:388
if(defined( 'MW_SETUP_CALLBACK')) $dynamicDefaults
Customization point after most things are loaded (constants, functions, classes, LocalSettings.
Definition: Setup.php:247
$wgUser
Definition: Setup.php:515
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgOut
Definition: Setup.php:508
if( $wgServer===false) if( $wgCanonicalServer===false) $wgVirtualRestConfig['global']['domain']
Definition: Setup.php:335
$wgAutoloadClasses
Definition: Setup.php:141
$serverParts
Definition: Setup.php:337
global $wgInitialSessionId
The persistent session ID (if any) loaded at startup.
Definition: Setup.php:388
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgLang
Definition: Setup.php:508
$wgConf
$wgConf hold the site configuration.
Definition: Setup.php:139
if( $wgServerName !==false) $wgServerName
Definition: Setup.php:342
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:508
$wgScopeTest
Definition: Setup.php:187
global $wgFullyInitialised
Definition: Setup.php:536
global $wgExtensionFunctions
Definition: Setup.php:536
$wgSettings
Definition: Setup.php:143
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) if(! $wgCommandLineMode) $settingsWarnings
Definition: Setup.php:572
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.
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.
The MediaWiki class is the helper class for the index.php entry point.
Definition: MediaWiki.php:39
static newFromKey( $key,... $params)
Factory function that is just wrapper for the real constructor.
Definition: Message.php:402
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 init(array $profilerConf)
Definition: Profiler.php:69
static getMain()
Get the RequestContext object associated with the main request.
Configuration holder, particularly for multi-wiki sites.
$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.
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