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