53use Psr\Log\LoggerInterface;
56use Wikimedia\RequestTimeout\RequestTimeout;
66if ( !defined(
'MEDIAWIKI' ) ) {
72if ( !isset( $GLOBALS[
'wgScopeTest'] ) || $GLOBALS[
'wgScopeTest'] !==
$wgScopeTest ) {
73 echo
"Error, Setup.php must be included from the file scope.\n";
80if ( ini_get(
'mbstring.func_overload' ) ) {
81 die(
'MediaWiki does not support installations where mbstring.func_overload is non-zero.' );
87if ( !defined(
'MW_ENTRY_POINT' ) ) {
93 define(
'MW_ENTRY_POINT',
'unknown' );
102require_once
"$IP/includes/AutoLoader.php";
103require_once
"$IP/includes/Defines.php";
104require_once
"$IP/includes/DefaultSettings.php";
105require_once
"$IP/includes/GlobalFunctions.php";
108if ( is_readable(
"$IP/vendor/autoload.php" ) ) {
109 require_once
"$IP/vendor/autoload.php";
110} elseif ( file_exists(
"$IP/vendor/autoload.php" ) ) {
111 die(
"$IP/vendor/autoload.php exists but is not readable" );
115if ( !interface_exists( LoggerInterface::class ) ) {
117 'MediaWiki requires the <a href="https://github.com/php-fig/log">PSR-3 logging ' .
118 "library</a> to be present. This library is not embedded directly in MediaWiki's " .
119 "git repository and must be installed separately by the end user.\n\n" .
120 'Please see the <a href="https://www.mediawiki.org/wiki/Download_from_Git' .
121 '#Fetch_external_libraries">instructions for installing libraries</a> on mediawiki.org ' .
122 'for help on installing the required components.'
125 trigger_error( $message, E_USER_ERROR );
129HeaderCallback::register();
133mb_internal_encoding(
'UTF-8' );
139if ( defined(
'MW_CONFIG_CALLBACK' ) ) {
142 if ( !defined(
'MW_CONFIG_FILE' ) ) {
143 define(
'MW_CONFIG_FILE',
"$IP/LocalSettings.php" );
145 require_once MW_CONFIG_FILE;
155if ( defined(
'MW_SETUP_CALLBACK' ) ) {
156 call_user_func( MW_SETUP_CALLBACK );
174putenv(
"LC_ALL=$wgShellLocale" );
218 $wgLogo =
"$wgResourceBasePath/resources/assets/wiki.png";
255 "{$wgStylePath}/common/images/",
256 "{$wgResourceBasePath}/resources/assets/licenses/",
278 "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
280 "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " .
281 "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x";
297 'name' =>
'fsLockManager',
298 'class' => FSLockManager::class,
299 'lockDirectory' =>
"{$wgUploadDirectory}/lockdir",
302 'name' =>
'nullLockManager',
303 'class' => NullLockManager::class,
313 'imageHeight' => 120,
314 'captionLength' =>
true,
316 'showDimensions' =>
true,
317 'mode' =>
'traditional',
325 'class' => LocalRepo::class,
350 'class' => ForeignDBRepo::class,
370 'class' => FileRepo::class,
384 'class' => ForeignAPIRepo::class,
385 'name' =>
'wikimediacommons',
386 'apibase' =>
'https://commons.wikimedia.org/w/api.php',
387 'url' =>
'https://upload.wikimedia.org/wikipedia/commons',
388 'thumbUrl' =>
'https://upload.wikimedia.org/wikipedia/commons/thumb',
390 'transformVia404' =>
true,
391 'fetchDescription' =>
true,
392 'descriptionCacheExpiry' => 43200,
393 'apiThumbCacheExpiry' => 0,
397 if ( !isset( $repo[
'directory'] ) && $repo[
'class'] === ForeignAPIRepo::class ) {
400 if ( !isset( $repo[
'backend'] ) ) {
401 $repo[
'backend'] = $repo[
'name'] .
'-backend';
476foreach ( LanguageCode::getNonstandardLanguageCodeMapping() as $code => $bcp47 ) {
477 $bcp47 = strtolower( $bcp47 );
488if ( isset( $wgSlaveLagWarning ) ) {
493 '$wgSlaveLagWarning set but $wgDatabaseReplicaLagWarning unchanged; using $wgSlaveLagWarning',
502if ( isset( $wgSlaveLagCritical ) ) {
507 '$wgSlaveLagCritical set but $wgDatabaseReplicaLagCritical unchanged; using $wgSlaveLagCritical',
517 Wikimedia\suppressWarnings();
519 Wikimedia\restoreWarnings();
564if ( defined(
'MW_NO_SESSION' ) ) {
573MediaWikiServices::allowGlobalInstance();
577define(
'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
579MWExceptionHandler::installHandler();
585 '$wgServer must be set in LocalSettings.php. ' .
586 'See <a href="https://www.mediawiki.org/wiki/Manual:$wgServer">' .
587 'https://www.mediawiki.org/wiki/Manual:$wgServer</a>.'
598 wfWarn(
'$wgServerName should be derived from $wgCanonicalServer, '
599 .
'not customized. Overwriting $wgServerName.' );
619 wfWarn(
'Secure login was enabled on a server that only supports '
620 .
'HTTP or HTTPS. Disabling secure login.' );
634 'class' => WANObjectCache::class,
641 MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
664 Wikimedia\suppressWarnings();
666 Wikimedia\restoreWarnings();
688 time() - ChronologyProtector::POSITION_COOKIE_TTL
690MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [
692 'UserAgent' =>
$wgRequest->getHeader(
'User-Agent' ),
693 'ChronologyProtection' =>
$wgRequest->getHeader(
'MediaWiki-Chronology-Protection' ),
695 'ChronologyClientId' =>
$cpPosInfo[
'clientId']
696 ??
$wgRequest->getHeader(
'MediaWiki-Chronology-Client-Id' )
700if (
$wgRequest->getCookie(
'UseDC',
'' ) ===
'master' ) {
704 MediaWikiServices::getInstance()->getMainWANObjectCache()->useInterimHoldOffCaching(
false );
708(
static function () {
710 $logger = LoggerFactory::getInstance(
'wfDebug' );
712 $self = $_SERVER[
'PHP_SELF'] ??
'';
713 $logger->debug(
"\n\nStart command line script $self" );
715 $debug =
"\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
717 $debug .=
"HTTP HEADERS:\n";
718 foreach (
$wgRequest->getAllHeaders() as $name => $value ) {
719 $debug .=
"$name: $value\n";
721 $debug .=
"(end headers)";
739 HeaderCallback::warnIfHeadersSent();
745 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
746 MediaWiki\Session\PHPSessionHandler::install(
747 MediaWiki\Session\SessionManager::singleton()
751 $contLang = MediaWikiServices::getInstance()->getContentLanguage();
755 $session = MediaWiki\Session\SessionManager::getGlobalSession();
756 }
catch (
MediaWiki\Session\SessionOverflowException $ex ) {
760 foreach ( $ex->getSessionInfos() as $info ) {
761 $list[] = $info->getProvider()->describe( $contLang );
763 $list = $contLang->listToText( $list );
771 if ( $session->isPersistent() ) {
776 if (
MediaWiki\Session\PHPSessionHandler::isEnabled() &&
777 ( $session->isPersistent() || $session->shouldRememberUser() ) &&
778 session_id() !== $session->getId()
781 if ( session_id() !==
'' ) {
782 wfDebugLog(
'session',
'PHP session {old_id} was already started, changing to {new_id}',
'all', [
783 'old_id' => session_id(),
784 'new_id' => $session->getId(),
786 session_write_close();
788 session_id( $session->getId() );
796 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
797 MediaWiki\Session\PHPSessionHandler::install(
798 MediaWiki\Session\SessionManager::singleton()
818$wgOut = RequestContext::getMain()->getOutput();
825 return MediaWikiServices::getInstance()->getParser();
838 call_user_func( $func );
845 $sessionUser = MediaWiki\Session\SessionManager::getGlobalSession()->getUser();
846 if ( $sessionUser->getId() === 0 &&
847 MediaWikiServices::getInstance()->getUserNameUtils()->isValid( $sessionUser->getName() )
849 $res = MediaWikiServices::getInstance()->getAuthManager()->autoCreateUser(
851 MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
854 \MediaWiki\Logger\LoggerFactory::getInstance(
'authevents' )->info(
'Autocreation attempt', [
855 'event' =>
'autocreate',
856 'status' => strval(
$res ),
860 unset( $sessionUser );
871 MediaWiki\Session\SessionManager::singleton()->logPotentialSessionLeakage();
$wgRightsIcon
Override for copyright metadata.
$wgCacheEpoch
Set this to current time to invalidate all prior cached pages.
bool $wgPageLanguageUseDB
Enable page language feature Allows setting page language in database.
string $wgSharedUploadDirectory
Shortcut for the 'directory' setting of $wgForeignFileRepos.
$wgUsePathInfo
Whether to support URLs like index.php/Page_title These often break when PHP is set up in CGI mode.
$wgMemoryLimit
The minimum amount of memory that MediaWiki "needs"; MediaWiki will try to raise PHP's memory limit i...
$wgEmergencyContact
Site admin email address.
$wgDBprefix
Current wiki database table name prefix.
$wgDBuser
Database username.
string $wgPHPSessionHandling
Whether to use PHP session handling ($_SESSION and session_*() functions)
bool $wgCacheSharedUploads
Shortcut for the ForeignDBRepo 'hasSharedCache' setting in $wgForeignFileRepos.
bool string $wgSharedUploadDBname
Shortcut for the ForeignDBRepo 'dbName' setting in $wgForeignFileRepos.
$wgScript
The URL path to index.php.
$wgUseInstantCommons
Use Wikimedia Commons as a foreign file repository.
bool $wgHashedSharedUploadDirectory
Shortcut for the 'hashLevels' setting of $wgForeignFileRepos.
$wgCacheDirectory
Directory for caching data in the local filesystem.
$wgRightsUrl
Set this to specify an external URL containing details about the content license used on your wiki.
$wgSessionName
Override to customise the session name.
$wgMainCacheType
Main cache type.
$wgPasswordPolicy
Password policy for the wiki.
$wgLogNames
Lists the message key string for each log type.
$wgInvalidateCacheOnLocalSettingsChange
Invalidate various caches when LocalSettings.php changes.
$wgLocalStylePath
The URL path of the skins directory.
$wgThumbnailScriptPath
Give a path here to use thumb.php for thumbnail generation on client request, instead of generating t...
$wgExtraNamespaces
Additional namespaces.
$wgTmpDirectory
The local filesystem path to a temporary directory.
bool $wgGenerateThumbnailOnParse
Render thumbnails while parsing wikitext.
bool $wgUseSharedUploads
Shortcut for adding an entry to $wgForeignFileRepos.
string $wgSharedUploadDBprefix
Shortcut for the ForeignDBRepo 'tablePrefix' setting in $wgForeignFileRepos.
$wgDBmwschema
Current wiki database schema name.
$wgNoReplyAddress
Reply-To address for e-mail notifications.
$wgDBname
Current wiki database name.
$wgDBerrorLogTZ
Timezone to use in the error log.
$wgUploadDirectory
The filesystem path of the images directory.
$wgLogTypes
The logging system has two levels: an event type, which describes the general category and can be vie...
$wgMaximalPasswordLength
Specifies the maximal length of a user password (T64685).
$wgSitename
Name of the site.
$wgReadOnlyFile
If this lock file exists (size > 0), the wiki will be forced into read-only mode.
$wgFileCacheDirectory
Directory where the cached page will be saved.
$wgRightsText
If either $wgRightsUrl or $wgRightsPage is specified then this variable gives the text for the link.
$wgGitInfoCacheDirectory
Directory where GitInfo will look for pre-computed cache files.
$wgPageCreationLog
Maintain a log of page creations at Special:Log/create?
$wgDatabaseReplicaLagCritical
$wgResourceBasePath
The default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
$wgFooterIcons
Abstract list of footer icons for skins in place of old copyrightico and poweredbyico code You can ad...
$wgArticlePath
The URL path for primary article page views.
$wgUploadPath
The URL path for the images directory.
$wgFileBlacklist
Files with these extensions will never be allowed as uploads.
$wgEnableEmail
Set to true to enable the e-mail basic features: Password reminders, etc.
$wgExtensionFunctions
A list of callback functions which are called once MediaWiki is fully initialised.
$wgShellLocale
Locale for LC_ALL, to provide a known environment for locale-sensitive operations.
$wgSecureLogin
This is to let user authenticate using https when they come from http.
$wgRCMaxAge
Recentchanges items are periodically purged; entries older than this many seconds will go.
bool $wgHashedUploadDirectory
Shortcut for setting hashLevels=2 in $wgLocalFileRepo.
$wgLocaltimezone
Fake out the timezone that the server thinks it's in.
$wgUploadBaseUrl
If set, this URL is added to the start of $wgUploadPath to form a complete upload URL.
bool $wgFetchCommonsDescriptions
Shortcut for the 'fetchDescription' setting of $wgForeignFileRepos.
$wgGroupPermissions
Permission keys given to users in each group.
$wgRestPath
The URL path to the REST API Defaults to "{$wgScriptPath}/rest.php".
string $wgSharedThumbnailScriptPath
Shortcut for the 'thumbScriptUrl' setting of $wgForeignFileRepos.
$wgLocalFileRepo
File repository structures.
$wgDeletedDirectory
What directory to place deleted uploads in.
$wgScriptPath
The path we should point to.
$wgWANObjectCaches
Advanced WAN object cache configuration.
$wgAllowHTMLEmail
For parts of the system that have been updated to provide HTML email content, send both text and HTML...
array false $wgLogos
Specification for different versions of the wiki logo.
$wgExtensionAssetsPath
The URL path of the extensions directory.
$wgForeignFileRepos
Enable the use of files from one or more other wikis.
$wgRepositoryBaseUrl
Shortcut for the 'descBaseUrl' setting of $wgForeignFileRepos.
$wgLogHeaders
Lists the message key string for descriptive text to be shown at the top of each log type.
int null $wgRequestTimeLimit
Set a limit on server request wall clock time.
$wgSharedDB
Shared database for multiple wikis.
$wgDebugDumpSql
Write SQL queries to the debug log.
$wgDatabaseReplicaLagWarning
If lag is higher than $wgDatabaseReplicaLagWarning, show a warning in some special pages (like watchl...
$wgDBserver
Database host name or IP address.
bool $wgForceHTTPS
If this is true, when an insecure HTTP request is received, always redirect to HTTPS.
$wgLoadScript
The URL path to load.php.
$wgCookieSecure
Whether the "secure" flag should be set on the cookie.
$wgExtraLanguageCodes
List of mappings from one language code to another.
$wgCanonicalServer
Canonical URL of the server, to use in IRC feeds and notification e-mails.
$wgStylePath
The URL path of the skins directory.
$wgServer
URL of the server.
$wgMinimalPasswordLength
Specifies the minimal length of a user password.
$wgMetaNamespace
Name of the project namespace.
$wgLogo
The URL path of the wiki logo.
$wgPasswordSender
Sender email address for e-mail notifications.
$wgLogActionsHandlers
The same as above, but here values are names of classes, not messages.
string $wgSharedUploadPath
Shortcut for the 'url' setting of $wgForeignFileRepos.
$wgLocalTZoffset
Set an offset from UTC in minutes to use for the default timezone setting for anonymous users and new...
$wgMainWANCache
Main Wide-Area-Network cache type.
$wgDBpassword
Database user's password.
$wgNewUserLog
Maintain a log of newusers at Special:Log/newusers?
global $wgCommandLineMode
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.
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
wfDebugLog( $logGroup, $text, $dest='all', array $context=[])
Send a line to a supplementary debug log file, if configured, or main debug log if not.
wfDeprecated( $function, $version=false, $component=false, $callerOffset=2)
Logs a warning that $function is deprecated.
$wgGalleryOptions
Default parameters for the "<gallery>" tag.
if( $wgScript===false) if($wgLoadScript===false) if( $wgRestPath===false) if($wgArticlePath===false) if( $wgResourceBasePath===null) if($wgStylePath===false) if( $wgLocalStylePath===false) if($wgExtensionAssetsPath===false) if( $wgLogos !==false &&isset( $wgLogos['1x'])) if($wgLogo===false) if( $wgUploadPath===false) if($wgUploadDirectory===false) if( $wgReadOnlyFile===false) if($wgFileCacheDirectory===false) if( $wgDeletedDirectory===false) if($wgGitInfoCacheDirectory===false &&$wgCacheDirectory !==false) if( $wgSharedPrefix===false) if($wgSharedSchema===false) if( $wgMetaNamespace===false) $wgFileExtensions
Expand dynamic defaults and shortcuts.
if(is_array($wgExtraNamespaces)) if(count( $wgDummyLanguageCodes) !==0) $wgDummyLanguageCodes
$wgCanonicalNamespaceNames
Definitions of the NS_ constants are in Defines.php.
if(!defined('MW_NO_SESSION') &&! $wgCommandLineMode) if(! $wgCommandLineMode) $wgFullyInitialised
$wgEnotifRevealEditorAddress
if(!defined( 'MEDIAWIKI')) $wgScopeTest
Environment checks.
if(! $wgCookiePrefix) $wgCookiePrefix
$wgUsersNotifiedOnAllChanges
if( $wgRightsIcon) if(isset($wgFooterIcons[ 'copyright'][ 'copyright']) &&$wgFooterIcons[ 'copyright'][ 'copyright']===[]) if(isset( $wgFooterIcons['poweredby']) &&isset( $wgFooterIcons['poweredby']['mediawiki']) && $wgFooterIcons['poweredby']['mediawiki']['src']===null) $wgNamespaceProtection[NS_MEDIAWIKI]
Unconditional protection for NS_MEDIAWIKI since otherwise it's too easy for a sysadmin to set $wgName...
if(! $wgDBerrorLogTZ) $wgRequest
if($wgServer===false) if( $wgCanonicalServer===false) $serverParts
MediaWiki Session SessionId null $wgInitialSessionId
The persistent session ID (if any) loaded at startup.
if( $wgServerName !==false) $wgServerName
$wgLockManagers[]
Initialise $wgLockManagers to include basic FS version.
$wgDefaultUserOptions['rcdays']
if(! $wgEmergencyContact) if(! $wgPasswordSender) if(! $wgNoReplyAddress) if( $wgSecureLogin &&substr( $wgServer, 0, 2) !=='//') $wgVirtualRestConfig['global']['domain']
Class to allow throwing wfDeprecated warnings when people use globals that we do not want them to.
Abort the web request with a custom HTML string that will represent the entire response.
static runner()
Get a HookRunner instance for calling hooks using the new interfaces.
Show an error that looks like an HTTP server error.
static newFromKey( $key,... $params)
Factory function that is just wrapper for the real constructor.
static schedulePingback()
Schedule a deferred callable that will check if a pingback should be sent and (if so) proceed to send...
static getMain()
Get the RequestContext object associated with the main request.
Stub object for the user language.
static detectProtocol()
Detect the protocol from $_SERVER.