【问题标题】:Change which libxml2 version PHP uses更改 PHP 使用的 libxml2 版本
【发布时间】:2017-12-08 23:35:05
【问题描述】:

一点介绍。我正在使用xmlrpc_server_call_method 解析XML 请求并对XML 中包含的数据执行XML 中指定的操作。我需要处理的 XML 大于 10MB,主要是由于一行非常长的文本,因此我需要使用修改后的 parserInternals.h 文件编译 libxml2。我已经成功编译了libxml2,结果得到了libxml2.so、libxml2.so.2和libxml2.so.2.9.7文件。

我遇到的问题是让 PHP 将它们识别为要使用的 libxml2.so。我是否也必须编译 php-xmlrpc?我已经用新的 libxml2.so 替换了我服务器上的每个 libxml2.so,PHP 仍然认为我的系统某处有 2.9.1(根据 phpinfo())。

另外,ldconfig 显示 libxml2.so.2 -> libxml2.so.2.9.7,但根本不显示 libxml2.so。

ldd xmlrpc.so 的输出:

libxml2.so.2 => /lib64/libxml2.so.2 (memory address goes here)

/lib64 链接到 /usr/lib64,该目录中的 libxml2.so.2 链接到 libxml2.so.2.9.7,这是编译修改后的 libxml2 的结果。

谢谢

【问题讨论】:

  • ldd xmlrpc.so 说什么?这应该告诉您,如果共享库本身将 libxml 作为共享库加载,或者 libxml 是否静态链接到 xmlrpc(在后一种情况下,您需要再次编译 xmlrpc)。
  • 为了克服 10 MB 的限制,应该可以使用 LIBXML_PARSEHUGE flag 解析 XML 文档,而无需重新编译库。
  • @nwellnhof 我同意这应该是可能的,但是 xmlrpc 方法不接受这个标志。将此标志与 simplexml_load_string() 一起使用确实可以解析 XML,但 xmlrpc 可以很好地处理 base64,我不想复制它。

标签: php xml-rpc libxml2 php-5.6


【解决方案1】:

我不得不手动重新制作符号链接。他们指向了正确的位置,但由于某种原因,/proc/pid/map_files/blah 中的 php-fpm 仍然具有指向 libxml2.so.2.9.1 的符号链接,即使在使用 systemctl restart rh-php56-php-fpm 重新启动后也是如此。我用ln -sf libxml2.so.2.9.7 libxml2.so.2 重新制作了符号链接,并再次重新启动了 php-fpm 服务,瞧。

感谢 GhostGambler 教我有关 ldd 的知识。那是非常有用的一课。

编辑:作为参考,我使用以下命令来确定是否有进程仍在使用旧的 libxml2 库:

find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /path/to/library_of_interest.so'

这很慢...所以最好从 /proc 开始并耐心等待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-10
    • 2012-09-21
    • 2021-02-17
    • 2017-02-14
    • 2015-11-02
    • 2021-12-31
    相关资源
    最近更新 更多