2

我在本地设置自己的 MediaWiki 网站,但无法使用 InstantCommons 功能(用于直接嵌入来自 commons.wikimedia.org 的文件)

我没有收到错误消息,我尝试使用以下语法从 Commons 加载文件:

  [[File:Cervus elaphus Luc Viatour 1.jpg|Cervus elaphus Luc Viatour 1]]

只是没有加载,最后我的页面上有一个红色链接,指的是一个不存在的文件。现在我已经 2 天了,我正在寻找解决方案,但到目前为止没有任何成功。

我在跑步:

  • MediaWiki v.1.19.1
  • Fedora 16(带有 SElinux)
  • PHP 5.3.15
  • MySQL Ver 14.14 Distrib 5.5.25a,适用于 Linux (x86_64)

我在我的 中尝试了以下两种配置LocalSettings.php,但均未成功:

$wgUseInstantCommons = true;

$wgForeignFileRepos[] = array(
   'class'                   => 'ForeignAPIRepo',
   'name'                    => 'shared',
   'apibase'                 => 'http://commons.wikimedia.org/w/api.php',
   'fetchDescription'        => true, // Optional
   'descriptionCacheExpiry'  => 43200, // 12 hours, optional (values are seconds)
   'apiThumbCacheExpiry'     => 43200, // 12 hours, optional, but required for local thumb caching
);

任何建议都是最受欢迎的。

4

3 回答 3

1

好的,这(还)不是一个答案,而是一个调试建议。在我看来,从您的服务器到 Commons 的 HTTP 请求由于某种原因失败了,但不幸的是,ForeignAPIRepo 并没有以任何方式指出错误的原因。

这确实是 MediaWiki 中的一个错误,应该修复,但与此同时,您能否尝试将以下差异(或仅手动添加标有+符号的行)应用到您的includes/filerepo/ForeignAPIRepo.php文件:

Index: includes/filerepo/ForeignAPIRepo.php
===================================================================
--- includes/filerepo/ForeignAPIRepo.php    (revision 97048)
+++ includes/filerepo/ForeignAPIRepo.php    (working copy)
@@ -385,6 +385,7 @@
        if ( $status->isOK() ) {
                return $req->getContent();
        } else {
+               wfDebug( "ForeignAPIRepo: HTTP GET failed: " . $status->getXML() );
                return false;
        }
    }

应用后,尝试加载 Commons 图像的文件描述页面并查看 MediaWiki 调试日志。现在应该有一行以 开头,ForeignAPIRepo: HTTP GET failed:后跟几行 XML 错误转储。该错误数据应该有望表明出了什么问题;请复制并粘贴到这里。

于 2012-08-29T18:10:44.957 回答
0

我的也不是一个确定的答案。参考Ilmari Karonen 的帖子,我无法找到或获取getXML()为我的 Mediawiki v1.23.0 版本执行的方法。我正在查看此处找到的参考文档,以尝试在Status该类上找到任何其他方法调用,这些方法可以为我提供良好的故障排除信息。我最终找到了以下内容并编辑了Ilmari Karonen includes/filerepo/ForeignAPIRepo.php从第 521 行开始的帖子中提到的相同文件:

if ( $status->isOK() ) {
    return $req->getContent();
} else {
    $error = $status->getErrorsArray();
    $dump = print_r($error, true);
    wfDebug("ForeignAPIRepo: HTTP GET failed: $dump\n");
    return false;
}
于 2015-06-19T13:43:18.910 回答
0

旧版 MediaWiki 的默认 InstantCommons 配置有点傻。由于T114098,我推荐以下其中一项,希望能解决您的问题:

  1. 升级到 MediaWiki 1.27(当它发布时),或者
  2. 将您LocalSettings.php的热链接图像设置为保存服务器端请求和处理。

$wgUseInstantCommons = false; $wgForeignFileRepos[] = array( 'class' => 'ForeignAPIRepo', 'name' => 'commonshotlink', 'apibase' => 'https://commons.wikimedia.org/w/api.php', 'hashLevels' => 2, 'url' => 'https://upload.wikimedia.org/wikipedia/commons', 'thumbUrl' => 'https://upload.wikimedia.org/wikipedia/commons/thumb', 'transformVia404' => true, 'fetchDescription' => true, 'descriptionCacheExpiry' => 43200, 'apiThumbCacheExpiry' => 24 * 3600, );

于 2015-11-08T09:29:17.197 回答