75use Psr\Log\LoggerInterface;
76use Wikimedia\RequestTimeout\RequestTimeout;
86if ( !defined(
'MEDIAWIKI' ) ) {
92if ( ini_get(
'mbstring.func_overload' ) ) {
93 die(
'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
99if ( !defined(
'MW_ENTRY_POINT' ) ) {
105 define(
'MW_ENTRY_POINT',
'unknown' );
122require_once MW_INSTALL_PATH .
'/includes/AutoLoader.php';
123require_once MW_INSTALL_PATH .
'/includes/Defines.php';
126if ( !interface_exists( LoggerInterface::class ) ) {
128 'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
129 "library</a> to be present. This library is not embedded directly in MediaWiki's " .
130 "git repository and must be installed separately by the end user.\n\n" .
131 'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
132 '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
133 'for help on installing the required components.'
136 trigger_error( $message, E_USER_ERROR );
154if ( defined(
'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
163require_once MW_INSTALL_PATH .
'/includes/GlobalFunctions.php';
165HeaderCallback::register();
169mb_internal_encoding(
'UTF-8' );
178 MainConfigNames::BaseDirectory => MW_INSTALL_PATH,
179 MainConfigNames::ExtensionDirectory => MW_INSTALL_PATH .
'/extensions',
180 MainConfigNames::StyleDirectory => MW_INSTALL_PATH .
'/skins',
181 MainConfigNames::ServiceWiringFiles => [ MW_INSTALL_PATH .
'/includes/ServiceWiring.php' ],
190if ( !isset( $GLOBALS[
'wgScopeTest'] ) || $GLOBALS[
'wgScopeTest'] !==
$wgScopeTest ) {
191 foreach (
$wgSettings->getConfigSchema()->getDefinedKeys() as $key ) {
201 if ( defined(
'MW_CONFIG_CALLBACK' ) ) {
206 if ( getenv(
'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
210 $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
211 unset( $localSettingsLoader );
213 if ( str_ends_with( MW_CONFIG_FILE,
'.php' ) ) {
216 require_once MW_CONFIG_FILE;
231if (
$wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
233 $wikiFarmSettingsLoader->loadWikiFarmSettings();
234 unset( $wikiFarmSettingsLoader );
247if ( defined(
'MW_SETUP_CALLBACK' ) ) {
263require __DIR__ .
'/SetupDynamicConfig.php';
265if ( defined(
'MW_AUTOLOAD_TEST_CLASSES' ) ) {
266 require_once __DIR__ .
'/../tests/common/TestsAutoLoader.php';
271 '$wgBaseDirectory must not be modified in settings files! ' .
272 'Use the MW_INSTALL_PATH environment variable to override the installation root directory.'
284if ( defined(
'MW_AUTOLOAD_TEST_CLASSES' ) ) {
298if ( defined(
'MW_FINAL_SETUP_CALLBACK' ) ) {
299 call_user_func( MW_FINAL_SETUP_CALLBACK,
$wgSettings );
313putenv(
"LC_ALL=" . setlocale( LC_ALL,
'C.UTF-8',
'C' ) );
323MediaWikiServices::allowGlobalInstance();
327define(
'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
330if ( !defined(
'MW_PHPUNIT_TEST' ) ) {
342 '$wgServer must be set in LocalSettings.php. ' .
343 'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
344 'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
355 MediaWikiServices::getInstance()->getHookContainer(),
363 $wgCanonicalServer = MediaWikiServices::getInstance()->getUrlUtils()->getCanonicalServer();
368 wfWarn(
'$wgServerName should be derived from $wgCanonicalServer, '
369 .
'not customized. Overwriting $wgServerName.' );
388 wfWarn(
'Secure login was enabled on a server that only supports '
389 .
'HTTP or HTTPS. Disabling secure login.' );
399 MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
419$wgRequest = RequestContext::getMain()->getRequest();
422if (
$wgRequest->getCookie(
'UseDC',
'' ) ===
'master' ) {
426 MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching(
false );
430(
static function () {
433 $logger = LoggerFactory::getInstance(
'wfDebug' );
435 $self = $_SERVER[
'PHP_SELF'] ??
'';
436 $logger->debug(
"\n\nStart command line script $self" );
438 $debug =
"\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
439 $debug .=
"IP: " .
$wgRequest->getIP() .
"\n";
440 $debug .=
"HTTP HEADERS:\n";
441 foreach (
$wgRequest->getAllHeaders() as $name => $value ) {
442 $debug .=
"$name: $value\n";
444 $debug .=
"(end headers)";
445 $logger->debug( $debug );
450(
new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )->onSetupAfterCache();
472 HeaderCallback::warnIfHeadersSent();
478 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
479 MediaWiki\Session\PHPSessionHandler::install(
480 MediaWiki\Session\SessionManager::singleton()
484 $contLang = MediaWikiServices::getInstance()->getContentLanguage();
488 $session = MediaWiki\Session\SessionManager::getGlobalSession();
489 }
catch (
MediaWiki\Session\SessionOverflowException $ex ) {
493 foreach ( $ex->getSessionInfos() as $info ) {
494 $list[] = $info->getProvider()->describe( $contLang );
496 $list = $contLang->listToText( $list );
498 Message::newFromKey(
'sessionmanager-tie', $list )->inLanguage( $contLang )
504 if ( $session->isPersistent() ) {
509 if (
MediaWiki\Session\PHPSessionHandler::isEnabled() &&
510 ( $session->isPersistent() || $session->shouldRememberUser() ) &&
511 session_id() !== $session->getId()
514 if ( session_id() !==
'' ) {
515 wfDebugLog(
'session',
'PHP session {old_id} was already started, changing to {new_id}',
'all', [
516 'old_id' => session_id(),
517 'new_id' => $session->getId(),
519 session_write_close();
521 session_id( $session->getId() );
529 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
530 MediaWiki\Session\PHPSessionHandler::install(
531 MediaWiki\Session\SessionManager::singleton()
545register_shutdown_function(
static function () {
546 StubGlobalUser::$destructorDeprecationDisarmed =
true;
557$wgOut = RequestContext::getMain()->getOutput();
572 call_user_func( $func );
579 $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
580 if ( $sessionUser->getId() === 0 &&
581 MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
583 $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
585 MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
588 \MediaWiki\Logger\LoggerFactory::getInstance(
'authevents' )->info(
'Autocreation attempt', [
589 'event' =>
'autocreate',
590 'successful' => $res->isGood(),
591 'status' => ( $res->getErrorsArray() ?: $res->getWarningsArray() )[0][0] ??
'-',
595 unset( $sessionUser );
606 DeferredUpdates::addCallableUpdate(
static function () {
607 MediaWikiServices::getInstance()->getPingback()->run();
613 $logger = LoggerFactory::getInstance(
'Settings' );
615 $logger->warning( $msg );
628 MediaWiki\Session\SessionManager::singleton()->logPotentialSessionLeakage();
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.
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.
if(defined( 'MW_SETUP_CALLBACK')) $dynamicDefaults
Customization point after most things are loaded (constants, functions, classes, LocalSettings.
if(!defined('MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli') if(MW_ENTRY_POINT !=='cli' && $wgPingback $settingsWarnings)
if( $wgCanonicalServer===false) $wgVirtualRestConfig['global']['domain']
global $wgInitialSessionId
if( $wgServer===false) global $wgHooks
if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgLang
if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgOut
$wgConf
$wgConf hold the site configuration.
if( $wgServerName !==false) $wgServerName
if(!interface_exists(LoggerInterface::class)) $wgCommandLineMode
Pre-config setup: Before loading LocalSettings.php.
if(!defined( 'MW_NO_SESSION') &&MW_ENTRY_POINT !=='cli' $wgTitle
global $wgFullyInitialised
global $wgExtensionFunctions
Abort the web request with a custom HTML string that will represent the entire response.
Show an error that looks like an HTTP server error.
Group all the pieces relevant to the context of a request into one instance.
A class containing constants representing the names of configuration variables.
This class contains schema declarations for all configuration variables known to MediaWiki core.
Thrown when ExtensionRegistry cannot open the extension.json or skin.json file.
render()
Output an error response and exit.
static init(array $profilerConf)
$wgMemoryLimit
Config variable stub for the MemoryLimit setting, for use by phpdoc and IDEs.
$wgEmergencyContact
Config variable stub for the EmergencyContact setting, for use by phpdoc and IDEs.
$wgSharedTables
Config variable stub for the SharedTables setting, for use by phpdoc and IDEs.
$wgSessionName
Config variable stub for the SessionName setting, for use by phpdoc and IDEs.
$wgLogExceptionBacktrace
Config variable stub for the LogExceptionBacktrace setting, for use by phpdoc and IDEs.
$wgTmpDirectory
Config variable stub for the TmpDirectory setting, for use by phpdoc and IDEs.
$wgNoReplyAddress
Config variable stub for the NoReplyAddress setting, for use by phpdoc and IDEs.
$wgProfiler
Config variable stub for the Profiler setting, for use by phpdoc and IDEs.
$wgBaseDirectory
Config variable stub for the BaseDirectory setting, for use by phpdoc and IDEs.
$wgSecureLogin
Config variable stub for the SecureLogin setting, for use by phpdoc and IDEs.
$wgLocaltimezone
Config variable stub for the Localtimezone setting, for use by phpdoc and IDEs.
$wgShowExceptionDetails
Config variable stub for the ShowExceptionDetails setting, for use by phpdoc and IDEs.
$wgRequestTimeLimit
Config variable stub for the RequestTimeLimit setting, for use by phpdoc and IDEs.
$wgSharedDB
Config variable stub for the SharedDB setting, for use by phpdoc and IDEs.
$wgCanonicalServer
Config variable stub for the CanonicalServer setting, for use by phpdoc and IDEs.
$wgServer
Config variable stub for the Server setting, for use by phpdoc and IDEs.
$wgPropagateErrors
Config variable stub for the PropagateErrors setting, for use by phpdoc and IDEs.
$wgSharedSchema
Config variable stub for the SharedSchema setting, for use by phpdoc and IDEs.
$wgPasswordSender
Config variable stub for the PasswordSender setting, for use by phpdoc and IDEs.
$wgPingback
Config variable stub for the Pingback setting, for use by phpdoc and IDEs.
$wgCookiePrefix
Config variable stub for the CookiePrefix setting, for use by phpdoc and IDEs.
$wgSharedPrefix
Config variable stub for the SharedPrefix setting, for use by phpdoc and IDEs.
$wgPHPSessionHandling
Config variable stub for the PHPSessionHandling setting, for use by phpdoc and IDEs.