我目前正在使用Extension:Push将文章从一个MediaWiki(1.16)安装(位于本地Intranet中,无法从外部访问)复制到另一个。但是,Push只能通过让远程MediaWiki下载文件来复制文件,这在这种情况下是不可能的(因为某种原因无法从外部访问Intranet wiki)。
所以,我需要一些方法直接绑定到MediaWiki的Upload API。我目前的尝试如下:
$header = 'Content-Type: multipart/form-data; boundary='.$multipart_boundary.'\r\n'.
'Cookie: '.$cookies;
$file_contents = file_get_contents ($imagePage->getDisplayedFile()->getFullUrl());
$content = "--".$multipart_boundary.'\r\n'.
'Content-Disposition: form-data; name="file"; filename="'.basename($imagePage->getDisplayedFile()->getFullUrl()).'"\r\n'.
'Content-Type: application/octet-stream\r\n\r\n'.
$file_contents.'\r\n'.
'--'.$multipart_boundary.'\r\n'.
'Content-Disposition: form-data; name="action"\r\n\r\n'.
'upload\r\n'.
'--'.$multipart_boundary.'\r\n'.
'Content-Disposition: form-data; name="format"\r\n\r\n'.
'json\r\n'.
'--'.$multipart_boundary.'\r\n'.
'Content-Disposition: form-data; name="ignorewarnings"\r\n\r\n'.
'1\r\n'.
'--'.$multipart_boundary.'\r\n'.
'Content-Disposition: form-data; name="token"\r\n\r\n'.
$token.'\r\n';
$context = stream_context_create (array (
'http' => array (
'method' => 'POST',
'header' => $header,
'content' => $content,
),
));
$response = file_get_contents ($target, false, $context);
我没有收到任何错误消息(既不是本地也不是远程Apache),但文件也没有出现。任何人都知道出了什么问题,有一个可行的解决方案,或者至少可以指向我所涉及的mediawiki函数,所以我可以在其中加入一些调试日志?
答案 0 :(得分:1)
我还没有尝试过这个,但是如果你在远程Wiki(你知道它的URL)上创建页面,那么看起来好像在http://www.mediawiki.org/wiki/API:Edit中描述了它的方式需要获取编辑令牌,然后使用令牌,页面内容等进行发布。您将获得XML格式的消息以追踪成功或失败。
答案 1 :(得分:0)
嗯,原作者更新了扩展名。这解决了这个问题。