手册:$wgForeignFileRepos

本頁使用了標題或全文手工轉換
From mediawiki.org
This page is a translated version of the page Manual:$wgForeignFileRepos and the translation is 17% complete.
共享上传: $wgForeignFileRepos
一个包含外部存储库结构信息的数组
引进版本:1.11.0 (r22580)
移除版本:仍在使用
允许的值:(数组)
默认值:(见下文)

细节

警告 警告: 当使用维基共享资源时,需要使用HTTPS链接而不是HTTP。自2015年起,维基媒体基金会重定向HTTP流量到HTTPS。由于安全原因MediaWiki不会追踪这些重定向(参见任务T102566)。

解决的方法是使用维基共享资源时采用HTTPS链接。若您使用$wgUseInstantCommons ,这个问题在MediaWiki 1.25.2及更新版本中已被自动修复。若您使用$wgForeignFileRepos对链接到维基共享资源的资源进行自定义设置,那么则需要自行调整URL链接。

Properties required for all repos

class
The class name for the repository. May come from the core or an extension. The core repository classes are LocalRepo, ForeignDBRepo, FileRepo and ForeignAPIRepo.
name
A unique name for the repository.

For all core repos

url
Base public URL
thumbUrl
Base thumb url, if different from url/thumb
hashLevels
The number of directory levels for hash-based division of files
thumbScriptUrl
The URL for thumb.php (optional, not recommended)
transformVia404
Whether to skip media file transformation on parse and rely on a 404 handler instead.
initialCapital
Equivalent to $wgCapitalLinks , determines whether file names implicitly start with a capital letter. The current implementation may give incorrect description page links when the local $wgCapitalLinks and initialCapital are mismatched.
pathDisclosureProtection
May be 'paranoid' to remove all parameters from error messages, 'none' to leave the paths in unchanged, or 'simple' to replace paths with place holders. Default for LocalRepo is 'simple'. Note, some image thumbnailing software puts the thumbnail path into the resulting thumb's metadata, so this setting may not provide full protection.
descBaseUrl
URL of image description pages, e.g. https://en.wikipedia.org/wiki/File:
scriptDirUrl
URL of the MediaWiki installation, equivalent to $wgScriptPath , e.g. https://en.wikipedia.org/w
articleUrl
Equivalent to $wgArticlePath , e.g. https://en.wikipedia.org/wiki/$1
fetchDescription
Fetch the text of the remote file description page. Equivalent to $wgFetchCommonsDescriptions .
警告 警告: Due to a bug in MediaWiki, the foreign wiki should have a full, or protocol-relative (but not a generally relative) url in $wgUploadPath , or description pages with images on them won't be fetched properly.
descriptionCacheExpiry
If set to 0, no caching will be used. Set to 1 or more (seconds) to define how long the local cache of description pages will last. Must set fetchDescription to true to use.

ForeignAPIRepo类

apibase
The base URL for the remote repository's API (e.g. https://commons.wikimedia.org/w/api.php). Only used for ForeignAPIRepo.
apiThumbCacheExpiry
How long to cache thumbs locally for. Setting this to 0 disables local thumb caching. Local thumb caching will reduce load on the foreign server, and improve user privacy. However it may cause your wiki to be slightly slower.

ForeignDBRepo类

directory
A path to MediaWiki's media directory local to the server, such as /var/www/wiki/images.
dbType, dbServer, dbUser, dbPassword, dbName, dbFlags
equivalent to the corresponding member of $wgDBservers
tablePrefix
Table prefix, the foreign wiki's $wgDBprefix
hasSharedCache
True if the wiki's shared cache is accessible via the local $wgMemc
favicon
A favicon for the remote repository

默认值(位于includes/SetupDynamicConfig.php中的代码)

