我们的一个客户希望拥有他们运行了一段时间的wiki网站的所有内容。他们为我们提供了"mediawiki"软件的完整数据库。我们正在尝试使用php从"text"表中提取文章,而不使用MediaWiki引擎。
MediaWiki似乎在将内容作为BLOB放入数据库之前先对其进行压缩。如果没有发动机,我们找不到提取它的方法。我查看了源代码,但无法重新创建它们是如何提取BLOB的。
有什么建议可以解决这个问题吗?
来自文本表:
旧标记
以逗号分隔的标志列表。包含以下可能的值:
┌──────────┬──────────────────────────────────────────────────────────────────┐│gzip│文本是用PHP的gzdeflate()函数压缩的。││ │注意:如果$wgCompressRevisions选项处于启用状态,则新行││ │(=当前修订版)将以透明方式进行gzip映射,以节省时间。││ │以前的修订版也可以使用脚本进行压缩││ │compressOld.php│├──────────┼──────────────────────────────────────────────────────────────────┤│utf-8│文本存储为UTF-8。││ │注意:如果$wgLegacyEncoding选项处于启用状态,则行*with*this││ │标志将在加载时透明地转换为UTF-8。│├──────────┼──────────────────────────────────────────────────────────────────┤│对象│文本字段包含一个序列化的PHP对象。││ │注意:对象包含多个压缩版本││ │一起实现更好的压缩比,或者它指的是││ │可以找到文本的另一行。│├──────────┼──────────────────────────────────────────────────────────────────┤│外部的│文本存储在old_Text指定的外部位置│└──────────┴──────────────────────────────────────────────────────────────────┘
https://www.mediawiki.org/wiki/Compression
用Old_flags="标记的旧条目;gzip";用zlib的deflate算法压缩它们的old_text,没有头字节。PHP的gzinflate()将直接接受此文本;在Perl等中,将窗口大小设置为-MAX_WSIZE以禁用标头字节。
根据文档,应该像将blob数据输入php的gzinflate()
一样简单。