天天看點

centos7.5編譯安裝php7.4.30踩坑記錄

作者:一起web程式設計

因為等保安全要求,需要更新php的版本為php7.4.30. 原來的版本是7.2 ,目前爆出了不少的漏洞需要修複;唯一的辦法就是更新版本。

為什麼要更新到這個版本,因為這個版本是目前7.4的最後一個版本,目前發現的安全漏洞都已經進行了修複;

基本上軟體版本都是這個規則,安裝每個大版本的最後一個版本就對了;

下面是安裝過程,記錄這次安裝的問題,以備後用。

環境:centos7.4 ,源碼編譯安裝。

  1. 官網下載下傳需要的源碼

https://www.php.net/downloads,下載下傳需要的版本,上傳到伺服器,解壓

2.編譯

編譯參數如下:

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc
  --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-fpm-user=www 
  --with-fpm-group=www --enable-fpm --enable-opcache --enable-mysqlnd 
   --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir=/usr/local
   --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop
   --enable-exif --enable-sysvsem --enable-inline-optimization 
   --with-curl=/usr/local/curl --enable-mbregex --enable-mbstring 
   --with-password-argon2 --with-sodium=/usr/local --enable-gd --with-jpeg 
   --with-openssl=/usr/local/openssl --with-mhash --enable-pcntl 
   --enable-sockets --with-xmlrpc --enable-ftp --enable-intl 
   --with-xsl --with-gettext --enable-soap --disable-debug 
   --with-freetype=/usr/local/freetype 
  --with-zip --host=x86_64           

每個人根據自己的需要做調整就好了,具體支援哪些參數,可通過./configure --help 檢視,每個php的版本參數不完全一樣。

3.make && make install

不出意外,這個過程肯定會出錯,編譯安裝過軟體的人都知道,下面是我遇到的問題:

1.configure: WARNING: unrecognized options: --with-jpeg-dir, --with-png-dir, --with-libxml-dir, --with-gd, --enable-zip, --with-freetype-dir

版本不同,支援的參數也不同,我用的是以前版本的參數,是以有些不支援,把不支援的去掉就ok了

2.configure: error: cannot run C compiled programs.

增加編譯參數 --host=x86_64

3.error: Package requirements (libsodium >= 1.0.8) were not met

yum install libsodium-devel.x86_64 ,缺少類庫是比較常見的錯誤,一般找到對應的包安裝就可以了,記得一定是***-devel的包,因為編譯需要的頭檔案在這裡面;

4.make出錯,

php-7.4.30/ext/iconv/iconv.c:2583: undefined reference to `libiconv_close'

ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':

php-7.4.30/ext/iconv/iconv.c:2604: undefined reference to `libiconv_open'

解決方法:

修改 Makefile,找到EXTRA_LIBS=… 行末加上 –liconv,重新make

5.Requested 'libzip >= 0.11' but version of libzip is 0.10.1

使用yum安裝的libzip版本是0.10 ,需要的最低版本是0.11 ,這也是一類常見的問題,需要自己下載下傳源碼安裝,一般步驟如下

yum remove libzip libzip-devel -y
wget https://libzip.org/download/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"           

安裝完成後,還要檢查自己的程式、使用的架構是否有相容的地方,就像我用的thinkphp5.0 ,更新版本就有出錯

Array and string offset access syntax with curly braces is deprecated[/data/wwwroot/dq.admin.shenzhenshizhi.cn/thinkphp/library/think/db/Query.php:400           

原因:從7.4以後,隻能使用第一種形式$value[0]擷取字元串偏移了,第二種方法$value{0}被棄用。

最後總結一下:很多人怕自己編譯安裝軟體,因為需要解決很多軟體依賴,有些類庫找不到,其實遇到問題不要怕,很多問題别人都遇到過,而且有解決辦法,隻要不斷查資料,找辦法,不斷測試,總結經驗,慢慢就會越來越熟練。

繼續閱讀