php - 无法导入 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
更新:
我需要简化我想问的问题......
- PCRE 是否在此 dockerfile 中使用 --enable-unicode-properties 编译?
https://github.com/docker-library/php/edit/master/7.3/buster/apache/Dockerfile
- mediawiki 官方 repo 是否正在使用该 php 图像?
解决方案
不幸的是,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 的兼容性。
推荐阅读
- c++ - 如何在保持其顺序的同时对点云进行下采样?(PCL C++)
- autodesk-navisworks - 在没有 Navisworks 的情况下编辑 .nwd 中包含的数据
- gitlab-ci - 来自守护进程的错误响应:gitlab ci 中的链接格式错误
- time-complexity - 多个嵌套循环的时间复杂度
- ios - iOS:解析 DNS SRV 记录
- python - Statsmodel MN Logit 回归完成,退出代码为 -1066598273
- php - 如何从 laravel 的数据库表列中获取日期和时间?
- vb.net - 组合框不显示信息 VB.NET
- apache-spark - 比较具有特定误差范围的值
- python - Conda 环境:libcblas.so.3:无法打开共享对象文件:没有这样的文件或目录