如何在 debian 8 上编译旧的 PHP 版本和依赖项? (本例中为 PHP 5.1.0)

如何在 debian 8 上编译旧的 PHP 版本和依赖项? (本例中为 PHP 5.1.0)

我想在 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 版本的任何导致其混乱的函数,尽管找到已删除函数的旧弃用通知有时很困难。

相关内容