CentOS7下編譯安裝PHP8.0.7

CentOS7下編譯安裝PHP8.0.7

一、環境說明

本文中使用本地VM虛機部署測試。

OS:CentOS Linux release 7。8。2003 (Core)

虛機配置:2核CPU、4G記憶體

①系統為CentOS 7.8 x64最小化安裝,部署前已完成系統初始化、核心及安全最佳化。

②oniguruma5php依賴包:開啟mbstring擴充套件,需要的正則處理庫。http://rpms.remirepo.net/enterprise/7/remi/x86_64/

二、基礎依賴環境

1.基礎編譯工具

## autoconf——一個用於生成shell指令碼的工具,可以自動配置軟體原始碼以適應多種類似POSIX的系統。讓軟體包在所有的不同系統上都可以進行編譯。

cd /data/toolswget http://ftp。gnu。org/gnu/autoconf/autoconf-2。71。tar。gztar xf autoconf-2。71。tar。gzcd autoconf-2。71。/configure ——prefix=/usr/makemake install

## automake——一種用於從名為Makefile.am的檔案中自動生成Makefile.ins的工具。每個Makefile.am基本上都是一系列的make變數定義1,有時會丟擲規則。使生成的Makefile.ins符合GNU Makefile標準。

cd /data/toolswget http://ftp。gnu。org/gnu/automake/automake-1。16。3。tar。gztar xf automake-1。16。3。tar。gzcd automake-1。16。3。/configure ——prefix=/usr/makemake install

## libtool——一個通用庫支援指令碼,將使用動態庫的複雜性隱藏在統一、可移植的介面中。主要的一個作用是在編譯大型軟體的過程中解決了庫的依賴問題。

cd /data/toolswget ftp://ftp。gnu。org/gnu/libtool/libtool-2。4。6。tar。gztar xf libtool-2。4。6。tar。gzcd libtool-2。4。6。/configure ——prefix=/usr/makemake install

2.安裝依賴

## 基礎依賴

rpm -ivh http://dl。fedoraproject。org/pub/epel/epel-release-latest-7。noarch。rpmyum -y install bzip2 bzip2-devel curl curl-devel fontconfig fontconfig-devel \freetype freetype-devel gd gd-devel gmp gmp-devel icu libicu libicu-devel \libxslt libxslt-devel libmcrypt libmcrypt-devel libevent libevent-devel libjpeg libjpeg-devel \libpng libpng-devel libwebp libwebp-devel libXpm libXpm-devel libxml2 libxml2-devel \openssl openssl-devel pcre-devel perl readline readline-devel zlib zlib-devel sqlite-devel

## oniguruma5php依賴

rpm -ivh https://rpms。remirepo。net/enterprise/7/remi/x86_64/oniguruma5php-6。9。7。1-1。el7。remi。x86_64。rpmrpm -ivh https://rpms。remirepo。net/enterprise/7/remi/x86_64/oniguruma5php-devel-6。9。7。1-1。el7。remi。x86_64。rpm

## 升級libzip(https://libzip。org/)

YUM安裝的libzip版本為0。10,達不到要求,需升級,解除安裝掉yum安裝的libzip然後手動安裝新版。另1。4。0版本後的libzip需要用cmake編譯,而且cmake版本需3。0。2以上。

CentOS7下編譯安裝PHP8.0.7

yum -y remove libzip libzip-develcd /data/toolswget https://libzip。org/download/libzip-1。3。2。tar。gztar xf libzip-1。3。2。tar。gzcd libzip-1。3。2。/configuremake && make installexport PKG_CONFIG_PATH=“/usr/local/lib/pkgconfig/”ldconfig /usr/local/lib

三、PHP安裝及配置

1.新增組及使用者

groupadd -g 1000 wwwuseradd -s /bin/bash -u 1000 -g www www

2.安裝PHP

