Php

Debian:如何將兩個版本的 libcurl 放在一個系統上?

  • April 29, 2022

我正在嘗試在單個伺服器(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. 安裝所有需要的php5.6包;
  2. 將目錄 /usr/lib 複製到 /usr/php56libs
  3. 在我的情況下編輯 systemd 服務文件: systemctl edit --full php5.6-fpm
  4. 服務部分添加環境變數: Environment="LD_LIBRARY_PATH=/usr/php56libs"
  5. 現在您可以使用 apt (帶有強制-f選項)安裝所有 php8.1 數據包,它將從 /usr/lib 中刪除所有衝突的庫,但這沒關係,因為 php5.6-fpm 服務將使用 /usr/php56libs 中的那些

將這兩個應用程序放在一個容器中,該容器包含它所需的一切。

引用自:https://serverfault.com/questions/1099678