我正在尝试在单个服务器(debian10)上迁移两个 Web 应用程序,它们都需要不同版本的 php,并且都需要 cURL 扩展才能正常工作。
php5.6-curl 使用 libcurl v3
php8.1-curl 使用 libcurl v4
首先,我安装了 php5.6-curl,当我尝试安装 php8.1-curl 时 - apt 抛出了通知The following packages have unmet dependencies: php8.1-curl : Depends: libcurl4 (>= 7.56.1) but it is not going to be installed
如果我在 apt 上使用 -f,它会删除 php5.6-curl...
使这两个 libcurl 库在单个系统上可用的最优雅的方法是什么?
谢谢,罗伯特
编辑:据我所知,问题在于 libcurl3 和 libcurl4 共享同一个文件 /usr/lib/x86_64-linux-gnu/libcurl.so.4,并且当重新安装软件包时它会发生变化 (libcurl3<->libcurl4)。php[5.6,8.1]-fpm 尝试加载库,如果 libcurl.so.4 版本不正确,则会导致加载失败,php 无法使用该模块。
也许有一种优雅的方法可以强制 4eg php5-curl 二进制文件使用来自用户定义路径的库?
答案1
将两个应用程序放入包含其所需一切内容的容器中。
答案2
我自己找到了解决方法,如果您想解决类似的问题,可以采用我的方法,但这不是最优雅的方法。
- 安装所有必需的 php5.6 包;
- 将目录 /usr/lib 复制到 /usr/php56libs
- 就我而言,编辑 systemd 服务文件:
systemctl edit --full php5.6-fpm
- 在下面服务部分添加环境变量:
Environment="LD_LIBRARY_PATH=/usr/php56libs"
- 现在你可以使用 apt(使用强制
-f
选项)安装所有 php8.1 数据包,它将从 /usr/lib 中删除所有冲突的库,但这并不重要,因为 php5.6-fpm 服务将使用 /usr/php56libs 中的库
答案3
通过 SSH 登录到您的服务器。确保您位于用户的主目录中。找到您想要安装的版本 解压文件。导航到这个新目录。使用 nano 或 vim 打开您的 .bash_profile。例如:将所需文件添加到 .bash 并更新 更新您的 .bash_profile 以激活您的新配置。检查 curl 的位置和版本