cd /data/tools/wget https://www。php。net/distributions/php-8。0。7。tar。gztar xf php-8。0。7。tar。gzcd php-8。0。7。/configure ——prefix=/usr/local/php8 ——with-config-file-path=/etc \——enable-fpm ——with-fpm-user=www ——with-fpm-group=www \——disable-debug ——disable-rpath ——enable-bcmath ——enable-mbstring \——enable-shared ——enable-soap ——enable-session ——enable-shmop ——enable-simplexml \——enable-sockets ——enable-sysvmsg ——enable-sysvsem ——enable-sysvshm \——enable-mbregex ——enable-pdo ——enable-calendar ——enable-dom ——enable-exif \——enable-fileinfo ——enable-filter ——enable-ftp ——enable-gd ——enable-intl \——enable-mysqlnd ——enable-opcache ——enable-pcntl ——enable-fast-install \——with-curl ——with-cdb ——with-jpeg ——with-freetype ——with-webp ——with-xpm \——with-gettext ——with-gmp ——with-mhash ——with-openssl ——with-iconv \——with-bz2 ——with-zlib ——with-zip ——with-pear ——with-mysqli=mysqlnd \——with-pdo-mysql=mysqlnd ——enable-mysqlnd-compression-support \——with-readline ——with-libxml ——with-xsl ——without-gdbmmake -j 2//make -j 這裡指定的是CPU核心數量,加快編譯速度(根據實際情況修改)make install

CentOS7下編譯安裝PHP8.0.7

說明:相較於7.4版本,有些配置項發生了變化,不支援“--enable-inline-optimization、--enable-json、--with-xmlrpc、--with-mcrypt、--enable-wddx”等配置項引數。

## configure配置引數說明

