Php
Debian:如何將兩個版本的 libcurl 放在一個系統上?
我正在嘗試在單個伺服器(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 二進製文件使用使用者定義路徑中的庫?
我自己找到了解決方法,如果你想解決類似的問題,你可以走我的,而不是最優雅的方式。
- 安裝所有需要的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 中的那些
將這兩個應用程序放在一個容器中,該容器包含它所需的一切。