2011-02-17 203 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格式的消息以追蹤成功或失敗。