MediaWiki  master
Setup.php
Go to the documentation of this file.
1 <?php
53 // phpcs:disable MediaWiki.Usage.DeprecatedGlobalVariables
70 use Psr\Log\LoggerInterface;
71 use Wikimedia\RequestTimeout\RequestTimeout;
72 
80 // This file must be included from a valid entry point (e.g. WebStart.php, Maintenance.php)
81 if ( !defined( 'MEDIAWIKI' ) ) {
82  exit( 1 );
83 }
84 
85 // PHP must not be configured to overload mbstring functions. (T5782, T122807)
86 // This was deprecated by upstream in PHP 7.2 and was removed in PHP 8.0.
87 if ( ini_get( 'mbstring.func_overload' ) ) {
88  die( 'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
89 }
90 
91 // The MW_ENTRY_POINT constant must always exists, to make it safe to access.
92 // For compat, we do support older and custom MW entrypoints that don't set this,
93 // in which case we assign a default here.
94 if ( !defined( 'MW_ENTRY_POINT' ) ) {
100  define( 'MW_ENTRY_POINT', 'unknown' );
101 }
102 
103 // The $IP variable is defined for use by LocalSettings.php.
104 // It is made available as a global variable for backwards compatibility.
105 //
106 // Source code should instead use the MW_INSTALL_PATH constant, or the
107 // MainConfigNames::BaseDirectory setting. The BaseDirectory setting is set further
108 // down in Setup.php to the value of MW_INSTALL_PATH.
109 global $IP;
110 $IP = wfDetectInstallPath(); // ensure MW_INSTALL_PATH is defined
111 
117 require_once MW_INSTALL_PATH . '/includes/AutoLoader.php';
118 require_once MW_INSTALL_PATH . '/includes/Defines.php';
119 
120 // Assert that composer dependencies were successfully loaded
121 if ( !interface_exists( LoggerInterface::class ) ) {
122  $message = (
123  'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
124  "library</a> to be present. This library is not embedded directly in MediaWiki's " .
125  "git repository and must be installed separately by the end user.\n\n" .
126  'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
127  '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
128  'for help on installing the required components.'
129  );
130  echo $message;
131  trigger_error( $message, E_USER_ERROR );
132 }
133 
134 // Set $wgCommandLineMode to false if it wasn't set to true.
136 
143 
145 
146 $wgSettings = SettingsBuilder::getInstance();
147 
148 if ( defined( 'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
149  // Load config schema from MainConfigSchema. Useful for running scripts that
150  // generate other representations of the config schema. This is slow, so it
151  // should not be used for serving web traffic.
152  $wgSettings->load( new ReflectionSchemaSource( MainConfigSchema::class ) );
153 } else {
154  $wgSettings->load( new PhpSettingsSource( MW_INSTALL_PATH . '/includes/config-schema.php' ) );
155 }
156 
157 require_once MW_INSTALL_PATH . '/includes/GlobalFunctions.php';
158 
159 HeaderCallback::register();
160 
161 // Set the encoding used by PHP for reading HTTP input, and writing output.
162 // This is also the default for mbstring functions.
163 mb_internal_encoding( 'UTF-8' );
164 
169 // Initialize some config settings with dynamic defaults, and
170 // make default settings available in globals for use in LocalSettings.php.
171 $wgSettings->putConfigValues( [
172  MainConfigNames::BaseDirectory => MW_INSTALL_PATH,
173  MainConfigNames::ExtensionDirectory => MW_INSTALL_PATH . '/extensions',
174  MainConfigNames::StyleDirectory => MW_INSTALL_PATH . '/skins',
175  MainConfigNames::ServiceWiringFiles => [ MW_INSTALL_PATH . '/includes/ServiceWiring.php' ],
176  'Version' => MW_VERSION,
177 ] );
178 $wgSettings->apply();
179 
180 // $wgSettings->apply() puts all configuration into global variables.
181 // If we are not in global scope, make all relevant globals available
182 // in this file's scope as well.
183 $wgScopeTest = 'MediaWiki Setup.php scope test';
184 if ( !isset( $GLOBALS['wgScopeTest'] ) || $GLOBALS['wgScopeTest'] !== $wgScopeTest ) {
185  foreach ( $wgSettings->getConfigSchema()->getDefinedKeys() as $key ) {
186  $var = "wg$key";
187  // phpcs:ignore MediaWiki.NamingConventions.ValidGlobalName.allowedPrefix
188  global $$var;
189  }
190  unset( $key, $var );
191 }
192 unset( $wgScopeTest );
193 
194 try {
195  if ( defined( 'MW_CONFIG_CALLBACK' ) ) {
196  call_user_func( MW_CONFIG_CALLBACK, $wgSettings );
197  } else {
198  wfDetectLocalSettingsFile( MW_INSTALL_PATH );
199 
200  if ( getenv( 'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
201  // NOTE: This will not work for configuration variables that use a prefix
202  // other than "wg".
203  $localSettingsLoader = new LocalSettingsLoader( $wgSettings, MW_INSTALL_PATH );
204  $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
205  unset( $localSettingsLoader );
206  } else {
207  if ( str_ends_with( MW_CONFIG_FILE, '.php' ) ) {
208  // make defaults available as globals
209  $wgSettings->apply();
210  require_once MW_CONFIG_FILE;
211  } else {
212  $wgSettings->loadFile( MW_CONFIG_FILE );
213  }
214  }
215  }
216 
217  // Make settings loaded by LocalSettings.php available in globals for use here
218  $wgSettings->apply();
219 } catch ( MissingExtensionException $e ) {
220  // Make a common mistake give a friendly error
221  $e->render();
222 }
223 
224 // If in a wiki-farm, load site-specific settings
225 if ( $wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
226  $wikiFarmSettingsLoader = new WikiFarmSettingsLoader( $wgSettings );
227  $wikiFarmSettingsLoader->loadWikiFarmSettings();
228  unset( $wikiFarmSettingsLoader );
229 }
230 
231 // All settings should be loaded now.
232 $wgSettings->enterRegistrationStage();
233 
241 if ( defined( 'MW_SETUP_CALLBACK' ) ) {
242  call_user_func( MW_SETUP_CALLBACK, $wgSettings );
243  // Make any additional settings available in globals for use here
244  $wgSettings->apply();
245 }
246 
247 // Apply dynamic defaults declared in config schema callbacks.
249 $dynamicDefaults->applyDynamicDefaults( $wgSettings->getConfigBuilder() );
250 
251 // Make updated config available in global scope.
252 $wgSettings->apply();
253 
254 // Apply dynamic defaults implemented in SetupDynamicConfig.php.
255 // Ideally, all logic in SetupDynamicConfig would be converted to
256 // callbacks in the config schema.
257 require __DIR__ . '/SetupDynamicConfig.php';
258 
259 if ( defined( 'MW_AUTOLOAD_TEST_CLASSES' ) ) {
260  require_once __DIR__ . '/../tests/common/TestsAutoLoader.php';
261 }
262 
263 if ( $wgBaseDirectory !== MW_INSTALL_PATH ) {
264  throw new FatalError(
265  '$wgBaseDirectory must not be modified in settings files! ' .
266  'Use the MW_INSTALL_PATH environment variable to override the installation root directory.'
267  );
268 }
269 
270 // Start time limit
272  RequestTimeout::singleton()->setWallTimeLimit( $wgRequestTimeLimit );
273 }
274 
278 if ( defined( 'MW_AUTOLOAD_TEST_CLASSES' ) ) {
279  ExtensionRegistry::getInstance()->setLoadTestClassesAndNamespaces( true );
280 }
281 
282 ExtensionRegistry::getInstance()->setSettingsBuilder( $wgSettings );
283 ExtensionRegistry::getInstance()->loadFromQueue();
284 // Don't let any other extensions load
286 
292 if ( defined( 'MW_FINAL_SETUP_CALLBACK' ) ) {
293  call_user_func( MW_FINAL_SETUP_CALLBACK, $wgSettings );
294  // Make any additional settings available in globals for use below
295  $wgSettings->apply();
296 }
297 
298 // Config can no longer be changed.
299 $wgSettings->enterReadOnlyStage();
300 
301 // Set an appropriate locale (T291234)
302 // setlocale() will return the locale name actually set.
303 // The putenv() is meant to propagate the choice of locale to shell commands
304 // so that they will interpret UTF-8 correctly. If you have a problem with a
305 // shell command and need to send a special locale, you can override the locale
306 // with Command::environment().
307 putenv( "LC_ALL=" . setlocale( LC_ALL, 'C.UTF-8', 'C' ) );
308 
309 // Set PHP runtime to the desired timezone
310 date_default_timezone_set( $wgLocaltimezone );
311 
313 
314 // Enable the global service locator.
315 // Trivial expansion of site configuration should go before this point.
316 // Any non-trivial expansion that requires calling into MediaWikiServices or other parts of MW.
317 MediaWikiServices::allowGlobalInstance();
318 
319 // Define a constant that indicates that the bootstrapping of the service locator
320 // is complete.
321 define( 'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
322 
326 
327 // Non-trivial validation of: $wgServer
328 // The FatalError page only renders cleanly after MWExceptionHandler is installed.
329 if ( $wgServer === false ) {
330  // T30798: $wgServer must be explicitly set
331  throw new FatalError(
332  '$wgServer must be set in LocalSettings.php. ' .
333  'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
334  'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
335  );
336 }
337 
338 // Set up a fake $wgHooks array.
339 // XXX: It would be nice if we could still get the originally configured hook handlers
340 // using the MainConfigNames::Hooks setting, but it's not really needed,
341 // since we need the HookContainer to be initialized first anyway.
342 
343 global $wgHooks;
345  MediaWikiServices::getInstance()->getHookContainer(),
346  $wgHooks
347 );
348 
349 // Non-trivial expansion of: $wgCanonicalServer, $wgServerName.
350 // These require calling global functions.
351 // Also here are other settings that further depend on these two.
352 if ( $wgCanonicalServer === false ) {
353  $wgCanonicalServer = MediaWikiServices::getInstance()->getUrlUtils()->getCanonicalServer();
354 }
356 
358 if ( $wgServerName !== false ) {
359  wfWarn( '$wgServerName should be derived from $wgCanonicalServer, '
360  . 'not customized. Overwriting $wgServerName.' );
361 }
363 unset( $serverParts );
364 
365 // $wgEmergencyContact and $wgPasswordSender may be false or empty string (T104142)
366 if ( !$wgEmergencyContact ) {
367  $wgEmergencyContact = 'wikiadmin@' . $wgServerName;
368 }
369 if ( !$wgPasswordSender ) {
370  $wgPasswordSender = 'apache@' . $wgServerName;
371 }
372 if ( !$wgNoReplyAddress ) {
374 }
375 
376 // Non-trivial expansion of: $wgSecureLogin
377 // (due to calling wfWarn).
378 if ( $wgSecureLogin && substr( $wgServer, 0, 2 ) !== '//' ) {
379  $wgSecureLogin = false;
380  wfWarn( 'Secure login was enabled on a server that only supports '
381  . 'HTTP or HTTPS. Disabling secure login.' );
382 }
383 
384 // Now that GlobalFunctions is loaded, set defaults that depend on it.
385 if ( $wgTmpDirectory === false ) {
387 }
388 
389 if ( $wgSharedDB && $wgSharedTables ) {
390  // Apply $wgSharedDB table aliases for the local LB (all non-foreign DB connections)
391  MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
392  array_fill_keys(
394  [
395  'dbname' => $wgSharedDB,
396  'schema' => $wgSharedSchema,
397  'prefix' => $wgSharedPrefix
398  ]
399  )
400  );
401 }
402 
403 // Raise the memory limit if it's too low
404 // NOTE: This use wfDebug, and must remain after the MWDebug::setup() call.
406 
407 // Explicit globals, so this works with bootstrap.php
409 
410 // Initialize the request object in $wgRequest
411 $wgRequest = RequestContext::getMain()->getRequest(); // BackCompat
412 
413 // Make sure that object caching does not undermine the ChronologyProtector improvements
414 if ( $wgRequest->getCookie( 'UseDC', '' ) === 'master' ) {
415  // The user is pinned to the primary DC, meaning that they made recent changes which should
416  // be reflected in their subsequent web requests. Avoid the use of interim cache keys because
417  // they use a blind TTL and could be stale if an object changes twice in a short time span.
418  MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching( false );
419 }
420 
421 // Useful debug output
422 ( static function () {
424  $logger = LoggerFactory::getInstance( 'wfDebug' );
425  if ( $wgCommandLineMode ) {
426  $self = $_SERVER['PHP_SELF'] ?? '';
427  $logger->debug( "\n\nStart command line script $self" );
428  } else {
429  $debug = "\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
430  $debug .= "IP: " . $wgRequest->getIP() . "\n";
431  $debug .= "HTTP HEADERS:\n";
432  foreach ( $wgRequest->getAllHeaders() as $name => $value ) {
433  $debug .= "$name: $value\n";
434  }
435  $debug .= "(end headers)";
436  $logger->debug( $debug );
437  }
438 } )();
439 
440 // Most of the config is out, some might want to run hooks here.
441 ( new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )->onSetupAfterCache();
442 
443 // Now that variant lists may be available, parse any action paths and article paths
444 // as query parameters.
445 //
446 // Skip title interpolation on API queries where it is useless and sometimes harmful (T18019).
447 //
448 // Optimization: Skip on load.php and all other entrypoints besides index.php to save time.
449 //
450 // TODO: Figure out if this can be safely done after everything else in Setup.php (e.g. any
451 // hooks or other state that would miss this?). If so, move to wfIndexMain or MediaWiki::run.
452 if ( MW_ENTRY_POINT === 'index' ) {
453  $wgRequest->interpolateTitle();
454 }
455 
459 $wgInitialSessionId = null;
460 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
461  // If session.auto_start is there, we can't touch session name
462  if ( $wgPHPSessionHandling !== 'disable' && !wfIniGetBool( 'session.auto_start' ) ) {
463  HeaderCallback::warnIfHeadersSent();
464  session_name( $wgSessionName ?: $wgCookiePrefix . '_session' );
465  }
466 
467  // Create the SessionManager singleton and set up our session handler,
468  // unless we're specifically asked not to.
469  if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
471  MediaWiki\Session\SessionManager::singleton()
472  );
473  }
474 
475  $contLang = MediaWikiServices::getInstance()->getContentLanguage();
476 
477  // Initialize the session
478  try {
480  } catch ( MediaWiki\Session\SessionOverflowException $ex ) {
481  // The exception is because the request had multiple possible
482  // sessions tied for top priority. Report this to the user.
483  $list = [];
484  foreach ( $ex->getSessionInfos() as $info ) {
485  $list[] = $info->getProvider()->describe( $contLang );
486  }
487  $list = $contLang->listToText( $list );
488  throw new HttpError( 400,
489  Message::newFromKey( 'sessionmanager-tie', $list )->inLanguage( $contLang )
490  );
491  }
492 
493  unset( $contLang );
494 
495  if ( $session->isPersistent() ) {
496  $wgInitialSessionId = $session->getSessionId();
497  }
498 
499  $session->renew();
500  if ( MediaWiki\Session\PHPSessionHandler::isEnabled() &&
501  ( $session->isPersistent() || $session->shouldRememberUser() ) &&
502  session_id() !== $session->getId()
503  ) {
504  // Start the PHP-session for backwards compatibility
505  if ( session_id() !== '' ) {
506  wfDebugLog( 'session', 'PHP session {old_id} was already started, changing to {new_id}', 'all', [
507  'old_id' => session_id(),
508  'new_id' => $session->getId(),
509  ] );
510  session_write_close();
511  }
512  session_id( $session->getId() );
513  session_start();
514  }
515 
516  unset( $session );
517 } else {
518  // Even if we didn't set up a global Session, still install our session
519  // handler unless specifically requested not to.
520  if ( !defined( 'MW_NO_SESSION_HANDLER' ) ) {
522  MediaWiki\Session\SessionManager::singleton()
523  );
524  }
525 }
526 
527 // Explicit globals, so this works with bootstrap.php
529 
536 register_shutdown_function( static function () {
537  StubGlobalUser::$destructorDeprecationDisarmed = true;
538 } );
539 
543 $wgLang = new StubUserLang;
544 
548 $wgOut = RequestContext::getMain()->getOutput(); // BackCompat
549 
553 $wgTitle = null;
554 
555 // Explicit globals, so this works with bootstrap.php
557 
558 // Extension setup functions
559 // Entries should be added to this variable during the inclusion
560 // of the extension file. This allows the extension to perform
561 // any necessary initialisation in the fully initialised environment
562 foreach ( $wgExtensionFunctions as $func ) {
563  call_user_func( $func );
564 }
565 unset( $func ); // no global pollution; destroy reference
566 
567 // If the session user has a 0 id but a valid name, that means we need to
568 // autocreate it.
569 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
570  $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
571  if ( $sessionUser->getId() === 0 &&
572  MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
573  ) {
574  $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
575  $sessionUser,
576  MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
577  true
578  );
579  \MediaWiki\Logger\LoggerFactory::getInstance( 'authevents' )->info( 'Autocreation attempt', [
580  'event' => 'autocreate',
581  'status' => strval( $res ),
582  ] );
583  unset( $res );
584  }
585  unset( $sessionUser );
586 }
587 
588 if ( !$wgCommandLineMode ) {
590 }
591 
593 if ( $settingsWarnings ) {
594  $logger = LoggerFactory::getInstance( 'Settings' );
595  foreach ( $settingsWarnings as $msg ) {
596  $logger->warning( $msg );
597  }
598  unset( $logger );
599 }
600 
601 unset( $settingsWarnings );
602 
603 // Explicit globals, so this works with bootstrap.php
604 global $wgFullyInitialised;
605 $wgFullyInitialised = true;
606 
607 // T264370
608 if ( !defined( 'MW_NO_SESSION' ) && !$wgCommandLineMode ) {
609  MediaWiki\Session\SessionManager::singleton()->logPotentialSessionLeakage();
610 }
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
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.
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:94
global $wgRequest
Definition: Setup.php:408
if(defined( 'MW_SETUP_CALLBACK')) $dynamicDefaults
Customization point after most things are loaded (constants, functions, classes, LocalSettings.
Definition: Setup.php:248
$wgUser
Definition: Setup.php:535
if( $wgCanonicalServer===false) $wgVirtualRestConfig['global']['domain']
Definition: Setup.php:355
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgOut
Definition: Setup.php:528
$wgAutoloadClasses
Definition: Setup.php:144
$serverParts
Definition: Setup.php:357
global $wgInitialSessionId
Definition: Setup.php:408
if( $wgServer===false) global $wgHooks
Definition: Setup.php:329
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgLang
Definition: Setup.php:528
$wgConf
$wgConf hold the site configuration.
Definition: Setup.php:142
if( $wgServerName !==false) $wgServerName
Definition: Setup.php:362
if(!interface_exists(LoggerInterface::class)) $wgCommandLineMode
Pre-config setup: Before loading LocalSettings.php.
Definition: Setup.php:135
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) $wgTitle
Definition: Setup.php:528
$wgScopeTest
Definition: Setup.php:183
global $wgFullyInitialised
Definition: Setup.php:556
global $wgExtensionFunctions
Definition: Setup.php:556
$wgSettings
Definition: Setup.php:146
if(!defined( 'MW_NO_SESSION') &&! $wgCommandLineMode) if(! $wgCommandLineMode) $settingsWarnings
Definition: Setup.php:592
const MW_ENTRY_POINT
Definition: api.php:44
Abort the web request with a custom HTML string that will represent the entire response.
Definition: FatalError.php:37
Show an error that looks like an HTTP server error.
Definition: HttpError.php:32
static setup()
Definition: MWDebug.php:82
static installHandler(bool $logExceptionBacktrace=true, bool $propagateErrors=true)
Install handlers with PHP.
static setShowExceptionDetails(bool $showDetails)
This class provides an implementation of the core hook interfaces, forwarding hook calls to HookConta...
Definition: HookRunner.php:565
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.
Represents a title within MediaWiki.
Definition: Title.php:82
The MediaWiki class is the helper class for the index.php entry point.
Definition: MediaWiki.php:43
static newFromKey( $key,... $params)
Factory function that is just wrapper for the real constructor.
Definition: Message.php:403
Thrown when ExtensionRegistry cannot open the extension.json or skin.json file.
render()
Output an error response and exit.
static schedulePingback()
Schedule a deferred callable that will check if a pingback should be sent and (if so) proceed to send...
Definition: Pingback.php:296
static init(array $profilerConf)
Definition: Profiler.php:70
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:29