——prefix=/usr/local/php8:指定 php8 安裝目錄 ——with-config-file-path=/etc:指定php。ini目錄位置——enable-fpm:開啟php-fpm功能,此引數適合nginx平臺——with-fpm-user=www:設定FPM執行的使用者——with-fpm-group=www:設定FPM執行的使用者組——disable-debug:禁用除錯模式——disable-rpath:禁用在搜尋路徑中傳遞其他執行庫。——enable-bcmath:精度計算,解決數字運算精度問題(支援用字串的形式表示任意大小和精度的數字)——enable-mbstring:開啟多位元組、字串的支援(國際化與字元編碼支援) ——enable-shared:編譯共享庫——enable-soap:該擴充套件可用於編寫 SOAP 伺服器和客戶端——enable-session:開啟會話支援。該模組在PHP中是在併發訪問時由一個方法來儲存某些資料。從而使你能夠構建更多的定製程式,從而提高你的 web 網站的吸引力——enable-shmop:允許PHP讀取、寫入、建立和刪除Unix共享記憶體段的函式集——enable-simplexml:該擴充套件提供了一個非常簡單和易於使用的工具集,能將XML轉換成一個帶有一般屬性選擇器和陣列迭代器的物件。此擴充套件依賴libxml——enable-sockets:開啟sockets支援。該擴充套件實現了和socket通訊功能的底層介面,它可以和客戶端一樣當做一個socket伺服器——enable-sysvmsg:該擴充套件用於完成程序間通訊的訊息佇列——enable-sysvsem:使用 SysV 的訊號 (semaphores) 機制,該擴充套件用於實現程序間訊號量的操作——enable-sysvshm:該擴充套件用於完成程序間通訊共享記憶體的操作——enable-mbregex:開啟正則表示式函式中多位元組字元的支援——enable-pdo:為PHP訪問資料庫定義了一個輕量級的一致介面。該擴充套件實現PDO介面的每個資料庫驅動可以公開具體資料庫的特性作為標準擴充套件功能。注意利用PDO擴充套件自身並不能實現任何資料庫功能;必須使用一個 具體資料庫的PDO驅動來訪問資料庫服務——enable-calendar:開啟日曆擴充套件功能,用於在不同曆法間進行轉換——enable-dom:允許透過DOM API對XML文件進行操作——enable-exif:開啟對圖片的元資料支援(通常JPEG和TIFF格式的影象檔案都包含元資料)——enable-fileinfo:該模組中的函式透過在檔案的特定位置查詢特定的魔術位元組序列來猜測檔案的內容型別以及編碼。雖然不是百分百的精確,但是通常情況下能夠很好的工作——enable-filter:該模組透過驗證或清理資料來過濾資料。當資料來源包含未知(或外部)資料(如使用者提供的輸入)時,這尤其有用。例如,此資料可能來自HTML表單——enable-ftp:開啟ftp的支援,實現透過FTP協議訪問檔案伺服器的客戶端——enable-gd:開啟gd庫的支援,用於建立和處理各種不同影象格式的影象檔案,包括 GIF、PNG、JPEG、WBMP 和 XPM——enable-intl:啟用國際化支援——enable-mysqlnd:啟用mysqlnd來支援連線MySQL——enable-opcache:啟用 opcache,預設為 ZendOptimizer+(ZendOpcache)。OPcache透過將PHP指令碼預編譯的位元組碼儲存到共享記憶體中來提升PHP的效能,儲存預編譯位元組碼的好處就是省去了每次載入和解析PHP 指令碼的開銷。——enable-pcntl:實現Unix方式的程序建立、程式執行、訊號處理以及程序的中斷。程序控制不能被應用在Web伺服器環境,當其被用於Web服務環境時可能會帶來意外的結果——enable-fast-install:為快速安裝最佳化——with-curl:開啟curl模組,連線通訊各種伺服器、使用各種協議——with-cdb:一個用於建立和讀取常量資料庫的快速、可靠、輕量級的包。——with-jpeg:開啟對jpeg影象的支援,Debian/Ubuntu系統下下需安裝libjpeg-dev依賴包;Redhat/CentOS系統下需安裝libjpeg、libjpeg-devel依賴包——with-freetype:開啟對freetype字型庫的支援,Debian/Ubuntu系統下需安裝libfreetype6-dev依賴包;Redhat/CentOS系統下需安裝freetype、freetype-devel依賴包——with-webp: 開啟對webp影象的支援,Debian/Ubuntu系統下需安裝libwebp-dev依賴包;Redhat/CentOS系統下需安裝libwebp、libwebp-devel依賴包。——with-xpm:開啟對xpm影象的支援,Debian/Ubuntu系統下需安裝libxpm-dev依賴包;Redhat/CentOS系統下需安裝libXpm、libXpm-devel依賴包。——with-gettext:實現一個NLS(本機語言支援)API,用於將PHP應用程式國際化——with-gmp:允許使用GNU MP庫處理任意長度的整數——with-mhash:用於建立校驗和、訊息摘要、訊息驗證程式碼等。Mhash 支援多種雜湊演算法,例如 MD5、SHA1、GOST 等。自PHP 7。0。0起,Mash擴充套件已完全整合到Hash擴充套件中。因此,不再可能使用extension_loaded()檢測 Mhash 支援;改用function_exists()。——with-openssl:開啟openssl的支援,加密傳輸時用到的,需要openssl庫——with-iconv:此模組包含了iconv字符集轉換功能的介面。使用此模組,可以將一個本地字符集表達的字串轉換成另一種字符集——with-bz2:用於透明地讀取和寫入 bzip2 (。bz2) 壓縮檔案——with-zlib:開啟zlib庫的支援,該模組使您能夠透過大多數檔案系統函式的版本透明地讀取和寫入gzip (。gz)壓縮檔案,這些檔案系統函式適用於gzip壓縮檔案(也包括未壓縮檔案,但不適用於套接字)——with-zip:開啟zip的支援,此擴充套件可以讓你透明地讀寫ZIP壓縮文件以及它們裡面的檔案——with-pear:安裝pear及pecl。PEAR是一個可重用的PHP元件的框架和分發系統。;PECL(PHP 擴充套件社群庫)是 PHP 擴充套件的儲存庫,提供所有已知擴充套件的目錄和用於下載和開發 PHP 擴充套件的託管設施——with-mysqli=mysqlnd:由PHP原始碼提供的mysql驅動連線程式碼,它的目的是代替舊的libmysql驅動——with-pdo-mysql=mysqlnd:由PHP原始碼提供的mysql驅動連線程式碼,它的目的是代替舊的libmysql驅動——enable-mysqlnd-compression-support:在 mysqlnd 中啟用對 MySQL 壓縮協議的支援——with-readline:實現訪問GNU Readline庫的介面。Debian/Ubuntu系統下需安裝libreadline-dev依賴包;Redhat/CentOS系統下需安裝readline、readline-devel依賴包。readline擴充套件並非執行緒安全的!因此,在任何真執行緒安全的SAPI(例如Apache的mod_winnt)中使用這個擴充套件是非常不推薦的!——with-libxml:某些核心擴充套件的依賴,如:DOM、libxml、SimpleXML、SOAP、WDDX、XSL、XML、XMLReader、XMLRPC和XMLWriter——with-xsl:該擴充套件實現了XSL標準,使用libxslt庫執行XSLT轉換——without-gdbm:禁用GNU 資料庫管理器

3.設定全域性的php命令

## 編輯/etc/profile檔案,新增環境變數

vi /etc/profile//在檔案最後新增如下內容######PHPPATH=$PATH:/usr/local/php8/bin

## 在當前終端生效環境變數

