centos7離線安裝PHP7

2022-11-02 21:00:31

環境

centos7.9

PHP7.4.30

準備工作

在編譯PHP時會提示一些包版本不夠或者缺少某些包,一般選擇yum來安裝缺少的包,但因為是離線安裝,所以可以手動設定本地yum源。先看一下系統版本

[root@xcc ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

下載系統對應的iso映象檔案CentOS-7.9-x86_64-Everything-2009.iso,傳到伺服器上並設定本地yum源。設定方法可以參考:https://www.cnblogs.com/haolb123/p/16553119.html

安裝完下面這些,可以減少在編譯PHP時提示的缺包問題。

yum install -y gcc gcc-c++ make cmake bison autoconf wget lrzsz
yum install -y libtool libtool-ltdl-devel 
yum install -y freetype-devel libjpeg.x86_64 libjpeg-devel libpng-devel gd-devel
yum install -y python-devel  patch  sudo 
yum install -y openssl* openssl openssl-devel ncurses-devel
yum install -y bzip* bzip2 unzip zlib-devel
yum install -y libevent*
yum install -y libxml* libxml2-devel
yum install -y libcurl* curl-devel 
yum install -y readline-devel
yum install -y sqlite-devel.x86_64

附1:如果沒有系統iso映象檔案,可以直接編譯安裝,提示缺少什麼,就從https://pkgs.org/下載系統對應的包,然後手動rpm -i安裝即可。有些包可能需要編譯安裝。

附2:單獨下載rpm包安裝時,會提示缺少依賴項等。而yum安裝時會自動安裝這個包的依賴項,所以還是建議設定本地yum源來裝。

附3:安裝完上面這些,如果是最小化安裝PHP7.4.30則可以正常通過編譯,可以直接make && make install安裝PHP。

下載PHP

下載地址:https://www.php.net/downloads.php

安裝

安裝時,如果此時不指定./configure後面的擴充套件,後期也可以手動加上。

附:指定的擴充套件越多,編譯時可能會遇到的問題越多,不要盲目的新增很多用不上的擴充套件,如果可以,建議選擇預設(最小化)安裝。

附:根據實際的web伺服器開啟適當的擴充套件,Nginx使用--enable-fpm,Apache使用--with-apxs2

tar zxvf php-7.4.30.tar.gz
cd php-7.4.30
./configure --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/ --enable-inline-optimization --enable-opcache --enable-fpm --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gettext --enable-mbregex --enable-mbstring --with-iconv --with-mhash --with-openssl --enable-bcmath --enable-soap --with-xmlrpc --enable-pcntl --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-sockets --with-curl --with-zip --with-bz2 --enable-gd --with-jpeg --with-readline --with-freetype --disable-fileinfo
#最小化安裝-適合nginx平臺
./configure --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/ --enable-fpm 
#最小化安裝-適合apache平臺(先安裝httpd,--with-apxs2指定httpd安裝位置)
./configure --prefix=/usr/local/php --with-config-file-scan-dir=/usr/local/php/etc/ --with-apxs2=/usr/sbin/apxs

PHP7的編譯擴充套件有些更新,參考:https://www.php.net/manual/zh/migration74.other-changes.php

編譯時遇到的一些問題

oniguruma

因為擴充套件指定了--enable-mbstring需要用到oniguruma包,如果用不到可以禁用這個擴充套件--disable-mbregex

下載地址:https://pkgs.org/download/oniguruma  和  https://pkgs.org/download/oniguruma-devel

安裝

rpm -i oniguruma-devel-6.8.2-2.el7.x86_64.rpm
rpm -i oniguruma-6.8.2-2.el7.x86_64.rpm

libzip

繼續編譯PHP,提示libzip >= 0.11因為系統映象裡的版本是0.10,需要單獨安裝,這裡下載1.2.0,因為高版本需要cmake。

下載地址:https://libzip.org/download/libzip-1.2.0.tar.gz

安裝

tar xvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make && make install

 執行完後並沒有被系統識別,相當於Windows系統的環境變數一樣,讓系統識別還需要設定PKG_CONFIG_PATH,用pkg-config檢視libzip.pc,發現沒有輸出,find查詢一下,預設位置在/usr/local/lib/pkgconfig/libzip.pc然後建立連結。

[root@xcc ~]# pkg-config --list-all|grep libzip
[root@xcc ~]# find / -name libzip.pc
/root/libzip-1.2.0/libzip.pc
/usr/local/lib/pkgconfig/libzip.pc
[root@xcc ~]# ln -sf /usr/local/lib/pkgconfig/libzip.pc /usr/lib64/pkgconfig/
[root@xcc ~]# pkg-config --list-all|grep libzip
libzip            libzip - library for handling zip archives

 繼續編譯PHP,這裡已經可以正常編譯通過。

 

繼續安裝

make 

make install

 

組態檔

從安裝包裡把組態檔拷貝到安裝目錄並重新命名,組態檔有兩個:生產環境php.ini-production和開發環境php.ini-development

[root@xcc php-7.4.30]# cp php.ini-* /usr/local/php/etc/
[root@xcc php-7.4.30]# cd /usr/local/php/etc/
[root@xcc etc]# cp php.ini-development php.ini
[root@xcc etc]# ls
php-fpm.conf.default  php-fpm.d  php.ini  php.ini-development  php.ini-production

 設定系統環境變數

編輯檔案vi /etc/profile在末尾新增

PATH=/usr/local/php/bin:$PATH
export PATH

使其立即生效source /etc/profile

 檢視版本

[root@xcc ~]# php -v
PHP 7.4.30 (cli) (built: Nov  2 2022 17:32:45) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

檢視擴充套件

[root@xcc ~]# php -m
[PHP Modules]
bcmath
bz2
Core
ctype
curl
date
dom
filter
gd
gettext
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
zip

[Zend Modules]

 end。