if ( $wgUseSharedUploads ) {
	if ( $wgSharedUploadDBname ) {
		$wgForeignFileRepos[] = [
			'class' => ForeignDBRepo::class,
			'name' => 'shared',
			'directory' => $wgSharedUploadDirectory,
			'url' => $wgSharedUploadPath,
			'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
			'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
			'transformVia404' => !$wgGenerateThumbnailOnParse,
			'dbType' => $wgDBtype,
			'dbServer' => $wgDBserver,
			'dbUser' => $wgDBuser,
			'dbPassword' => $wgDBpassword,
			'dbName' => $wgSharedUploadDBname,
			'dbFlags' => ( $wgDebugDumpSql ? DBO_DEBUG : 0 ) | DBO_DEFAULT,
			'tablePrefix' => $wgSharedUploadDBprefix,
			'hasSharedCache' => $wgCacheSharedUploads,
			'descBaseUrl' => $wgRepositoryBaseUrl,
			'fetchDescription' => $wgFetchCommonsDescriptions,
		];
	} else {
		$wgForeignFileRepos[] = [
			'class' => FileRepo::class,
			'name' => 'shared',
			'directory' => $wgSharedUploadDirectory,
			'url' => $wgSharedUploadPath,
			'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
			'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
			'transformVia404' => !$wgGenerateThumbnailOnParse,
			'descBaseUrl' => $wgRepositoryBaseUrl,
			'fetchDescription' => $wgFetchCommonsDescriptions,
		];
	}
}

ForeignDBViaLBRepo class

wiki
wiki-db-name used in $wgLBFactoryConf

Directory permissions

You'll need rw on $IP/images and $IP/images/thumbs for whatever user php runs as.

用法

MediaWiki版本:
1.31

Using files from Wikimedia Commons : ForeignAPIRepo

Since 1.16.0 there is a more convenient shorthand to use Commons as a foreign repository: $wgUseInstantCommons .

You can set your wiki to use media from Wikimedia Commons (or from any other MediaWiki-powered site, see below) directly. However, please beware any legal implications.

使用前您需要先:

  • MediaWiki 1.13 +
  • PHP with JSON support (for the json_decode() function). JSON is enabled by default since PHP 5.2.0, you'll need the PECL extension for older versions. Since MediaWiki 1.16, this is no longer necessary; v. 1.16 will use custom (and slower) code if JSON is not available.
  • The remote wiki must also use MediaWiki 1.13 or later; otherwise its api.php returns {"error":{"code":"iiunknown_iiprop","info":"Unrecognised values for parameter 'iiprop'"}} and file requests fail silently (i.e. the requested files are just treated as non-existent).

The code below enables media files from Wikimedia Commons on your site. You should place it in your "LocalSettings.php" file:

$wgForeignFileRepos[] = [
	'class' => ForeignAPIRepo::class,
	'name' => 'commonswiki', // Must be a distinct name
	'apibase' => 'https://commons.wikimedia.org/w/api.php',
	'hashLevels' => 2,
	'fetchDescription' => true, // Optional
	'descriptionCacheExpiry' => 43200, // 12 hours, optional (values are seconds)
    'apiMetadataExpiry' => 14400, // 4 hours, optional. Consider increasing for better performance.
	'apiThumbCacheExpiry' => 86400, // 24 hours, optional, but required for local thumb caching (Note local thumb caching is often slower than not doing it)
];
If you decide to add this setting to your "LocalSettings.php" file instead of using $wgUseInstantCommons you cannot use wikimediacommons as a setting for name since it is already present in core MediaWiki code (in "Setup.php").

To pull images from another Wikimedia project, set apibase to this wiki's "api.php" file like e.g. https://en.wikipedia.org/w/api.php. 例如:

$wgForeignFileRepos[] = [
	'class' => ForeignAPIRepo::class,
	'name' => 'enwikipedia',
	'apibase' => 'https://en.wikipedia.org/w/api.php',
	'hashLevels' => 2,
	'fetchDescription' => true,
	'descriptionCacheExpiry' => 43200,
	'apiThumbCacheExpiry' => 86400,
];

To embed an image in your installation, simply use [[File:name_of_commons_picture.jpg]].

Performance

