2011-02-17 115 views
0

我目前使用Extension:Push从一个MediaWiki(1.16)安装(位于本地内部网中,不能从外部访问)将文章复制到另一个。但是,Push只能通过让远程MediaWiki下载文件来复制文件,在这种情况下这是不可能的(因为某种原因,Intranet wiki无法从外部访问)。通过PHP将文件上传到mediawiki

所以,我需要一些方法直接绑定到MediaWiki的上传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格式的消息以追踪成功或失败。