即时共享资源
即时共享资源(InstantCommons)是一項MediaWiki的功能,它允许在全世界任何一个已安裝MediaWiki的实体上,使用在维基共享资源裏任何已上传的媒体文件。
基本原理
截至2023年11月,维基共享资源,是由维基媒体基金会所主持的核心媒体资料库,包含了超过7.3千万个文件。这些文件中的每一个都可以在自由内容授權下或在公共領域中获得;除了那些與官方徽章或商标的使用有關的限制之外,没有其他限制使用。限制商业用途的许可证被视为是非自由。 Each of these files is available under a free content license or in the public domain; there are no other restrictions of use beyond those relating to use of official insignia or trademarks. Licenses which limit commercial use are considered non-free.
随着对维基共享资源的认识不断提高,外部各方想要使用其內所包含的内容并貢獻新材料的渴望也不断提高。在任何网页的上下文中直接从维基媒体的服务器加载图像,目前在技术上是可行的。这样的热链接是被允许的,但由于多种原因它是會造成問題的: It is currently technically possible to load images directly from Wikimedia's servers in the context of any webpage. Such hotlinking is allowed, but it is problematic for multiple reasons:
- 它不尊重图像的许可条款,也不允许其他元数据被可靠地传送
- 它除了没有恰当地归功于媒体文件的作者,也没有归功于维基媒体
- 它会在每个网页浏览中消耗维基媒体带宽(除非图像已在客户端或通过代理缓存,但此功能当前被默认关闭)
- 它不利于缩略图生成和字幕等有用的图像操作,并且难以在Wiki的上下文中使用,特别是对于标准布局操作
- 它与URL绑定为资源标识符,这使镜像操作变得复杂
- 它创建了一个无法跟踪的外部使用网站,维基媒体方面的任何变化必然会影响在那裏的外部用户
- 它不允许离线查看,这网络仅能斷斷續續访问的国家中是至关重要的
即时共享资源试图通过提供一种从维基媒体的服务器上對图像和元数据的加载進行缓存的简单方法来應付这一切。 尽管缓存功能是目标的一部分,但它自從Mediawiki 1.27.2/1.28.1版之後已被停用。 即时共享资源的第一次实现将在MediaWiki内进行,允许所有的MediaWiki图像操作(缩略图、字幕、画廊等)透明地进行。 然而,其他的wiki引擎透過使用API的操作也可以实现类似即时共享资源的功能,此操作將在下面描述。
基本功能设置
在安装过程中,站点管理员可以选择是否启用即时共享资源。然而,在理想情况下,该功能在默认情况下应該被启用(只要是已有指定可写入的上载目录),以允许尽可能多的用户使用维基共享资源内容。
如果该功能有被启用,则wiki的行为就像是一個维基媒体的项目,也就是,如果引用某個存在于维基共享资源上的图像或其他媒体文件,它可以像本地上传的文件一样通过指定其名称被包含在wiki页面中。本地的文件名优先于维基共享资源的文件名。
配置
默认的方法: $wgUseInstantCommons
要在MediaWiki 1.16版或更高的版本中启用即时共享资源,只需将此行添加到LocalSettings.php
即可(有关详细信息,请参阅$wgUseInstantCommons ):
$wgUseInstantCommons = true;
要在MediaWiki 1.13-1.15版中启用,请参阅Manual:$wgForeignFileRepos#Using files from Wikimedia Commons : ForeignAPIRepo 。
此功能应立即生效。如果沒有,请检查你的Web服务器中是否禁用了PHP函数curl_exec()
。
A HTTP Proxy is configured for cURL with $wgHTTPProxy .
带有本地缩略图缓存的典型即时共享资源
通过$wgUseInstantCommons默认启用的即时共享资源,會使用来自维基媒体的热链接的缩略图。[1]
这可能很慢,也可能干扰了文件的缓存(链接断了)。
如果你想在你的本地服务器上生成並使用缩略图,请不要使用$wgUseInstantCommons
。
取而代之的是,按照这里的描述,将这段代码插入LocalSettings.php中:Manual:$wgForeignFileRepos#Usage。
$wgForeignFileRepos[] = [
'class' => ForeignAPIRepo::class,
'name' => 'commonswiki', // 必须是一个與其他不同的名称
'apibase' => 'https://commons.wikimedia.org/w/api.php',
'hashLevels' => 2,
'fetchDescription' => true, // 可選的
'descriptionCacheExpiry' => 43200, // 12小时,可选的(数值为秒)
'apiThumbCacheExpiry' => 86400, // 24小时,可选的,但对於本地缩略图缓存則是必需的
];
HTTPS
从2015年6月开始,只能使用HTTPS访问维基共享资源。某些安装可能缺少其根证书的存储,这会阻止MediaWiki通过HTTPS与维基共享资源联系。如果即时共享资源停止工作,请尝试:
- 安装php curl扩展(它通常更可靠,并且更有可能已安装适当的证书)在Debian/Ubuntu上:
sudo apt-get install php-curl
- 确认您拥有最新的证书的存储。如果您已安装了php curl扩展,请按照指令webaware或者Talk:InstantCommons#Stop_working。
SElinux
如果您的服务器操作系统实现了SElinux,请查看SELinux 设置页面上的專屬章節,并确保HTTPD脚本和模块可以成功地访问网络。 如果SElinux阻止HTTPD脚本和模块连接到维基共享资源的存储库,则即时共享资源功能将无法正常工作。
防火墙的后面
如果运行wiki的服务器位于防火墙后面,wiki服务器被允许对commons.wikimedia.org和upload.wikimedia.org發出http/https请求,以便讓即时共享资源能够工作。IP地址的范围可在wikitech:IP addresses中找到。
通过即时共享资源使用文件
启用即时共享资源后,您可以从维基共享资源中选择任何图像(例如这个),单击“使用此文件”按钮(带有wiki图标按钮的旁边)并将标记粘贴到您的wiki中。 在我们的例子中,粘贴
[[File:Wikipedia-Marker-commons.svg|thumb|来自维基共享资源的图片嵌入在这个Wiki中]]
将渲染這個缩略图(如本页的右侧所示)。
请注意,在以这种方式使用文件时,您仍需要遵守任何许可或其他在文件的使用上的法律要求 - 请参阅维基共享资源:內容在維基媒體外的二次使用。
可擴增性的考虑
因為即时共享资源功能允许wiki用户从维基媒体服务器下载资源,所以關鍵是於不論是对使用wiki的人或是對维基共享资源进行服务都不可能进行服务攻击的拒绝,例如,将3萬個维基共享资源上最大文件的链接粘贴到一个wiki页面上,然後按下 "预览"。 所以,每个成功的即时共享资源请求,連同发起的用户名或IP地址以及请求的时间,都必须由启用即时共享资源的wiki一起记录。如果单个用户無視於某個慷慨的内部带宽限制(默认情况下可能高达1GB,但這应该是用户可配置的),则在接下來的24小时之内的期間,图像将不会被下载。 wiki管理员不应该存在这种限制(如果一个wiki管理员想对他们自己的wiki进行服务攻击的拒绝,他们不需要被阻止这样做;如果他们想对维基媒体进行攻击,除非在维基媒体的那一端,他们也不能被阻止这样做)。 除了每个用户的带宽限制外,还可以对应该透明下载的文件的大小进行限制。 这主要是因为超过一定大小的文件会大大延迟页面浏览,甚至可能导致页面请求超时。最好是使用一个外部应用程序来下载这些文件,这样就可以在后台完成,而不会导致页面请求的继续。 最后,即时共享资源的缓存可能有一个总的最大的大小;如果超过了这个大小,就不会再下载任何文件。
虽然使用即时共享资源功能的单个wiki不太可能导致维基媒体基金会的成本大幅增加(因为每个文件只需下载一次,而且有每个用户的带宽限制),但对于使用该功能的项目来说,在即时共享资源的描述页面上加入一个公告仍然是公平且合理的,例如: 「该文件来自维基共享资源,一个由维基媒体基金会主办的媒体檔案保管處。如果您想支持维基媒体基金会,您可以在这里捐款…」
未来潜力
将来,可能有需要提供一个发布者/订阅者的更改模式,这會需要wiki到wiki的身份验证和用于订阅wiki的图像数据库。这也会带来跨维基之間的破坏行为的威胁,这可以用24小时或更长时间的延迟阶段来解决,以使改變生效。 双向功能是另一种可能性,即允许从任一個wiki的安装,直接上传自由媒体到维基共享资源。然而,这至少會需要联邦身份验证。 它还可能需要跨wiki之間的通信设施来通知其他wiki用户有关维基共享资源的政策,这個做法可能是像LQT 這樣大型项目的一部份。
參見
- Manual:$wgForeignFileRepos - 与即时共享资源有相同的功能,但用於其他的wiki
- PhotoCommons — 提供相同功能的Wordpress插件
- 使用即时共享资源的网站示例
- Extension:QuickInstantCommons