[LNMP] 舊 Ubuntu 主機升級 PHP 版本到 v7.4

本篇文章更新時間:2022/11/25
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


LNMP 每年的更新都還滿穩定,越做越好,記得從 v1.3 開始用,現在都 v1.8 了。

問題就是早期主機(Ubuntu 14 ~ Ubuntu 16)安裝的 PHP 版本如今要升級,到 PHP 7.3 還沒問題,但升級到 PHP 7.4 就會跳錯誤無法繼續。

看了錯誤的訊息主要有兩個部分需要手動更新:

  1. libzip 的開發套件
  2. freetype2 的開發套件

首先是 libzip 寫文當前是 1.8.0 版本,主機上還在 1.0..

wget https://libzip.org/download/libzip-1.8.0.tar.gz
tar -zxvf libzip-1.8.0.tar.gz
cd libzip-1.8.0
mkdir build
cd build
cmake ..
make && make install

Ubuntu 16.04 的 CMake 版本預設大於 3.0.2 還可以 Build 但 Ubuntu 14.04 的還在 v2 就要先升級一下了

再來是 freetype2 還可以透過系統套件安裝,不用這麼麻煩。

apt install libfreetype6-dev libharfbuzz0b -y

都處理好後 Ubuntu 16.04 就可以進行升級 PHP 7.4 啦!

但,這個時候的 Ubuntu 14.04 就沒這麼幸運了 Orz

儘管 LNMP 框架官網上也寫著如果要安裝 PHP 7.4 的話,要求系統至少是 Ubuntu 16 以上。但我是覺得不至於啦,把相依函式庫等處理好就可以了!

結果一開始跑更新就出現 Libjpeg not found 的錯誤訊息,而且詭異的是明明就安裝了,甚至還指定了 lib 的位置,就是說找不到。跟這篇問題一樣 Compiling PHP with GD and libjpeg support

# php -r 'print_r(gd_info());'
Array
(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] =>(???????)
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] =>
    [XBM Support] => 1
    [WebP Support] =>
    [BMP Support] => 1
    [TGA Read Support] => 1
    [JIS-mapped Japanese Font Support] =>
)

雖然是可以放著不管,然後再把 ImageMagick 給編譯裝上去替代使用,但真的覺得少了什麼還是給他逐一下去追錯誤訊息。

延伸: Imagick vs GD in WordPress WordPress v3.5 後預設採用 Imagick 這個影像處理函式庫。

後來發現是 pkg-config --libs libjpeg 沒有撈到 libjpeg 的設定資訊導致判斷不存在無法繼續,從原始碼編譯預設的 libjpeg 也沒有那個 libjpeg.pc 設定資訊,後來找到編譯 libjpeg-turbo 這專案才發現。

git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git
cd libjpeg-turbo && mkdir build
cmake ..
make && make install

libjpeg.pc 檔案在 ~/libjpeg-turbo/build/pkgscripts 裡面,把檔案複製到 /usr/local/lib/pkgconfig/ 裡後再跑一次組態就解決了找不到的問題。

參考: Adding and making a .PC file for pkg-config

是說我也試過先忽略 --with-jpeg 參數繼續編譯,事後再來把 GD 函式庫重編譯一次安裝,但結果會過,可是支援沒出來。只好整個又重新把 PHP 7.4.28 給重新編過一次。

過程中出現 No package 'oniguruma' found 的部分就直接也是從原始碼去編譯安裝

wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
tar -zxvf oniguruma-6.9.4.tar.gz
cd oniguruma-6.9.4/
./autogen.sh
./configure
make
make install

過程就是這樣: 編譯->出錯->除錯->編譯->出錯... 模式也算簡單,就是缺少什麼補什麼的概念。

參考:

  1. 腾讯云centos7.5编译安装PHP7.4 - 一篇很扎實的少什麼補什麼的文XD
  2. centos8安装php7.4

後記

其實 Ubuntu 14.04 也真的很舊了,一堆套件都不支援,網路上都還快找不到套件的下載點,只能自己編譯處理環境,真的是拿來練功的機器。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____34%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

文章
Filter

Filter Search Results