我想在 Debian 8 上安装一个非常旧的 PHP 版本。即 PHP 5.1.0。我会不是在生产中使用它,它仅用于测试目的。但是,如果我尝试编译它,我会遇到 dom 模块的问题。经过一番研究后,我发现 libxml2 版本 >= 2.9 会导致旧 PHP 版本出现问题。现在我想知道是否可以编译 libxml2 2.8,将其保存在某处并使用它来编译 php 5.1。如果可以的话,你能告诉我怎么做吗?
答案1
你绝对可以做到这一点,但它可能会很烦人。我将 libxml 2.8./configure --prefix=/path/to/prefix/
与 PHP 5.1.0(例如/opt/php510/
或/usr/local/php510/
)一起放在单独的前缀 ( ) 中,因为您不想冒险用旧库覆盖新库。如果您静态构建 libxml 2.8,那么您的情况肯定会最好,这样它就会融入 PHP 中,并且您可以在启动程序时避免“共享库地狱”。通常,这可以通过添加--disable-shared --enable-static
配置标志来完成。
然后在 PHP 端,您必须将其配置为使用相同的前缀,并将 libxml 2.8 库路径添加到您的 GCC 调用中。如果它使用 autoconf 来构建(./configure
脚本通常是 autoconf 生成的),您需要运行类似CFLAGS=-I/opt/php510/include LDFLAGS=-L/opt/php510/lib ./configure --prefix=/opt/php510
.
- CFLAGS 是一个变量,包含创建
.o
目标文件时传递给 gcc 的参数。告诉 GCC在查找默认列表(通常是IIRC)之前先-I/path
查找头文件(“包含”或.h
文件)。/path
/usr/include
/include
- LDFLAGS 是一个包含传递给链接器的参数的变量(通常
ld
,尽管也可以用作gcc
链接器将.o
文件组合成可执行程序。autoconf 在两种用法中都尊重该变量)。-L/path
告诉链接.a
器.so
在/path
.
如果您将 libxml 2.8 链接为共享库,您将收到类似的错误,libxml.so.2.8 not found
因为/etc/ld.so.conf
没有被告知在/opt/php510/lib
.这就是为什么我建议使用静态链接版本。
如果您在执行此操作时遇到任何问题,或者某些内容正在使用不同的构建系统,请告诉我。
您也可以修复 PHP 以使用 libxml >= 2.9 版本的任何导致其混乱的函数,尽管找到已删除函数的旧弃用通知有时很困难。