82use Psr\Log\LoggerInterface;
83use Wikimedia\RequestTimeout\RequestTimeout;
95if ( !defined(
'MEDIAWIKI' ) ) {
101if ( ini_get(
'mbstring.func_overload' ) ) {
102 die(
'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
108if ( !defined(
'MW_ENTRY_POINT' ) ) {
114 define(
'MW_ENTRY_POINT',
'unknown' );
129require_once MW_INSTALL_PATH .
'/includes/AutoLoader.php';
130require_once MW_INSTALL_PATH .
'/includes/Defines.php';
133if ( !interface_exists( LoggerInterface::class ) ) {
135 'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
136 "library</a> to be present. This library is not embedded directly in MediaWiki's " .
137 "git repository and must be installed separately by the end user.\n\n" .
138 'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
139 '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
140 'for help on installing the required components.'
143 trigger_error( $message, E_USER_ERROR );
161if ( defined(
'MW_USE_CONFIG_SCHEMA_CLASS' ) ) {
170require_once MW_INSTALL_PATH .
'/includes/GlobalFunctions.php';
173HeaderCallback::register();
178 [ HeaderCallback::class,
'warnIfHeadersSent' ]
183mb_internal_encoding(
'UTF-8' );
192 MainConfigNames::ExtensionDirectory => MW_INSTALL_PATH .
'/extensions',
193 MainConfigNames::StyleDirectory => MW_INSTALL_PATH .
'/skins',
194 MainConfigNames::UploadDirectory => MW_INSTALL_PATH .
'/images',
195 MainConfigNames::ServiceWiringFiles => [ MW_INSTALL_PATH .
'/includes/ServiceWiring.php' ],
204if ( !isset( $GLOBALS[
'wgScopeTest'] ) || $GLOBALS[
'wgScopeTest'] !==
$wgScopeTest ) {
205 foreach (
$wgSettings->getConfigSchema()->getDefinedKeys() as $key ) {
215 if ( defined(
'MW_CONFIG_CALLBACK' ) ) {
220 if ( getenv(
'MW_USE_LOCAL_SETTINGS_LOADER' ) ) {
224 $localSettingsLoader->loadLocalSettingsFile( MW_CONFIG_FILE );
225 unset( $localSettingsLoader );
227 if ( str_ends_with( MW_CONFIG_FILE,
'.php' ) ) {
230 require_once MW_CONFIG_FILE;
245if (
$wgSettings->getConfig()->get( MainConfigNames::WikiFarmSettingsDirectory ) ) {
247 $wikiFarmSettingsLoader->loadWikiFarmSettings();
248 unset( $wikiFarmSettingsLoader );
261if ( defined(
'MW_SETUP_CALLBACK' ) ) {
277require __DIR__ .
'/SetupDynamicConfig.php';
279if ( defined(
'MW_AUTOLOAD_TEST_CLASSES' ) ) {
280 require_once __DIR__ .
'/../tests/common/TestsAutoLoader.php';
291if ( defined(
'MW_AUTOLOAD_TEST_CLASSES' ) ) {
292 ExtensionRegistry::getInstance()->setLoadTestClassesAndNamespaces(
true );
295ExtensionRegistry::getInstance()->setSettingsBuilder(
$wgSettings );
296ExtensionRegistry::getInstance()->loadFromQueue();
298ExtensionRegistry::getInstance()->finish();
305if ( defined(
'MW_FINAL_SETUP_CALLBACK' ) ) {
306 call_user_func( MW_FINAL_SETUP_CALLBACK,
$wgSettings );
320putenv(
"LC_ALL=" . setlocale( LC_ALL,
'C.UTF-8',
'C' ) );
330MediaWikiServices::allowGlobalInstance();
334define(
'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
337if ( !defined(
'MW_PHPUNIT_TEST' ) ) {
347call_user_func(
static function (): void {
352 $tracer = MediaWikiServices::getInstance()->getTracer();
353 $request = RequestContext::getMain()->getRequest();
355 $startTimeNanos = (int)( 1e9 * $_SERVER[
'REQUEST_TIME_FLOAT'] );
358 $spanName =
"EntryPoint " .
MW_ENTRY_POINT .
".php HTTP {$request->getMethod()}";
360 $rootSpan = $tracer->createRootSpanFromCarrier( $spanName,
$wgAllowExternalReqID ? $request->getAllHeaders() : [] );
361 $rootSpan->setSpanKind( SpanInterface::SPAN_KIND_SERVER )
362 ->setAttributes( array_filter( [
363 'http.request.method' => $request->getMethod(),
364 'url.path' => $request->getRequestURL(),
365 'server.name' => $_SERVER[
'SERVER_NAME'] ??
null,
367 ->start( $startTimeNanos );
368 $rootSpan->activate();
370 TracerState::getInstance()->setRootSpan( $rootSpan );
378 '$wgServer must be set in LocalSettings.php. ' .
379 'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
380 'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
388 $wgCanonicalServer = MediaWikiServices::getInstance()->getUrlUtils()->getCanonicalServer();
393 wfWarn(
'$wgServerName should be derived from $wgCanonicalServer, '
394 .
'not customized. Overwriting $wgServerName.' );
413 wfWarn(
'Secure login was enabled on a server that only supports '
414 .
'HTTP or HTTPS. Disabling secure login.' );
424 MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
444$wgRequest = RequestContext::getMain()->getRequest();
447if (
$wgRequest->getCookie(
'UseDC',
'' ) ===
'master' ) {
451 MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching(
false );
455(
static function () {
458 $logger = LoggerFactory::getInstance(
'wfDebug' );
460 $self = $_SERVER[
'PHP_SELF'] ??
'';
461 $logger->debug(
"\n\nStart command line script $self" );
463 $debug =
"\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
464 $debug .=
"IP: " .
$wgRequest->getIP() .
"\n";
465 $debug .=
"HTTP HEADERS:\n";
466 foreach (
$wgRequest->getAllHeaders() as $name => $value ) {
467 $debug .=
"$name: $value\n";
469 $debug .=
"(end headers)";
470 $logger->debug( $debug );
475(
new HookRunner( MediaWikiServices::getInstance()->getHookContainer() ) )->onSetupAfterCache();
497 HeaderCallback::warnIfHeadersSent();
503 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
504 MediaWiki\Session\PHPSessionHandler::install(
505 MediaWiki\Session\SessionManager::singleton()
509 $contLang = MediaWikiServices::getInstance()->getContentLanguage();
513 $session = MediaWiki\Session\SessionManager::getGlobalSession();
514 }
catch (
MediaWiki\Session\SessionOverflowException $ex ) {
518 foreach ( $ex->getSessionInfos() as $info ) {
519 $list[] = $info->getProvider()->describe( $contLang );
521 $list = $contLang->listToText( $list );
523 Message::newFromKey(
'sessionmanager-tie', $list )->inLanguage( $contLang )
529 if ( $session->isPersistent() ) {
534 if (
MediaWiki\Session\PHPSessionHandler::isEnabled() &&
535 ( $session->isPersistent() || $session->shouldRememberUser() ) &&
536 session_id() !== $session->getId()
539 if ( session_id() !==
'' ) {
540 wfDebugLog(
'session',
'PHP session {old_id} was already started, changing to {new_id}',
'all', [
541 'old_id' => session_id(),
542 'new_id' => $session->getId(),
544 session_write_close();
546 session_id( $session->getId() );
554 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
555 MediaWiki\Session\PHPSessionHandler::install(
556 MediaWiki\Session\SessionManager::singleton()
570register_shutdown_function(
static function () {
571 StubGlobalUser::$destructorDeprecationDisarmed =
true;
582$wgOut = RequestContext::getMain()->getOutput();
604 $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
605 if ( $sessionUser->getId() === 0 &&
606 MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
608 MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
610 MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
616 unset( $sessionUser );
627 DeferredUpdates::addCallableUpdate(
static function () {
628 MediaWikiServices::getInstance()->getPingback()->run();
634 $logger = LoggerFactory::getInstance(
'Settings' );
636 $logger->warning( $msg );
649 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.
wfIsCLI()
Check if we are running from the commandline.
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)
global $wgInitialSessionId
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
if($wgServer===false) if( $wgCanonicalServer===false) $wgVirtualRestConfig['global']['domain']
global $wgFullyInitialised
global $wgExtensionFunctions
if(!defined('MW_SETUP_CALLBACK'))
static registerHeadersSentCallback(callable $callback)
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.
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.
$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.
$wgAllowExternalReqID
Config variable stub for the AllowExternalReqID 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.