4

我们的一个客户希望获得他们运行了一段时间的 wiki 站点的所有内容。他们为我们提供了“mediawiki”软件的完整数据库。我们正在尝试使用 php 从“文本”表中提取文章,而不使用 MediaWiki 引擎。

MediaWiki 似乎在将内容作为 BLOB 放入数据库之前对其进行压缩。如果没有引擎,我们无法找到提取它的方法。我查看了源代码,但无法重新创建它们如何提取 BLOB。

任何建议如何解决这个问题?

4

3 回答 3

2

文本表

old_flags 

逗号分隔的标志列表。包含以下可能的值:

┌──────────┬────────────────────────────────────── ────────────────────────────┐
│ gzip │ 文本用 PHP 的 gzdeflate() 函数压缩。│
│ │注意:如果 $wgCompressRevisions 选项打开,新行 │
│ │(=当前版本)将在保存时透明地压缩。│
│ │ 以前的版本也可以使用脚本压缩 │
│ │ compressOld.php │
├──────────┼────────────────────────────────────── ────────────────────────────┤
│ utf-8 │ 文本存储为 UTF-8。│
│ │注意:如果 $wgLegacyEncoding 选项打开,行 *without* this │
│ │ flag 将在加载时透明地转换为 UTF-8。│
├──────────┼────────────────────────────────────── ────────────────────────────┤
│ 对象 │ 文本字段包含一个序列化的 PHP 对象。│
│ │注意:该对象要么包含多个压缩版本 │
│ │ 一起达到更好的压缩比,还是指 │
│ │ 可以找到文本的另一行。│
├──────────┼────────────────────────────────────── ────────────────────────────┤
│ external │ 文本存储在 old_text 指定的外部位置 │
└──────────┴────────────────────────────────────── ────────────────────────────┘
于 2012-11-26T20:15:11.643 回答
0

https://www.mediawiki.org/wiki/Compression

标有 old_flags="gzip" 的旧条目的 old_text 使用 zlib 的 deflate 算法压缩,没有标题字节。PHP 的 gzinflate() 将直接接受此文本;在 Perl 等中,将窗口大小设置为 -MAX_WSIZE 以禁用标题字节。

gzinflate()根据文档,应该像将 blob 数据输入 php 一样简单。

于 2021-01-06T19:26:11.643 回答
-2

只是一个猜测,但试试这样:

SELECT UNCOMPRESS(blobname)

顺便说一句,我没有使用 MediaWiki 的经验,但我希望能让你朝着正确的方向前进

查看此页面以获取有关 MySQL 压缩方法的更多信息。

于 2012-11-26T20:09:42.750 回答