[英]Extract compressed text from MediaWiki database with PHP
我們的一個客戶想要擁有他們運行一段時間的 wiki 站點的所有內容。 他們為我們提供了“mediawiki”軟件的完整數據庫。 我們正在嘗試使用 php 從“文本”表中提取文章,而不使用 MediaWiki 引擎。
MediaWiki 似乎在將內容作為 BLOB 放入數據庫之前對其進行了壓縮。 如果沒有引擎,我們找不到提取它的方法。 我查看了源代碼,但無法重新創建它們提取 BLOB 的方式。
任何建議如何解決這個問題?
從文本表:
old_flags
逗號分隔的標志列表。 包含以下可能的值:
\n ┌──────────┬──────────────────────────────────────── ──────────────────────────────┐\n │ gzip │ 文本被PHP 的gzdeflate() 函數壓縮。 │\n │ │注意:如果打開了 $wgCompressRevisions 選項,新行 │\n │ │(=當前版本)將在保存時透明壓縮。 │\n │ │ 以前的修訂也可以使用腳本進行壓縮│\n │ │ compressOld.php │\n ├──────────┼──────────────────────────────────────── ────────────────────────────────┤\n │ utf-8 │ 文本存儲為 UTF-8。 │\n │ │注意:如果打開了 $wgLegacyEncoding 選項,行*沒有*這個 │\n │ │ 標志將在加載時透明地轉換為 UTF-8。 │\n ├──────────┼──────────────────────────────────────── ────────────────────────────────┤\n │ object │ Text 字段包含一個序列化的 PHP 對象。 │\n │ │注意:對象要么包含多個壓縮版本│\n │ │ 一起達到更好的壓縮比,或者是指│\n │ │ 可以找到文本的另一行。 │\n ├──────────┼────────────────────────────────────── ────────────────────────────────┤\n │ 外部 │ 文本存儲在 old_text 指定的外部位置 │\n └──────────┴──────────────────────────────────────── ────────────────────────────────┘\n
https://www.mediawiki.org/wiki/Compression
標有 old_flags="gzip" 的舊條目的 old_text 使用 zlib 的 deflate 算法壓縮,沒有標頭字節。 PHP 的 gzinflate() 會直接接受這個文本; 在 Perl 等中,將窗口大小設置為 -MAX_WSIZE 以禁用標題字節。
根據文檔,應該像將 blob 數據輸入 php 的gzinflate()
一樣簡單。
只是一個猜測,但試試這樣:
SELECT UNCOMPRESS(blobname)
順便說一句,我沒有使用 MediaWiki 的經驗,但我希望能將您帶向正確的方向
查看此頁面以獲取有關 MySQL 壓縮方法的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.