首页 > 解决方案 > 无法导入 XML 数据

问题描述

我尝试使用 importDump 实用程序从 XML 文件中导入数据...

root@aace30d9b5f3:/var/www/html/mediawiki-1.36.1# php ./maintenance/importDump.php mrwiki-latest-pages-articles-multistream.xml

得到这个错误:

MWException from line 2108 of /var/www/html/mediawiki-1.36.1/includes/parser/Parser.php: PCRE needs to be compiled with --enable-unicode-properties in order for MediaWiki to function

我下载了 PCRE 的源代码并运行 make / make install 但这不起作用。如果这很重要,我正在使用 mediawiki 的官方 docker 图像。

https://hub.docker.com/_/mediawiki


更新:

我需要简化我想问的问题......

  1. PCRE 是否在此 dockerfile 中使用 --enable-unicode-properties 编译?

https://github.com/docker-library/php/edit/master/7.3/buster/apache/Dockerfile

  1. mediawiki 官方 repo 是否正在使用该 php 图像?

https://github.com/wikimedia/mediawiki-docker/blob/51105612d2e1168f1b0545f47951847d63fb9613/1.36/apache/Dockerfile

标签: phpdockermediawikipcre

解决方案


不幸的是,PHP 通常使用自己的 PCRE 库(来自手册:“默认情况下,此扩展是使用捆绑的 PCRE 库编译的”),您也可以在其他答案中看到。

您需要做的是重新编译 PHP 本身以激活 PCRE 更改。为此,您需要(您可以在克隆机器上执行此操作

  • 查看确切的 PHP 版本
  • 下载并安装相关源码包
  • 从中获取确切的编译选项phpinfo()
  • 适当更改 PCRE 选项
  • make(您不需要安装,因为您不会在克隆机器中使用 PHP)

您现在唯一需要更改的文件是基本的 PHP 二进制文件(/usr/bin/php注意替代符号链接)。如果您使用具有相同发行版和版本的克隆机器,您可以轻松地在原始机器上重命名该二进制文件并移入新机器,它会工作(我已经这样做了几十次),所以你会可以随时返回。

或者,您可以在克隆的机器上安装 PCRE 的开发包并提供--with-pcre-regex=--with-pcre-dir=编译器。新的 PHP 二进制文件现在将使用系统 PCRE,因此pcretest -C现在将产生可靠的结果。我不确定您是否需要在两台机器上使用相同的 PCRE 版本(您可能需要相同的主要版本,但次要版本不匹配不应该是一个大问题)。请注意,如果由于任何原因库调用发生更改,更新系统 PCRE 库可能会破坏与 PHP 的兼容性。


推荐阅读