Linux anchor 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64
Apache/2.4.18 (Ubuntu)
Server IP : 10.10.100.4 & Your IP : 216.73.217.150
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
wiki.bernardino.org /
includes /
Delete
Unzip
Name
Size
Permission
Date
Action
actions
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
api
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
auth
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
cache
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
changes
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
changetags
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
clientpool
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
collation
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
compat
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
composer
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
config
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
content
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
context
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
dao
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
db
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
debug
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
deferred
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
diff
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
exception
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
export
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
extauth
[ DIR ]
drwxr-xr-x
2012-03-22 16:23
externalstore
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
filebackend
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
filerepo
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
gallery
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
htmlform
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
http
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
import
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
installer
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
interwiki
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
job
[ DIR ]
drwxr-xr-x
2012-03-22 16:23
jobqueue
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
json
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
libs
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
linker
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
logging
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
mail
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
media
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
normal
[ DIR ]
drwxr-xr-x
2012-03-22 16:23
objectcache
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
page
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
pager
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
parser
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
password
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
poolcounter
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
profiler
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
rcfeed
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
registration
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
resourceloader
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
revisiondelete
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
search
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
services
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
session
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
site
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
skins
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
specialpage
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
specials
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
templates
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
tidy
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
title
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
upload
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
user
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
utils
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
widget
[ DIR ]
drwxr-xr-x
2016-11-28 20:20
zhtable
[ DIR ]
drwxr-xr-x
2012-03-22 16:23
.htaccess
197
B
-r--r--r--
2026-08-22 08:29
Action.php
12.43
KB
-rw-r--r--
2011-09-16 17:01
AjaxDispatcher.php
4.03
KB
-rw-r--r--
2016-11-28 20:20
AjaxResponse.php
8.15
KB
-rw-r--r--
2016-11-28 20:20
Article.php
58.64
KB
-rw-r--r--
2011-11-15 20:46
AuthPlugin.php
9.2
KB
-rw-r--r--
2016-11-28 20:20
AutoLoader.php
3
KB
-rw-r--r--
2016-11-28 20:20
Autopromote.php
6.77
KB
-rw-r--r--
2016-11-28 20:20
BacklinkCache.php
9.03
KB
-rw-r--r--
2011-06-30 01:09
Block.php
41.97
KB
-rw-r--r--
2016-11-28 20:20
Category.php
10.34
KB
-rw-r--r--
2016-11-28 20:20
CategoryFinder.php
6.2
KB
-rw-r--r--
2016-11-28 20:20
CategoryPage.php
21.84
KB
-rw-r--r--
2011-10-28 23:20
CategoryViewer.php
22.5
KB
-rw-r--r--
2016-11-28 20:20
Categoryfinder.php
5.13
KB
-rw-r--r--
2011-05-19 02:03
Cdb.php
3.57
KB
-rw-r--r--
2011-05-28 20:58
Cdb_PHP.php
10.11
KB
-rw-r--r--
2011-05-28 19:51
ChangeTags.php
6.66
KB
-rw-r--r--
2011-07-09 11:01
ChangesFeed.php
5.82
KB
-rw-r--r--
2011-06-19 07:45
ChangesList.php
35.52
KB
-rw-r--r--
2011-10-25 23:51
Collation.php
9.86
KB
-rw-r--r--
2011-09-21 00:36
ConfEditor.php
29.16
KB
-rw-r--r--
2011-08-27 21:28
Cookie.php
6.17
KB
-rw-r--r--
2011-06-02 00:35
CryptRand.php
16.96
KB
-rw-r--r--
2012-03-21 11:43
DefaultSettings.php
265.47
KB
-rw-r--r--
2016-11-28 20:20
Defines.php
7.85
KB
-rw-r--r--
2016-11-28 20:20
DeprecatedGlobal.php
1.9
KB
-rw-r--r--
2016-11-28 20:20
DerivativeRequest.php
2.46
KB
-rw-r--r--
2016-11-28 20:20
DjVuImage.php
10.58
KB
-rw-r--r--
2011-05-18 00:03
DummyLinker.php
9.01
KB
-rw-r--r--
2016-11-28 20:20
EditPage.php
136.53
KB
-rw-r--r--
2016-11-28 20:20
EventRelayerGroup.php
1.27
KB
-rw-r--r--
2016-11-28 20:20
Exception.php
11.5
KB
-rw-r--r--
2011-10-22 04:34
Export.php
32.27
KB
-rw-r--r--
2011-11-24 02:29
ExternalEdit.php
2.45
KB
-rw-r--r--
2011-09-07 22:14
ExternalStore.php
4.29
KB
-rw-r--r--
2011-05-29 16:24
ExternalStoreDB.php
4.44
KB
-rw-r--r--
2011-10-17 00:24
ExternalStoreHttp.php
463
B
-rw-r--r--
2010-01-08 22:35
ExternalUser.php
8.96
KB
-rw-r--r--
2011-05-26 21:52
FakeTitle.php
6.6
KB
-rw-r--r--
2011-05-26 22:38
Fallback.php
5.49
KB
-rw-r--r--
2011-05-28 20:58
FauxRequest.php
5.66
KB
-rw-r--r--
2016-11-28 20:20
Feed.php
10.58
KB
-rw-r--r--
2016-11-28 20:20
FeedUtils.php
8.64
KB
-rw-r--r--
2016-11-28 20:20
FileDeleteForm.php
11.7
KB
-rw-r--r--
2016-11-28 20:20
ForkController.php
5.4
KB
-rw-r--r--
2016-11-28 20:20
FormOptions.php
11.08
KB
-rw-r--r--
2016-11-28 20:20
GenderCache.php
3.35
KB
-rw-r--r--
2011-09-19 14:58
GitInfo.php
10.74
KB
-rw-r--r--
2016-11-28 20:20
GlobalFunctions.php
106.76
KB
-rw-r--r--
2016-11-28 20:20
HTMLForm.php
49.55
KB
-rw-r--r--
2011-11-09 18:04
HistoryBlob.php
16.15
KB
-rw-r--r--
2016-11-28 20:20
HistoryPage.php
21.66
KB
-rw-r--r--
2011-09-16 16:12
Hooks.php
6.47
KB
-rw-r--r--
2016-11-28 20:20
Html.php
31.91
KB
-rw-r--r--
2016-11-28 20:20
HtmlFormatter.php
1015
B
-rw-r--r--
2016-11-28 20:20
HttpFunctions.old.php
319
B
-rw-r--r--
2011-05-28 17:59
HttpFunctions.php
21.28
KB
-rw-r--r--
2011-09-16 15:19
IP.php
21.58
KB
-rw-r--r--
2011-11-09 16:00
ImageFunctions.php
2.58
KB
-rw-r--r--
2011-05-29 16:24
ImageGallery.php
10.46
KB
-rw-r--r--
2011-07-16 01:18
ImagePage.php
36
KB
-rw-r--r--
2011-07-11 02:39
ImageQueryPage.php
1.5
KB
-rw-r--r--
2011-05-26 21:21
Import.php
33.63
KB
-rw-r--r--
2011-10-28 23:20
Init.php
4.67
KB
-rw-r--r--
2011-06-17 01:40
Licenses.php
4.89
KB
-rw-r--r--
2016-11-28 20:20
LinkFilter.php
6.08
KB
-rw-r--r--
2016-11-28 20:20
Linker.php
72.71
KB
-rw-r--r--
2016-11-28 20:20
LinksUpdate.php
23.7
KB
-rw-r--r--
2011-11-14 21:58
ListToggle.php
2.02
KB
-rw-r--r--
2016-11-28 20:20
LocalisationCache.php
29.31
KB
-rw-r--r--
2011-09-12 17:03
LogEventsList.php
32.56
KB
-rw-r--r--
2011-07-10 20:12
LogPage.php
16.09
KB
-rw-r--r--
2011-07-10 20:12
MWFunction.php
1.96
KB
-rw-r--r--
2011-03-22 21:23
MWGrants.php
5.85
KB
-rw-r--r--
2016-11-28 20:20
MWNamespace.php
13.76
KB
-rw-r--r--
2016-11-28 20:20
MWTimestamp.php
6.1
KB
-rw-r--r--
2016-11-28 20:20
MagicWord.php
15.1
KB
-rw-r--r--
2016-11-28 20:20
MagicWordArray.php
7.86
KB
-rw-r--r--
2016-11-28 20:20
MediaWiki.php
35.29
KB
-rw-r--r--
2016-11-28 20:20
MediaWikiServices.php
18.8
KB
-rw-r--r--
2016-11-28 20:20
MediaWikiVersionFetcher.php
746
B
-rw-r--r--
2016-11-28 20:20
MergeHistory.php
10.41
KB
-rw-r--r--
2016-11-28 20:20
Message.php
32.49
KB
-rw-r--r--
2016-11-28 20:20
MessageBlobStore.php
10.5
KB
-rw-r--r--
2011-05-28 00:42
Metadata.php
5.53
KB
-rw-r--r--
2011-06-30 00:09
MimeMagic.php
2.87
KB
-rw-r--r--
2016-11-28 20:20
MovePage.php
18.08
KB
-rw-r--r--
2016-11-28 20:20
Namespace.php
7.78
KB
-rw-r--r--
2011-05-21 21:07
NoLocalSettings.php
2.03
KB
-rw-r--r--
2016-11-28 20:20
OutputHandler.php
6.19
KB
-rw-r--r--
2016-11-28 20:20
OutputPage.php
113
KB
-rw-r--r--
2016-11-28 20:20
PHPVersionCheck.php
8.52
KB
-rw-r--r--
2016-11-28 20:20
PHPVersionError.php
2.96
KB
-rw-r--r--
2011-07-19 01:06
PageProps.php
8.52
KB
-rw-r--r--
2016-11-28 20:20
PageQueryPage.php
680
B
-rw-r--r--
2010-12-22 15:16
Pager.php
30.89
KB
-rw-r--r--
2011-07-06 04:26
PathRouter.php
12.43
KB
-rw-r--r--
2016-11-28 20:20
PatrolLog.php
2.53
KB
-rw-r--r--
2011-07-10 20:12
Pingback.php
7.31
KB
-rw-r--r--
2016-11-28 20:20
PoolCounter.php
5.65
KB
-rw-r--r--
2011-05-28 21:00
Preferences.php
51.21
KB
-rw-r--r--
2016-11-28 20:20
PrefixSearch.php
12.36
KB
-rw-r--r--
2016-11-28 20:20
ProtectionForm.php
19.56
KB
-rw-r--r--
2016-11-28 20:20
ProxyLookup.php
2.12
KB
-rw-r--r--
2016-11-28 20:20
ProxyTools.php
4.6
KB
-rw-r--r--
2011-09-07 22:14
QueryPage.php
22.76
KB
-rw-r--r--
2011-10-17 00:24
RawPage.php
6.2
KB
-rw-r--r--
2011-07-05 23:28
RecentChange.php
23.52
KB
-rw-r--r--
2011-08-27 21:28
RequestContext.php
7.85
KB
-rw-r--r--
2012-01-04 02:07
Revision.php
54.61
KB
-rw-r--r--
2016-11-28 20:20
RevisionList.php
9.25
KB
-rw-r--r--
2016-11-28 20:20
Sanitizer.php
58.04
KB
-rw-r--r--
2016-11-28 20:20
SeleniumWebSettings.php
6.3
KB
-rw-r--r--
2011-06-26 01:27
ServiceWiring.php
11.72
KB
-rw-r--r--
2016-11-28 20:20
Setup.php
27.89
KB
-rw-r--r--
2016-11-28 20:20
SiteConfiguration.php
18.34
KB
-rw-r--r--
2016-11-28 20:20
SiteStats.php
9.85
KB
-rw-r--r--
2016-11-28 20:20
Skin.php
42.13
KB
-rw-r--r--
2012-02-25 16:23
SkinLegacy.php
22.82
KB
-rw-r--r--
2011-10-20 22:50
SkinTemplate.php
64.93
KB
-rw-r--r--
2011-12-09 21:31
SpecialPage.php
31.23
KB
-rw-r--r--
2012-01-04 02:07
SpecialPageFactory.php
17.68
KB
-rw-r--r--
2011-10-28 23:20
SquidPurgeClient.php
10.02
KB
-rw-r--r--
2011-05-21 21:54
Status.php
12.63
KB
-rw-r--r--
2016-11-28 20:20
StreamFile.php
4.66
KB
-rw-r--r--
2016-11-28 20:20
StringUtils.php
11.32
KB
-rw-r--r--
2011-05-21 21:54
StubObject.php
6.4
KB
-rw-r--r--
2016-11-28 20:20
TemplateParser.php
6.46
KB
-rw-r--r--
2016-11-28 20:20
TemplatesOnThisPageFormatter.php
5.36
KB
-rw-r--r--
2016-11-28 20:20
Title.php
140.81
KB
-rw-r--r--
2016-11-28 20:20
TitleArray.php
1.83
KB
-rw-r--r--
2016-11-28 20:20
TitleArrayFromResult.php
1.95
KB
-rw-r--r--
2016-11-28 20:20
User.php
114.26
KB
-rw-r--r--
2012-03-21 11:43
UserArray.php
1.9
KB
-rw-r--r--
2011-05-28 17:59
UserMailer.php
20.52
KB
-rw-r--r--
2012-02-02 15:15
UserRightsProxy.php
5.38
KB
-rw-r--r--
2010-10-14 01:11
ViewCountUpdate.php
3.4
KB
-rw-r--r--
2011-06-25 21:13
WatchedItem.php
5.04
KB
-rw-r--r--
2016-11-28 20:20
WatchedItemQueryService.php
20.4
KB
-rw-r--r--
2016-11-28 20:20
WatchedItemStore.php
25.57
KB
-rw-r--r--
2016-11-28 20:20
WebRequest.php
37.68
KB
-rw-r--r--
2016-11-28 20:20
WebRequestUpload.php
3.4
KB
-rw-r--r--
2016-11-28 20:20
WebResponse.php
9.2
KB
-rw-r--r--
2016-11-28 20:20
WebStart.php
5.54
KB
-rw-r--r--
2016-11-28 20:20
Wiki.php
20.05
KB
-rw-r--r--
2012-01-03 18:34
WikiCategoryPage.php
898
B
-rw-r--r--
2011-08-27 21:28
WikiError.php
3.84
KB
-rw-r--r--
2011-05-06 23:09
WikiFilePage.php
3.34
KB
-rw-r--r--
2011-07-01 22:07
WikiMap.php
8.19
KB
-rw-r--r--
2016-11-28 20:20
WikiPage.php
78.59
KB
-rw-r--r--
2012-01-12 23:09
Xml.php
26.47
KB
-rw-r--r--
2016-11-28 20:20
XmlSelect.php
3.46
KB
-rw-r--r--
2016-11-28 20:20
XmlTypeCheck.php
2.45
KB
-rw-r--r--
2011-05-21 21:36
ZhClient.php
2.92
KB
-rw-r--r--
2011-05-29 16:25
ZhConversion.php
415
KB
-rw-r--r--
2011-10-27 23:40
ZipDirectoryReader.php
20.35
KB
-rw-r--r--
2011-05-13 18:16
limit.sh
2.86
KB
-rwxr-xr-x
2016-11-28 20:20
mime.info
3.82
KB
-rw-r--r--
2011-06-29 22:31
mime.types
5.18
KB
-rw-r--r--
2011-06-29 22:31
tidy.conf
413
B
-rw-r--r--
2009-10-25 14:43
wp-blog-header.php
2.74
KB
-r--r--r--
2026-08-22 08:29
wp-cron.php
2.74
KB
-rw-r--r--
2026-08-22 08:29
Save
Rename
<?php namespace MediaWiki; use Config; use ConfigFactory; use CryptHKDF; use CryptRand; use EventRelayerGroup; use GenderCache; use GlobalVarConfig; use Hooks; use LBFactory; use LinkCache; use Liuggio\StatsdClient\Factory\StatsdDataFactory; use LoadBalancer; use MediaHandlerFactory; use MediaWiki\Linker\LinkRenderer; use MediaWiki\Linker\LinkRendererFactory; use MediaWiki\Services\SalvageableService; use MediaWiki\Services\ServiceContainer; use MediaWiki\Services\NoSuchServiceException; use MWException; use MimeAnalyzer; use ObjectCache; use ProxyLookup; use SearchEngine; use SearchEngineConfig; use SearchEngineFactory; use SiteLookup; use SiteStore; use WatchedItemStore; use WatchedItemQueryService; use SkinFactory; use TitleFormatter; use TitleParser; use VirtualRESTServiceClient; use MediaWiki\Interwiki\InterwikiLookup; /** * Service locator for MediaWiki core services. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file * * @since 1.27 */ /** * MediaWikiServices is the service locator for the application scope of MediaWiki. * Its implemented as a simple configurable DI container. * MediaWikiServices acts as a top level factory/registry for top level services, and builds * the network of service objects that defines MediaWiki's application logic. * It acts as an entry point to MediaWiki's dependency injection mechanism. * * Services are defined in the "wiring" array passed to the constructor, * or by calling defineService(). * * @see docs/injection.txt for an overview of using dependency injection in the * MediaWiki code base. */ class MediaWikiServices extends ServiceContainer { /** * @var MediaWikiServices|null */ private static $instance = null; /** * Returns the global default instance of the top level service locator. * * @since 1.27 * * The default instance is initialized using the service instantiator functions * defined in ServiceWiring.php. * * @note This should only be called by static functions! The instance returned here * should not be passed around! Objects that need access to a service should have * that service injected into the constructor, never a service locator! * * @return MediaWikiServices */ public static function getInstance() { if ( self::$instance === null ) { // NOTE: constructing GlobalVarConfig here is not particularly pretty, // but some information from the global scope has to be injected here, // even if it's just a file name or database credentials to load // configuration from. $bootstrapConfig = new GlobalVarConfig(); self::$instance = self::newInstance( $bootstrapConfig, 'load' ); } return self::$instance; } /** * Replaces the global MediaWikiServices instance. * * @since 1.28 * * @note This is for use in PHPUnit tests only! * * @throws MWException if called outside of PHPUnit tests. * * @param MediaWikiServices $services The new MediaWikiServices object. * * @return MediaWikiServices The old MediaWikiServices object, so it can be restored later. */ public static function forceGlobalInstance( MediaWikiServices $services ) { if ( !defined( 'MW_PHPUNIT_TEST' ) ) { throw new MWException( __METHOD__ . ' must not be used outside unit tests.' ); } $old = self::getInstance(); self::$instance = $services; return $old; } /** * Creates a new instance of MediaWikiServices and sets it as the global default * instance. getInstance() will return a different MediaWikiServices object * after every call to resetGlobalInstance(). * * @since 1.28 * * @warning This should not be used during normal operation. It is intended for use * when the configuration has changed significantly since bootstrap time, e.g. * during the installation process or during testing. * * @warning Calling resetGlobalInstance() may leave the application in an inconsistent * state. Calling this is only safe under the ASSUMPTION that NO REFERENCE to * any of the services managed by MediaWikiServices exist. If any service objects * managed by the old MediaWikiServices instance remain in use, they may INTERFERE * with the operation of the services managed by the new MediaWikiServices. * Operating with a mix of services created by the old and the new * MediaWikiServices instance may lead to INCONSISTENCIES and even DATA LOSS! * Any class implementing LAZY LOADING is especially prone to this problem, * since instances would typically retain a reference to a storage layer service. * * @see forceGlobalInstance() * @see resetGlobalInstance() * @see resetBetweenTest() * * @param Config|null $bootstrapConfig The Config object to be registered as the * 'BootstrapConfig' service. This has to contain at least the information * needed to set up the 'ConfigFactory' service. If not given, the bootstrap * config of the old instance of MediaWikiServices will be re-used. If there * was no previous instance, a new GlobalVarConfig object will be used to * bootstrap the services. * * @param string $quick Set this to "quick" to allow expensive resources to be re-used. * See SalvageableService for details. * * @throws MWException If called after MW_SERVICE_BOOTSTRAP_COMPLETE has been defined in * Setup.php (unless MW_PHPUNIT_TEST or MEDIAWIKI_INSTALL or RUN_MAINTENANCE_IF_MAIN * is defined). */ public static function resetGlobalInstance( Config $bootstrapConfig = null, $quick = '' ) { if ( self::$instance === null ) { // no global instance yet, nothing to reset return; } self::failIfResetNotAllowed( __METHOD__ ); if ( $bootstrapConfig === null ) { $bootstrapConfig = self::$instance->getBootstrapConfig(); } $oldInstance = self::$instance; self::$instance = self::newInstance( $bootstrapConfig, 'load' ); self::$instance->importWiring( $oldInstance, [ 'BootstrapConfig' ] ); if ( $quick === 'quick' ) { self::$instance->salvage( $oldInstance ); } else { $oldInstance->destroy(); } } /** * Salvages the state of any salvageable service instances in $other. * * @note $other will have been destroyed when salvage() returns. * * @param MediaWikiServices $other */ private function salvage( self $other ) { foreach ( $this->getServiceNames() as $name ) { // The service could be new in the new instance and not registered in the // other instance (e.g. an extension that was loaded after the instantiation of // the other instance. Skip this service in this case. See T143974 try { $oldService = $other->peekService( $name ); } catch ( NoSuchServiceException $e ) { continue; } if ( $oldService instanceof SalvageableService ) { /** @var SalvageableService $newService */ $newService = $this->getService( $name ); $newService->salvage( $oldService ); } } $other->destroy(); } /** * Creates a new MediaWikiServices instance and initializes it according to the * given $bootstrapConfig. In particular, all wiring files defined in the * ServiceWiringFiles setting are loaded, and the MediaWikiServices hook is called. * * @param Config|null $bootstrapConfig The Config object to be registered as the * 'BootstrapConfig' service. * * @param string $loadWiring set this to 'load' to load the wiring files specified * in the 'ServiceWiringFiles' setting in $bootstrapConfig. * * @return MediaWikiServices * @throws MWException * @throws \FatalError */ private static function newInstance( Config $bootstrapConfig, $loadWiring = '' ) { $instance = new self( $bootstrapConfig ); // Load the default wiring from the specified files. if ( $loadWiring === 'load' ) { $wiringFiles = $bootstrapConfig->get( 'ServiceWiringFiles' ); $instance->loadWiringFiles( $wiringFiles ); } // Provide a traditional hook point to allow extensions to configure services. Hooks::run( 'MediaWikiServices', [ $instance ] ); return $instance; } /** * Disables all storage layer services. After calling this, any attempt to access the * storage layer will result in an error. Use resetGlobalInstance() to restore normal * operation. * * @since 1.28 * * @warning This is intended for extreme situations only and should never be used * while serving normal web requests. Legitimate use cases for this method include * the installation process. Test fixtures may also use this, if the fixture relies * on globalState. * * @see resetGlobalInstance() * @see resetChildProcessServices() */ public static function disableStorageBackend() { // TODO: also disable some Caches, JobQueues, etc $destroy = [ 'DBLoadBalancer', 'DBLoadBalancerFactory' ]; $services = self::getInstance(); foreach ( $destroy as $name ) { $services->disableService( $name ); } ObjectCache::clear(); } /** * Resets any services that may have become stale after a child process * returns from after pcntl_fork(). It's also safe, but generally unnecessary, * to call this method from the parent process. * * @since 1.28 * * @note This is intended for use in the context of process forking only! * * @see resetGlobalInstance() * @see disableStorageBackend() */ public static function resetChildProcessServices() { // NOTE: for now, just reset everything. Since we don't know the interdependencies // between services, we can't do this more selectively at this time. self::resetGlobalInstance(); // Child, reseed because there is no bug in PHP: // http://bugs.php.net/bug.php?id=42465 mt_srand( getmypid() ); } /** * Resets the given service for testing purposes. * * @since 1.28 * * @warning This is generally unsafe! Other services may still retain references * to the stale service instance, leading to failures and inconsistencies. Subclasses * may use this method to reset specific services under specific instances, but * it should not be exposed to application logic. * * @note With proper dependency injection used throughout the codebase, this method * should not be needed. It is provided to allow tests that pollute global service * instances to clean up. * * @param string $name * @param bool $destroy Whether the service instance should be destroyed if it exists. * When set to false, any existing service instance will effectively be detached * from the container. * * @throws MWException if called outside of PHPUnit tests. */ public function resetServiceForTesting( $name, $destroy = true ) { if ( !defined( 'MW_PHPUNIT_TEST' ) && !defined( 'MW_PARSER_TEST' ) ) { throw new MWException( 'resetServiceForTesting() must not be used outside unit tests.' ); } $this->resetService( $name, $destroy ); } /** * Convenience method that throws an exception unless it is called during a phase in which * resetting of global services is allowed. In general, services should not be reset * individually, since that may introduce inconsistencies. * * @since 1.28 * * This method will throw an exception if: * * - self::$resetInProgress is false (to allow all services to be reset together * via resetGlobalInstance) * - and MEDIAWIKI_INSTALL is not defined (to allow services to be reset during installation) * - and MW_PHPUNIT_TEST is not defined (to allow services to be reset during testing) * * This method is intended to be used to safeguard against accidentally resetting * global service instances that are not yet managed by MediaWikiServices. It is * defined here in the MediaWikiServices services class to have a central place * for managing service bootstrapping and resetting. * * @param string $method the name of the caller method, as given by __METHOD__. * * @throws MWException if called outside bootstrap mode. * * @see resetGlobalInstance() * @see forceGlobalInstance() * @see disableStorageBackend() */ public static function failIfResetNotAllowed( $method ) { if ( !defined( 'MW_PHPUNIT_TEST' ) && !defined( 'MW_PARSER_TEST' ) && !defined( 'MEDIAWIKI_INSTALL' ) && !defined( 'RUN_MAINTENANCE_IF_MAIN' ) && defined( 'MW_SERVICE_BOOTSTRAP_COMPLETE' ) ) { throw new MWException( $method . ' may only be called during bootstrapping and unit tests!' ); } } /** * @param Config $config The Config object to be registered as the 'BootstrapConfig' service. * This has to contain at least the information needed to set up the 'ConfigFactory' * service. */ public function __construct( Config $config ) { parent::__construct(); // Register the given Config object as the bootstrap config service. $this->defineService( 'BootstrapConfig', function() use ( $config ) { return $config; } ); } // CONVENIENCE GETTERS //////////////////////////////////////////////////// /** * Returns the Config object containing the bootstrap configuration. * Bootstrap configuration would typically include database credentials * and other information that may be needed before the ConfigFactory * service can be instantiated. * * @note This should only be used during bootstrapping, in particular * when creating the MainConfig service. Application logic should * use getMainConfig() to get a Config instances. * * @since 1.27 * @return Config */ public function getBootstrapConfig() { return $this->getService( 'BootstrapConfig' ); } /** * @since 1.27 * @return ConfigFactory */ public function getConfigFactory() { return $this->getService( 'ConfigFactory' ); } /** * Returns the Config object that provides configuration for MediaWiki core. * This may or may not be the same object that is returned by getBootstrapConfig(). * * @since 1.27 * @return Config */ public function getMainConfig() { return $this->getService( 'MainConfig' ); } /** * @since 1.27 * @return SiteLookup */ public function getSiteLookup() { return $this->getService( 'SiteLookup' ); } /** * @since 1.27 * @return SiteStore */ public function getSiteStore() { return $this->getService( 'SiteStore' ); } /** * @since 1.28 * @return InterwikiLookup */ public function getInterwikiLookup() { return $this->getService( 'InterwikiLookup' ); } /** * @since 1.27 * @return StatsdDataFactory */ public function getStatsdDataFactory() { return $this->getService( 'StatsdDataFactory' ); } /** * @since 1.27 * @return EventRelayerGroup */ public function getEventRelayerGroup() { return $this->getService( 'EventRelayerGroup' ); } /** * @since 1.27 * @return SearchEngine */ public function newSearchEngine() { // New engine object every time, since they keep state return $this->getService( 'SearchEngineFactory' )->create(); } /** * @since 1.27 * @return SearchEngineFactory */ public function getSearchEngineFactory() { return $this->getService( 'SearchEngineFactory' ); } /** * @since 1.27 * @return SearchEngineConfig */ public function getSearchEngineConfig() { return $this->getService( 'SearchEngineConfig' ); } /** * @since 1.27 * @return SkinFactory */ public function getSkinFactory() { return $this->getService( 'SkinFactory' ); } /** * @since 1.28 * @return LBFactory */ public function getDBLoadBalancerFactory() { return $this->getService( 'DBLoadBalancerFactory' ); } /** * @since 1.28 * @return LoadBalancer The main DB load balancer for the local wiki. */ public function getDBLoadBalancer() { return $this->getService( 'DBLoadBalancer' ); } /** * @since 1.28 * @return WatchedItemStore */ public function getWatchedItemStore() { return $this->getService( 'WatchedItemStore' ); } /** * @since 1.28 * @return WatchedItemQueryService */ public function getWatchedItemQueryService() { return $this->getService( 'WatchedItemQueryService' ); } /** * @since 1.28 * @return CryptRand */ public function getCryptRand() { return $this->getService( 'CryptRand' ); } /** * @since 1.28 * @return CryptHKDF */ public function getCryptHKDF() { return $this->getService( 'CryptHKDF' ); } /** * @since 1.28 * @return MediaHandlerFactory */ public function getMediaHandlerFactory() { return $this->getService( 'MediaHandlerFactory' ); } /** * @since 1.28 * @return MimeAnalyzer */ public function getMimeAnalyzer() { return $this->getService( 'MimeAnalyzer' ); } /** * @since 1.28 * @return ProxyLookup */ public function getProxyLookup() { return $this->getService( 'ProxyLookup' ); } /** * @since 1.28 * @return GenderCache */ public function getGenderCache() { return $this->getService( 'GenderCache' ); } /** * @since 1.28 * @return LinkCache */ public function getLinkCache() { return $this->getService( 'LinkCache' ); } /** * @since 1.28 * @return LinkRendererFactory */ public function getLinkRendererFactory() { return $this->getService( 'LinkRendererFactory' ); } /** * LinkRenderer instance that can be used * if no custom options are needed * * @since 1.28 * @return LinkRenderer */ public function getLinkRenderer() { return $this->getService( 'LinkRenderer' ); } /** * @since 1.28 * @return TitleFormatter */ public function getTitleFormatter() { return $this->getService( 'TitleFormatter' ); } /** * @since 1.28 * @return TitleParser */ public function getTitleParser() { return $this->getService( 'TitleParser' ); } /** * @since 1.28 * @return \BagOStuff */ public function getMainObjectStash() { return $this->getService( 'MainObjectStash' ); } /** * @since 1.28 * @return \WANObjectCache */ public function getMainWANObjectCache() { return $this->getService( 'MainWANObjectCache' ); } /** * @since 1.28 * @return \BagOStuff */ public function getLocalServerObjectCache() { return $this->getService( 'LocalServerObjectCache' ); } /** * @since 1.28 * @return VirtualRESTServiceClient */ public function getVirtualRESTServiceClient() { return $this->getService( 'VirtualRESTServiceClient' ); } /////////////////////////////////////////////////////////////////////////// // NOTE: When adding a service getter here, don't forget to add a test // case for it in MediaWikiServicesTest::provideGetters() and in // MediaWikiServicesTest::provideGetService()! /////////////////////////////////////////////////////////////////////////// }