You may need to configure the $wgMainCacheType as well. Default is often CACHE_NONE, meaning it will load the image from the remote host on each page load which will be very slow. Similarly, you need to set apiThumbCacheExpiry to zero if you prefer to use the foreign thumbnails which will be faster. The default for apiMetadataExpiry is 4 hours. This is one of the most impactful settings for performance. Consider setting to a really high value, such as 604,800 (1 week) for best performance. However this may mean that it can take up to that long for changes to the file to get to your wiki.

Setting $wgResponsiveImages = false; may improve performance of instant commons at the cost of making images be lower quality on high resolution displays.

Currently MediaWiki does not support pipelining foreign api requests. A high performance site may want to look at setting up a local proxy (like nginx) that can coalesce multiple requests into a single pipelined request to reduce round trip times from TCP & TLS handshakes.

There is also an alternative implementation at 扩展:QuickInstantCommons which may be much faster

从数据库中使用文件您可以使用:ForeignDBRepo、ForeignDBViaLBRepo

The ForeignDBRepo class is very useful for creating wiki families. In a wiki family, each wiki will have its own database or table prefix. Using this class, you can make a family member aware of the tables of another family member. Access through ForeignDBRepo is faster than through ForeignAPIRepo. This code should be deployed to LocalSettings.php.

$wgForeignFileRepos[] = [
	'class' => ForeignDBRepo::class,
	'name' => 'otherwiki',
	'url' => "https://example.org/w/images",
	'directory' => '/path/to/uploads',
	'hashLevels' => 2, // This must be the same for the other family member
	'dbType' => $wgDBtype,
	'dbServer' => $wgDBserver,
	'dbUser' => $wgDBuser,
	'dbPassword' => $wgDBpassword,
	'dbFlags' => DBO_DEFAULT,
	'dbName' => 'mydb',
	'tablePrefix' => 'mw_',
	'hasSharedCache' => false,
	'descBaseUrl' => 'https://example.org/wiki/File:',
	'fetchDescription' => false
];

Alternatively, if you have $wgLBFactoryConf set up for multiple wikis, you can use 'class' => ForeignDBViaLBRepo::class:

$wgForeignFileRepos[] = [
	'class' => ForeignDBViaLBRepo::class,
	'wiki' => 'wiki-db-name-used-with-wgLBFactoryConf',
	'name' => 'otherwiki', # displayname (eg. the vector-skin-tab “View on OtherWiki“) may be set at wiki-specific MediaWiki:Shared-repo-name-<otherwiki>
	'url' => 'https://example.org/w/images',
	'directory' => '/path/to/uploads',
	'hashLevels' => 2, # This must be the same for the other family member
	'tablePrefix' => 'mw_',
	'hasSharedCache' => false,
	'fetchDescription' => true,
	'scriptDirUrl' => 'https://example.org/w', # has effect whether description can be fetched
];

This needs not all the db* parameters as in ForeignDBRepo.

从本地文件夹使用文件:FileRepo

You can set your wiki to use media from a single folder. This is just a demonstration feature at present, and will probably be too slow for busy wikis or slow servers due to the lack of caching. This code should be added to LocalSettings.php.

The below code enabled media files from it:

$wgForeignFileRepos[] = [
	'class' => FileRepo::class,
	'name' => 'sharedFsRepo',
	'directory' => 'media',
	'hashLevels' => 0,
	'url' => 'https://shared.example.org/path/to/media',
];

Caveats

For optimal performance, use a wiki whose primary purpose is to serve as a commons as the target of $wgForeignFileRepos. Avoid, for instance, pointing two content wikis at each other as foreign repositories in order to share files between them, because this will generate an excessive number of file requests on page views and edits as both wikis request the file from each other.

Likewise, avoid sharing a database between the commons wiki and other content wikis, especially if you must use ForeignAPIRepo instead of ForeignDBRepo due to limitations imposed by your service provider or administrator. This generates a large number of potentially long-lived database connections that can result in impaired performance, or can exceed DB connection limits even on wikis with very little traffic or activity.

参见

  • filerepoinfo API for getting information about the configuration of a repo, e.g.

https://www.mediawiki.org/w/api.php?action=query&format=json&meta=filerepoinfo