source /etc/profile

## 檢視PHP版本

php -v

CentOS7下編譯安裝PHP8.0.7

4.配置php-fpm.conf檔案

## 建立php-fpm。conf配置檔案

vi /usr/local/php8/etc/php-fpm。conf//輸入以下內容[global]pid = /usr/local/php8/var/run/php-fpm。piderror_log = /usr/local/php8/var/log/php-fpm。loglog_level = notice[www]listen = 127。0。0。1:9000listen。backlog = -1listen。allowed_clients = 127。0。0。1listen。owner = wwwlisten。group = wwwlisten。mode = 0666user = nginxgroup = nginxpm = dynamicpm。max_children = 20pm。start_servers = 10pm。min_spare_servers = 10pm。max_spare_servers = 15pm。max_requests = 100request_terminate_timeout = 50request_slowlog_timeout = 15slowlog = var/log/slow。log

注:①配置檔案中所有引數的設定可根據實際環境需求進行修改,此處配置僅供參考。pm.max_spare_servers選項的值要小於或等於pm.max_children選項的值;

②pm.max_requests:指的是每個子程序在處理了多少個請求數量之後就重啟。

5.配置服務管理指令碼

## 建立服務管理指令碼

vi /usr/lib/systemd/system/php-fpm。service//輸入以下內容[Unit]Description=The PHP FastCGI Process Manager Documentation=http://php-fpm。org/After=network。target remote-fs。target nss-lookup。target[Service]Type=forkingPIDFILE=/usr/local/php8/var/run/php-fpm。pidExecStart=/usr/local/php8/sbin/php-fpm -y /usr/local/php8/etc/php-fpm。conf -c /etc/php。iniExecRestart=/bin/kill -USR2 $MAINPIDExecReload=/bin/kill -USR2 $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user。target

注:指令碼中的 "-c /etc/php.ini" 引數是為了解決某些第三方擴充套件已安裝無法載入的問題,即在phpinfo頁面中檢視不到的情況。

## 新增執行許可權

chmod a+x /usr/lib/systemd/system/php-fpm。service

## 重新載入服務配置檔案

systemctl daemon-reload

6.配置php.ini檔案

注:本文中的引數配置僅供參考,實際使用環境中請根據需求進行修改。

## 建立php。ini配置檔案

cd /data/tools/php-8。0。7cp php。ini-production /etc/php。ini

## 基礎配置

sed -i ‘s/post_max_size = 8M/post_max_size = 20M/g’ /etc/php。inised -i ‘s/upload_max_filesize = 2M/upload_max_filesize = 20M/g’ /etc/php。inised -i ‘s/;date。timezone =/date。timezone = Asia\/Shanghai/g’ /etc/php。inised -i ‘s/short_open_tag = Off/short_open_tag = On/g’ /etc/php。inised -i ‘s/max_execution_time = 30/max_execution_time = 300/g’ /etc/php。inised -i ‘s/disable_functions =。*/disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g’ /etc/php。ini

## 開啟opcache 和 JIT

vi /etc/php。ini//在配置檔案中找到 [opcache]位置,新增如下引數配置:zend_extension=/usr/local/php8/lib/php/extensions/no-debug-non-zts-20200930/opcache。soopcache。enable=1opcache。enable_cli=1opcache。memory_consumption=256opcache。interned_strings_buffer=64opcache。max_accelerated_files=5000opcache。save_comments=1opcache。file_cache=/tmp;jit配置opcache。jit=1235opcache。jit_buffer_size=64M

CentOS7下編譯安裝PHP8.0.7

說明:JIT是在Opcache最佳化的基礎上結合Runtime資訊將位元組碼編譯為機器碼快取起來。現有的Opcache最佳化不受任何影響,並且PHP的JIT是在Opcache中提供的。JIT不是對Opcache替代,而是增強,在啟用JIT的情況下,如果Zend底層發現特定位元組碼已經編譯為機器碼,則可以繞過Zend VM直接讓CPU執行機器碼,從而提高程式碼效能。

## 確認opcache預設是否啟用成功

php -m | grep OPcache

CentOS7下編譯安裝PHP8.0.7

四、服務管理

啟動:systemctl start php-fpm。service關閉:systemctl stop php-fpm。service重啟:systemctl restart php-fpm。service檢視狀態:systemctl status php-fpm。service開機啟動:systemctl enable php-fpm。service關閉開機啟動:systemctl disable php-fpm。service