【发布时间】: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_PARSEHUGEflag 解析 XML 文档,而无需重新编译库。 -
@nwellnhof 我同意这应该是可能的,但是 xmlrpc 方法不接受这个标志。将此标志与 simplexml_load_string() 一起使用确实可以解析 XML,但 xmlrpc 可以很好地处理 base64,我不想复制它。
标签: php xml-rpc libxml2 php-5.6