Go to the documentation of this file.
32 if ( !defined(
'MEDIAWIKI' ) ) {
44 echo
"Error, Setup.php must be included from the file scope, after DefaultSettings.php\n";
48 mb_internal_encoding(
'UTF-8' );
74 if ( $wgResourceBasePath ===
null ) {
89 $wgLogo =
"$wgResourceBasePath/resources/assets/wiki.png";
98 if ( $wgReadOnlyFile ===
false ) {
99 $wgReadOnlyFile =
"{$wgUploadDirectory}/lock_yBgMBwiR";
117 if ( $wgRightsIcon ) {
118 $wgRightsIcon = str_replace(
119 "{$wgStylePath}/common/images/",
120 "{$wgResourceBasePath}/resources/assets/licenses/",
125 if ( isset( $wgFooterIcons[
'copyright'][
'copyright'] )
126 && $wgFooterIcons[
'copyright'][
'copyright'] === []
128 if ( $wgRightsIcon || $wgRightsText ) {
129 $wgFooterIcons[
'copyright'][
'copyright'] = [
130 'url' => $wgRightsUrl,
131 'src' => $wgRightsIcon,
132 'alt' => $wgRightsText,
137 if ( isset( $wgFooterIcons[
'poweredby'] )
138 && isset( $wgFooterIcons[
'poweredby'][
'mediawiki'] )
139 && $wgFooterIcons[
'poweredby'][
'mediawiki'][
'src'] ===
null
141 $wgFooterIcons[
'poweredby'][
'mediawiki'][
'src'] =
142 "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png";
143 $wgFooterIcons[
'poweredby'][
'mediawiki'][
'srcset'] =
144 "$wgResourceBasePath/resources/assets/poweredby_mediawiki_132x47.png 1.5x, " .
145 "$wgResourceBasePath/resources/assets/poweredby_mediawiki_176x62.png 2x";
169 'name' =>
'fsLockManager',
170 'class' =>
'FSLockManager',
171 'lockDirectory' =>
"{$wgUploadDirectory}/lockdir",
174 'name' =>
'nullLockManager',
175 'class' =>
'NullLockManager',
183 'class' =>
'LocalRepo',
187 'scriptExtension' =>
'.php',
202 'class' =>
'ForeignDBRepo',
222 'class' =>
'FileRepo',
236 'class' =>
'ForeignAPIRepo',
237 'name' =>
'wikimediacommons',
238 'apibase' =>
'https://commons.wikimedia.org/w/api.php',
239 'url' =>
'https://upload.wikimedia.org/wikipedia/commons',
240 'thumbUrl' =>
'https://upload.wikimedia.org/wikipedia/commons/thumb',
242 'transformVia404' =>
true,
243 'fetchDescription' =>
true,
244 'descriptionCacheExpiry' => 43200,
245 'apiThumbCacheExpiry' => 0,
256 if ( !isset( $repo[
'directory'] ) && $repo[
'class'] ===
'ForeignAPIRepo' ) {
259 if ( !isset( $repo[
'backend'] ) ) {
260 $repo[
'backend'] = $repo[
'name'] .
'-backend';
266 if ( $wgRCFilterByAge ) {
270 sort( $wgRCLinkDays );
273 for ( $i = 0; $i < count( $wgRCLinkDays ); $i++ ) {
276 $wgRCLinkDays = array_slice( $wgRCLinkDays, 0, $i + 1,
false );
299 if ( $wgLocalInterwiki ) {
300 array_unshift( $wgLocalInterwikis, $wgLocalInterwiki );
342 unset( $wgGroupPermissions[
'user'][
'sendemail'] );
348 if ( $wgMetaNamespace ===
false ) {
349 $wgMetaNamespace = str_replace(
' ',
'_',
$wgSitename );
353 if ( $wgResourceLoaderMaxQueryLength ===
false ) {
354 $suhosinMaxValueLength = (int)ini_get(
'suhosin.get.max_value_length' );
355 if ( $suhosinMaxValueLength > 0 && $suhosinMaxValueLength < 2000 ) {
356 $wgResourceLoaderMaxQueryLength = $suhosinMaxValueLength;
358 $wgResourceLoaderMaxQueryLength = 2000;
360 unset( $suhosinMaxValueLength );
367 UploadBase::getMaxUploadSize(
'file' ),
368 UploadBase::getMaxPhpUploadSize(),
370 ini_get(
'post_max_size' ) ?: ini_get(
'hhvm.server.max_post_size' ),
372 ) ?: PHP_INT_MAX ) - 1024
400 if ( is_array( $wgExtraNamespaces ) ) {
411 $wgDebugToolbar =
false;
424 MediaWiki\suppressWarnings();
426 MediaWiki\restoreWarnings();
429 if ( $wgNewUserLog ) {
431 $wgLogTypes[] =
'newusers';
432 $wgLogNames[
'newusers'] =
'newuserlogpage';
433 $wgLogHeaders[
'newusers'] =
'newuserlogpagetext';
434 $wgLogActionsHandlers[
'newusers/newusers'] =
'NewUsersLogFormatter';
435 $wgLogActionsHandlers[
'newusers/create'] =
'NewUsersLogFormatter';
436 $wgLogActionsHandlers[
'newusers/create2'] =
'NewUsersLogFormatter';
437 $wgLogActionsHandlers[
'newusers/byemail'] =
'NewUsersLogFormatter';
438 $wgLogActionsHandlers[
'newusers/autocreate'] =
'NewUsersLogFormatter';
441 if ( $wgPageLanguageUseDB ) {
442 $wgLogTypes[] =
'pagelang';
443 $wgLogActionsHandlers[
'pagelang/pagelang'] =
'PageLangLogFormatter';
446 if ( $wgCookieSecure ===
'detect' ) {
450 if ( $wgProfileOnly ) {
451 $wgDebugLogGroups[
'profileoutput'] = $wgDebugLogFile;
452 $wgDebugLogFile =
'';
456 if ( $wgMinimalPasswordLength !==
false ) {
457 $wgPasswordPolicy[
'policies'][
'default'][
'MinimalPasswordLength'] = $wgMinimalPasswordLength;
460 if ( $wgMaximalPasswordLength !==
false ) {
461 $wgPasswordPolicy[
'policies'][
'default'][
'MaximalPasswordLength'] = $wgMaximalPasswordLength;
466 wfDeprecated(
'$wgSessionsInObjectCache = false',
'1.27' );
473 "Session data will be stored in \"$cacheType\" cache with " .
474 "expiry $wgObjectCacheSessionExpiry seconds"
485 if ( defined(
'MW_NO_SESSION' ) ) {
500 if ( !class_exists(
'AutoLoader' ) ) {
501 require_once
"$IP/includes/AutoLoader.php";
506 MediaWikiServices::resetGlobalInstance(
new GlobalVarConfig(),
'quick' );
510 MediaWikiServices::getInstance()->getDBLoadBalancer()->setTableAliases(
524 define(
'MW_SERVICE_BOOTSTRAP_COMPLETE', 1 );
528 header_register_callback(
function () {
532 $headers[strtolower( trim(
$name ) )][] = trim(
$value );
535 if ( isset( $headers[
'set-cookie'] ) ) {
536 $cacheControl = isset( $headers[
'cache-control'] )
537 ? implode(
', ', $headers[
'cache-control'] )
540 if ( !preg_match(
'/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i', $cacheControl ) ) {
541 header(
'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
542 header(
'Cache-Control: private, max-age=0, s-maxage=0' );
544 'Cookies set on {url} with Cache-Control "{cache-control}"', [
546 'cookies' => $headers[
'set-cookie'],
547 'cache-control' => $cacheControl ?:
'<not set>',
557 require_once
"$IP/includes/compat/normal/UtfNormalUtil.php";
562 foreach ( [
'wgArticlePath',
'wgVariantArticlePath' ]
as $varName ) {
563 if ( $$varName && !preg_match(
'/^(https?:\/\/|\/)/', $$varName ) ) {
565 "If you use a relative URL for \$$varName, it must start " .
566 'with a slash (<code>/</code>).<br><br>See ' .
567 "<a href=\"https://www.mediawiki.org/wiki/Manual:\$$varName\">" .
568 "https://www.mediawiki.org/wiki/Manual:\$$varName</a>."
584 wfWarn(
'$wgServerName should be derived from $wgCanonicalServer, '
585 .
'not customized. Overwriting $wgServerName.' );
603 if ( $wgSecureLogin && substr(
$wgServer, 0, 2 ) !==
'//' ) {
604 $wgSecureLogin =
false;
605 wfWarn(
'Secure login was enabled on a server that only supports '
606 .
'HTTP or HTTPS. Disabling secure login.' );
618 if ( !isset( $wgDisableCounters ) ) {
619 $wgDisableCounters =
true;
627 'class' =>
'WANObjectCache',
629 'channels' => [
'purge' =>
'wancache-main-default-purge' ]
645 if ( is_null( $wgLocaltimezone ) ) {
646 MediaWiki\suppressWarnings();
647 $wgLocaltimezone = date_default_timezone_get();
648 MediaWiki\restoreWarnings();
651 date_default_timezone_set( $wgLocaltimezone );
652 if ( is_null( $wgLocalTZoffset ) ) {
653 $wgLocalTZoffset = date(
'Z' ) / 60;
666 MediaWikiServices::getInstance()->getDBLoadBalancerFactory()->setRequestInfo( [
668 'UserAgent' =>
$wgRequest->getHeader(
'User-Agent' ),
669 'ChronologyProtection' =>
$wgRequest->getHeader(
'ChronologyProtection' )
674 wfDebug(
"\n\nStart command line script $self\n" );
676 $debug =
"\n\nStart request {$wgRequest->getMethod()} {$wgRequest->getRequestURL()}\n";
678 if ( $wgDebugPrintHttpHeaders ) {
679 $debug .=
"HTTP HEADERS:\n";
682 $debug .=
"$name: $value\n";
696 'cluster: ' . get_class(
$wgMemc ) .
720 if ( !is_object( $wgAuth ) ) {
722 Hooks::run(
'AuthPluginSetup', [ &$wgAuth ] );
724 if ( $wgAuth && !$wgAuth instanceof
MediaWiki\Auth\AuthManagerAuthPlugin ) {
726 new MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider( [
727 'authoritative' =>
false,
729 new MediaWiki\Auth\AuthPluginPrimaryAuthenticationProvider( $wgAuth ),
730 new MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider( [
731 'authoritative' =>
true,
733 ],
'$wgAuth is ' . get_class( $wgAuth ) );
746 session_name( $wgSessionName ? $wgSessionName :
$wgCookiePrefix .
'_session' );
751 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
753 MediaWiki\Session\SessionManager::singleton()
760 }
catch ( OverflowException $ex ) {
761 if ( isset( $ex->sessionInfos ) && count( $ex->sessionInfos ) >= 2 ) {
765 foreach ( $ex->sessionInfos
as $info ) {
766 $list[] = $info->getProvider()->describe(
$wgContLang );
770 Message::newFromKey(
'sessionmanager-tie', $list )->inLanguage(
$wgContLang )->
plain()
778 if ( $session->isPersistent() ) {
783 if (
MediaWiki\Session\PHPSessionHandler::isEnabled() &&
784 ( $session->isPersistent() || $session->shouldRememberUser() )
787 session_id( $session->getId() );
788 MediaWiki\quietCall(
'session_start' );
795 if ( !defined(
'MW_NO_SESSION_HANDLER' ) ) {
797 MediaWiki\Session\SessionManager::singleton()
835 foreach ( $wgExtensionFunctions
as $func ) {
837 if ( is_object( $func ) && $func instanceof Closure ) {
838 $profName =
$fname .
'-extensions-closure';
839 } elseif ( is_array( $func ) ) {
840 if ( is_object( $func[0] ) ) {
841 $profName =
$fname .
'-extensions-' . get_class( $func[0] ) .
'::' . $func[1];
843 $profName =
$fname .
'-extensions-' . implode(
'::', $func );
846 $profName =
$fname .
'-extensions-' . strval( $func );
850 call_user_func( $func );
862 MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_SESSION,
867 'event' =>
'autocreate',
872 unset( $sessionUser );
879 wfDebug(
"Fully initialised\n" );
$wgCanonicalNamespaceNames
Definitions of the NS_ constants are in Defines.php.
if(!is_object( $wgAuth)) if( $wgAuth &&! $wgAuth instanceof MediaWiki\Auth\AuthManagerAuthPlugin) $ps_session
$wgUsersNotifiedOnAllChanges
$wgDBserver
Database host name or IP address.
$wgFileBlacklist
Files with these extensions will never be allowed as uploads.
Apache License January AND DISTRIBUTION Definitions License shall mean the terms and conditions for use
if( $wgScript===false) if( $wgLoadScript===false) if( $wgArticlePath===false) if(!empty( $wgActionPaths) &&!isset( $wgActionPaths['view'])) if( $wgResourceBasePath===null) if( $wgStylePath===false) if( $wgLocalStylePath===false) if( $wgExtensionAssetsPath===false) if( $wgLogo===false) if( $wgUploadPath===false) if( $wgUploadDirectory===false) if( $wgReadOnlyFile===false) if( $wgFileCacheDirectory===false) if( $wgDeletedDirectory===false) if( $wgGitInfoCacheDirectory===false && $wgCacheDirectory !==false) if( $wgEnableParserCache===false) 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( $wgLocalInterwiki) if( $wgSharedPrefix===false) if( $wgSharedSchema===false) if(! $wgCookiePrefix) $wgCookiePrefix
if( $wgMetaNamespace===false) if( $wgResourceLoaderMaxQueryLength===false) $wgMinUploadChunkSize
$wgInvalidateCacheOnLocalSettingsChange
Invalidate various caches when LocalSettings.php changes.
$wgSessionsInMemcached
Deprecated alias for $wgSessionsInObjectCache.
$wgTmpDirectory
The local filesystem path to a temporary directory.
static instance()
Singleton.
Class to implement stub globals, which are globals that delay loading the their associated module cod...
if( $wgRCFilterByAge) $wgDefaultUserOptions['rcdays']
$wgScript
The URL path to index.php.
$wgSharedDB
Shared database for multiple wikis.
$wgLocalFileRepo
File repository structures.
$wgWANObjectCaches
Advanced WAN object cache configuration.
$wgVersion
MediaWiki version number.
if( $wgUseFileCache|| $wgUseSquid) $wgHtml5
$wgSharedUploadDBprefix
Optional table prefix used in database.
$wgDBmwschema
Mediawiki schema.
if(! $wgEmergencyContact) if(! $wgPasswordSender) if(! $wgNoReplyAddress) if( $wgSecureLogin &&substr( $wgServer, 0, 2) !=='//') $wgVirtualRestConfig['global']['domain']
$wgGenerateThumbnailOnParse
Allow thumbnail rendering on page view.
if(!defined( 'MEDIAWIKI')) $fname
This file is not a valid entry point, perform no further processing unless MEDIAWIKI is defined.
$wgUseSharedUploads
If you operate multiple wikis, you can define a shared upload path here.
$wgExtensionAssetsPath
The URL path of the extensions directory.
static installHandler()
Install handlers with PHP.
static detectProtocol()
Detect the protocol from $_SERVER.
$wgUseSquid
Enable/disable CDN.
$wgHashedSharedUploadDirectory
Set the following to false especially if you have a set of files that need to be accessible by all wi...
$wgCacheDirectory
Directory for caching data in the local filesystem.
static isValidUserName( $name)
Is the input a valid username?
$wgLogo
The URL path of the wiki logo.
$wgEnableParserCache
Kept for extension compatibility; see $wgParserCacheType.
wfDebugLog( $logGroup, $text, $dest='all', array $context=[])
Send a line to a supplementary debug log file, if configured, or main debug log if not.
Show an error that looks like an HTTP server error.
$wgDBpassword
Database user's password.
$wgDBprefix
Table name prefix.
$wgStylePath
The URL path of the skins directory.
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency which acts as the top level factory for services in MediaWiki which can be used to gain access to default instances of various services MediaWikiServices however also allows new services to be defined and default services to be redefined Services are defined or redefined by providing a callback the instantiator that will return a new instance of the service When it will create an instance of MediaWikiServices and populate it with the services defined in the files listed by thereby bootstrapping the DI framework Per $wgServiceWiringFiles lists includes ServiceWiring php
$wgRepositoryBaseUrl
Base URL for a repository wiki.
$wgUseInstantCommons
Use Commons as a remote file repository.
$wgHashedUploadDirectory
Set this to false if you do not want MediaWiki to divide your images directory into many subdirectori...
wfParseUrl( $url)
parse_url() work-alike, but non-broken.
$wgNoReplyAddress
Reply-To address for e-mail notifications.
wfGetMainCache()
Get the main cache object.
$wgSharedUploadPath
Full path on the web server where shared uploads can be found.
controlled by $wgMainCacheType controlled by $wgParserCacheType controlled by $wgMessageCacheType If you set CACHE_NONE to one of the three control default value for MediaWiki still create a but requests to it are no ops and we always fall through to the database If the cache daemon can t be it should also disable itself fairly smoothly By $wgMemc is used but when it is $parserMemc or $messageMemc this is mentioned $wgDBname
$wgEmergencyContact
Site admin email address.
wfDeprecated( $function, $version=false, $component=false, $callerOffset=2)
Throws a warning that $function is deprecated.
if(is_array( $wgExtraNamespaces)) $wgContLanguageCode
$wgUseFileCache
This will cache static pages for non-logged-in users to reduce database traffic on public sites.
global $wgCommandLineMode
$wgLoadScript
The URL path to load.php.
static getInstance( $id)
Get a cached instance of the specified type of cache object.
$wgFetchCommonsDescriptions
Fetch commons image description pages and display them on the local wiki?
$wgParserCacheType
The cache type for storing article HTML.
$wgEnableEmail
Set to true to enable the e-mail basic features: Password reminders, etc.
Accesses configuration settings from $GLOBALS.
when a variable name is used in a it is silently declared as a new masking the global
wfMemoryLimit()
Set PHP's memory limit to the larger of php.ini or $wgMemoryLimit.
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
$wgCanonicalServer
Canonical URL of the server, to use in IRC feeds and notification e-mails.
$wgEnotifRevealEditorAddress
$wgLockManagers[]
Initialise $wgLockManagers to include basic FS version.
$wgCacheSharedUploads
Cache shared metadata in memcached.
$wgNamespaceAliases['Image']
The canonical names of namespaces 6 and 7 are, as of v1.14, "File" and "File_talk".
$wgDeletedDirectory
What directory to place deleted uploads in.
Stub object for the user language.
$wgServer
URL of the server.
$wgLanguageCode
Site language code.
$wgSitename
Name of the site.
static init()
Enabled the debugger and load resource module.
$wgUploadBaseUrl
If set, this URL is added to the start of $wgUploadPath to form a complete upload URL.
$wgUploadDirectory
The filesystem path of the images directory.
wfGetParserCacheStorage()
Get the cache object used by the parser cache.
$wgAllowHTMLEmail
For parts of the system that have been updated to provide HTML email content, send both text and HTML...
if( $wgInvalidateCacheOnLocalSettingsChange) if( $wgNewUserLog) if( $wgPageLanguageUseDB) if( $wgCookieSecure==='detect') if( $wgProfileOnly) if( $wgMinimalPasswordLength !==false) if( $wgMaximalPasswordLength !==false) if(! $wgSessionsInObjectCache &&! $wgSessionsInMemcached) $wgSessionsInObjectCache
static getMain()
Static methods.
wfIniGetBool( $setting)
Safety wrapper around ini_get() for boolean settings.
if( $wgCanonicalServer===false) $serverParts
$wgSessionCacheType
The cache type for storing session data.
wfGetMessageCacheStorage()
Get the cache object used by the message cache.
$wgCacheEpoch
Set this to current time to invalidate all prior cached pages.
wfShorthandToInteger( $string='', $default=-1)
Converts shorthand byte notation to integer form.
$wgGitInfoCacheDirectory
Directory where GitInfo will look for pre-computed cache files.
$wgSharedUploadDBname
DB name with metadata about shared directory.
wfTempDir()
Tries to get the system directory for temporary files.
$wgSharedUploadDirectory
Path on the file system where shared uploads can be found.
if( $wgSkipSkin) $wgSkipSkins[]
$wgThumbnailScriptPath
Give a path here to use thumb.php for thumbnail generation on client request, instead of generating t...
Exception class which takes an HTML error message, and does not produce a backtrace.
CACHE_MEMCACHED $wgMainCacheType
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
Allows to change the fields on the form that will be generated $name
static getGlobalRequestURL()
Return the path and query string portion of the main request URI.
$wgFileCacheDirectory
Directory where the cached page will be saved.
$wgUploadPath
The URL path for the images directory.
static factory( $code)
Get a cached or new language object for a given language code.
wfWarn( $msg, $callerOffset=1, $level=E_USER_NOTICE)
Send a warning either to the debug log or in a PHP error depending on $wgDevelopmentWarnings.
$wgDBuser
Database username.
$wgDBerrorLogTZ
Timezone to use in the error log.
if(! $wgDBerrorLogTZ) $wgRequest
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency MediaWikiServices
static schedulePingback()
Schedule a deferred callable that will check if a pingback should be sent and (if so) proceed to send...
if( $wgServerName !==false) $wgServerName
$wgPasswordSender
Sender email address for e-mail notifications.
string $wgPHPSessionHandling
Whether to use PHP session handling ($_SESSION and session_*() functions)
$wgScriptPath
The path we should point to.
static run( $event, array $args=[], $deprecatedVersion=null)
Call hook functions defined in Hooks::register and $wgHooks.
$wgLocalStylePath
The URL path of the skins directory.
$wgMainStash
Main object stash type.
$wgMainWANCache
Main Wide-Area-Network cache type.
wfExpandUrl( $url, $defaultProto=PROTO_CURRENT)
Expand a potentially local URL to a fully-qualified URL.
$wgUsePathInfo
Whether to support URLs like index.php/Page_title These often break when PHP is set up in CGI mode.
$wgSharedThumbnailScriptPath