如何在 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。如果可能的話,你能告訴我怎麼做嗎?
你絕對可以做到這一點,但它會變得煩人。我會將 libxml 2.8 放在
./configure --prefix=/path/to/prefix/
PHP 5.1.0 旁邊的單獨前綴 ( ) 中(例如/opt/php510/
or/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 版本,儘管有時很難找到已刪除函式的舊棄用通知。