我们的一个客户希望获得他们运行了一段时间的 wiki 站点的所有内容。他们为我们提供了“mediawiki”软件的完整数据库。我们正在尝试使用 php 从“文本”表中提取文章,而不使用 MediaWiki 引擎。
MediaWiki 似乎在将内容作为 BLOB 放入数据库之前对其进行压缩。如果没有引擎,我们无法找到提取它的方法。我查看了源代码,但无法重新创建它们如何提取 BLOB。
任何建议如何解决这个问题?
从文本表:
old_flags
逗号分隔的标志列表。包含以下可能的值:
┌──────────┬────────────────────────────────────── ────────────────────────────┐ │ gzip │ 文本用 PHP 的 gzdeflate() 函数压缩。│ │ │注意:如果 $wgCompressRevisions 选项打开,新行 │ │ │(=当前版本)将在保存时透明地压缩。│ │ │ 以前的版本也可以使用脚本压缩 │ │ │ compressOld.php │ ├──────────┼────────────────────────────────────── ────────────────────────────┤ │ utf-8 │ 文本存储为 UTF-8。│ │ │注意:如果 $wgLegacyEncoding 选项打开,行 *without* this │ │ │ flag 将在加载时透明地转换为 UTF-8。│ ├──────────┼────────────────────────────────────── ────────────────────────────┤ │ 对象 │ 文本字段包含一个序列化的 PHP 对象。│ │ │注意:该对象要么包含多个压缩版本 │ │ │ 一起达到更好的压缩比,还是指 │ │ │ 可以找到文本的另一行。│ ├──────────┼────────────────────────────────────── ────────────────────────────┤ │ external │ 文本存储在 old_text 指定的外部位置 │ └──────────┴────────────────────────────────────── ────────────────────────────┘
https://www.mediawiki.org/wiki/Compression
标有 old_flags="gzip" 的旧条目的 old_text 使用 zlib 的 deflate 算法压缩,没有标题字节。PHP 的 gzinflate() 将直接接受此文本;在 Perl 等中,将窗口大小设置为 -MAX_WSIZE 以禁用标题字节。
gzinflate()
根据文档,应该像将 blob 数据输入 php 一样简单。
只是一个猜测,但试试这样:
SELECT UNCOMPRESS(blobname)
顺便说一句,我没有使用 MediaWiki 的经验,但我希望能让你朝着正确的方向前进
查看此页面以获取有关 MySQL 压缩方法的更多信息。