74use Psr\Log\LoggerInterface;
75use Wikimedia\RequestTimeout\RequestTimeout;
85if ( !defined(
'MEDIAWIKI' ) ) {
91if ( ini_get(
'mbstring.func_overload' ) ) {
92 die(
'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
98if ( !defined(
'MW_ENTRY_POINT' ) ) {
104 define(
'MW_ENTRY_POINT',
'unknown' );
121require_once MW_INSTALL_PATH .
'/includes/AutoLoader.php';
122require_once MW_INSTALL_PATH .
'/includes/Defines.php';
125if ( !interface_exists( LoggerInterface::class ) ) {
127 'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
128 "library</a> to be present. This library is not embedded directly in MediaWiki's " .
129 "git repository and must be installed separately by the end user.\n\n" .
130 'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
131 '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
132 'for help on installing the required components.'
135 trigger_error( $message, E_USER_ERROR );
153if ( defined(
'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
162require_once MW_INSTALL_PATH .
'/includes/GlobalFunctions.php';
164HeaderCallback::register();
168mb_internal_encoding(
'UTF-8' );
177 MainConfigNames::BaseDirectory => MW_INSTALL_PATH,
178 MainConfigNames::ExtensionDirectory => MW_INSTALL_PATH .
'/extensions',
179 MainConfigNames::StyleDirectory => MW_INSTALL_PATH .
'/skins',
180 MainConfigNames::ServiceWiringFiles => [ MW_INSTALL_PATH .
'/includes/ServiceWiring.php' ],
189if ( !isset( $GLOBALS[
'wgScopeTest'] ) || $GLOBALS[
'wgScopeTest'] !==
$wgScopeTest ) {
190 foreach (
$wgSettings->getConfigSchema()->getDefinedKeys() as $key ) {
200 if ( defined(
'MW_CONFIG_CALLBACK' ) ) {
205 if ( getenv(
'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
209 $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
210 unset( $localSettingsLoader );
212 if ( str_ends_with( MW_CONFIG_FILE,
'.php' ) ) {
215 require_once MW_CONFIG_FILE;
230if (
$wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
232 $wikiFarmSettingsLoader->loadWikiFarmSettings();
233 unset( $wikiFarmSettingsLoader );
246if ( defined(
'MW_SETUP_CALLBACK' ) ) {
262require __DIR__ .
'/SetupDynamicConfig.php';
264if ( defined(
'MW_AUTOLOAD_TEST_CLASSES' ) ) {
265 require_once __DIR__ .
'/../tests/common/TestsAutoLoader.php';
270 '$wgBaseDirectory must not be modified in settings files! ' .
271 'Use the MW_INSTALL_PATH environment variable to override the installation root directory.'
283if ( defined(
'MW_AUTOLOAD_TEST_CLASSES' ) ) {
297if ( defined(
'MW_FINAL_SETUP_CALLBACK' ) ) {
298 call_user_func( MW_FINAL_SETUP_CALLBACK,
$wgSettings );
312putenv(
"LC_ALL=" . setlocale( LC_ALL,
'C.UTF-8',
'C' ) );
322MediaWikiServices::allowGlobalInstance();
326define(
'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
329if ( !defined(
'MW_PHPUNIT_TEST' ) ) {
341 '$wgServer must be set in LocalSettings.php. ' .
342 'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
343 'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
354 MediaWikiServices::getInstance()->getHookContainer(),
362 $wgCanonicalServer = MediaWikiServices::getInstance()->getUrlUtils()->getCanonicalServer();
367 wfWarn(
'$wgServerName should be derived from $wgCanonicalServer, '
368 .
'not customized. Overwriting $wgServerName.' );
387 wfWarn(
'Secure login was enabled on a server that only supports '
388 .
'HTTP or HTTPS. Disabling secure login.' );
398 MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
418$wgRequest = RequestContext::getMain()->getRequest();
421if (
$wgRequest->getCookie(
'UseDC',
'' ) ===
'master' ) {
425 MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching(
false );
429(
static function () {
432 $logger = LoggerFactory::getInstance(
'wfDebug' );
434 $self = $_SERVER[
'PHP_SELF'] ??
'';
435 $logger->debug(
"\n\nStart command line script $self" );
437 $debug =
"\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
438 $debug .=
"IP: " .
$wgRequest->getIP() .
"\n";
439 $debug .=
"HTTP HEADERS:\n";
440 foreach (
$wgRequest->getAllHeaders() as $name => $value ) {
441 $debug .=
"$name: $value\n";
443 $debug .=
"(end headers)";
444 $logger->debug( $debug );
449(
new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )->onSetupAfterCache();
471 HeaderCallback::warnIfHeadersSent();
477 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
478 MediaWiki\Session\PHPSessionHandler::install(
479 MediaWiki\Session\SessionManager::singleton()
483 $contLang = MediaWikiServices::getInstance()->getContentLanguage();
487 $session = MediaWiki\Session\SessionManager::getGlobalSession();
488 }
catch (
MediaWiki\Session\SessionOverflowException $ex ) {
492 foreach ( $ex->getSessionInfos() as $info ) {
493 $list[] = $info->getProvider()->describe( $contLang );
495 $list = $contLang->listToText( $list );
497 Message::newFromKey(
'sessionmanager-tie', $list )->inLanguage( $contLang )
503 if ( $session->isPersistent() ) {
508 if (
MediaWiki\Session\PHPSessionHandler::isEnabled() &&
509 ( $session->isPersistent() || $session->shouldRememberUser() ) &&
510 session_id() !== $session->getId()
513 if ( session_id() !==
'' ) {
514 wfDebugLog(
'session',
'PHP session {old_id} was already started, changing to {new_id}',
'all', [
515 'old_id' => session_id(),
516 'new_id' => $session->getId(),
518 session_write_close();
520 session_id( $session->getId() );
528 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
529 MediaWiki\Session\PHPSessionHandler::install(
530 MediaWiki\Session\SessionManager::singleton()
544register_shutdown_function(
static function () {
545 StubGlobalUser::$destructorDeprecationDisarmed =
true;
556$wgOut = RequestContext::getMain()->getOutput();
571 call_user_func( $func );
578 $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
579 if ( $sessionUser->getId() === 0 &&
580 MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
582 $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
584 MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
587 \MediaWiki\Logger\LoggerFactory::getInstance(
'authevents' )->info(
'Autocreation attempt', [
588 'event' =>
'autocreate',
589 'successful' => $res->isGood(),
590 'status' => ( $res->getErrorsArray() ?: $res->getWarningsArray() )[0][0] ??
'-',
594 unset( $sessionUser );
605 DeferredUpdates::addCallableUpdate(
static function () {
606 MediaWikiServices::getInstance()->getPingback()->run();
612 $logger = LoggerFactory::getInstance(
'Settings' );
614 $logger->warning( $msg );
627 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.