CentOS 7 Linux 安裝PHP7.2.12 - 編譯安裝

CentOS 7 Linux 安裝PHP7.2 - 編譯安裝

1 安裝擴展包並更新系統內核

[root@iz28snxdn5mz ~]# yum install epel-release -y
[root@iz28snxdn5mz ~]# yum update

2 YUM安裝PHP依賴組件(包含Nginx依賴):

[root@iz28snxdn5mz ~]# yum -y install php-mcrypt libmcrypt-devel libxml2 libxml2-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libxslt libxslt-devel cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib m4 autoconf gcc gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel wget net-tools zip

yum -y install php-mcrypt libmcrypt-devel libxml2 libxml2-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libxslt libxslt-devel cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib m4 autoconf gcc gcc-c++ openssl openssl-devel pcre pcre-devel zlib zlib-devel wget net-tools zip

3 編譯安裝配置PHP

3.1 下載應用軟件包

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

php-7.2.12.tar.gz (sig) [19,201Kb] 08 Nov 2018
sha256: d7cabdf4e51db38121daf0d494dc074743b24b6c79e592037eeedd731f1719dd

3.2 解壓應用軟件包

[root@iz28snxdn5mz ~]# tar -xvf php-7.2.12.tar.gz

3.3 編譯

[root@iz28snxdn5mz php7.2-src]# ./configure --prefix=/opt/php/php7.2 \
--with-config-file-path=/opt/php/php7.2/etc \
--with-curl \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-openssl \
--with-pcre-regex \
--with-pdo-sqlite \
--with-pear \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-zip \
--enable-static \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--disable-debug \
--disable-fileinfo 

3.4 安裝

[root@iz28snxdn5mz php7.2-src]# make clean && make -j 4 && make install

3.5 版本

[root@iz28snxdn5mz bin]# ./php -v
PHP 7.2.12 (cli) (built: Nov 14 2018 18:38:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
[root@iz28snxdn5mz bin]# pwd
/opt/php/php7.2/bin

3.6 php.ini

[root@iz28snxdn5mz etc]# pwd
/opt/php/php7.2/etc
[root@iz28snxdn5mz etc]# find / -name php.ini-production
/opt/php/php7.2.12-src/php.ini-production
[root@iz28snxdn5mz etc]# cp /opt/php/php7.2.12-src/php.ini-production php.ini
[root@iz28snxdn5mz etc]# ls
pear.conf  php-fpm.conf  php-fpm.conf.default  php-fpm.d  php.ini
[root@iz28snxdn5mz etc]#

3.7 php-fpm

[root@iz28snxdn5mz etc]# pwd
/opt/php/php7.2/etc
[root@iz28snxdn5mz etc]# cp php-fpm.conf.default php-fpm.conf
[root@iz28snxdn5mz etc]# ll
total 24
-rw-r--r-- 1 root root 1240 Apr  3 10:56 pear.conf
-rw-r--r-- 1 root root 4468 Apr  3 11:17 php-fpm.conf
-rw-r--r-- 1 root root 4468 Apr  3 10:55 php-fpm.conf.default
drwxr-xr-x 2 root root 4096 Apr  3 10:55 php-fpm.d
[root@iz28snxdn5mz etc]#

3.8 www.conf

[root@iz28snxdn5mz php-fpm.d]# pwd
/opt/php/php7.2/etc/php-fpm.d
[root@iz28snxdn5mz php-fpm.d]# cp www.conf.default www.conf
[root@iz28snxdn5mz php-fpm.d]# ls
www.conf  www.conf.default

3.9 php-fpm.service

[root@iz28snxdn5mz system]# pwd
/usr/lib/systemd/system
[root@iz28snxdn5mz system]# find / -name php-fpm.service
/opt/php/php-7.2.12.src/sapi/fpm/php-fpm.service
[root@iz28snxdn5mz system]# pwd
/usr/lib/systemd/system
[root@iz28snxdn5mz systemd]# cp /opt/php/php-7.2.12.src/sapi/fpm/php-fpm.service php-fpm.service
[root@iz28snxdn5mz systemd]# ls php*
php-fpm.service

3.10 啓動PHP

[root@iz28snxdn5mz system]# service php-fpm start
Redirecting to /bin/systemctl start php-fpm.service
[root@iz28snxdn5mz system]# ps -ef | grep php
root     23696     1  0 22:40 ?        00:00:00 php-fpm: master process (/opt/php/php7.2/etc/php-fpm.conf)
nobody   23697 23696  0 22:40 ?        00:00:00 php-fpm: pool www
nobody   23698 23696  0 22:40 ?        00:00:00 php-fpm: pool www

4 配置文件

4.1 php.ini參數

[root@iz28snxdn5mz etc]# vim /opt/php/php7.2/etc/php.ini
php.ini 默認值 描述
expose_php = Off 默認值:On 禁用將expose_php,防止Web服務器簽名,防止在http頭裏暴露X-Powered-By:PHP/7.2這樣的敏感信息。
short_open_tag = Off 默認值:On 啓用php短標籤,<?php?> 這是正常的寫法,<??>爲短標籤。
max_execution_time = 120 默認值:30 PHP程序處理請求的最大時間,單位“秒” 。
max_input_time = 60 默認值:60 此變量可以以“秒”爲單位對通過POST、GET以及PUT方式接收數據時間進行限制。
memory_limit = 128M 默認值:128M 允許使用內存的最大值限制。設置腳本可以分配的最大內存量,防止失控的腳本獨佔服務器內存。
file_uploads = On 默認值:On 確定服務器上的PHP腳本是否可以接受HTTP文件上傳
post_max_size = 8M 默認值:8M 限制通過POST方法可以接受的信息最大量
upload_max_filesize = 8M 默認值:2M 限制PHP處理上傳文件的最大值,此值必須小於post_max_size值
date.timezone = Asia/Shanghai 默認值: 設置PHP執行的默認時間的時區規則。
mbstring.func_overload=2 默認值:0 常用的substr()會被自動替換爲 mb_substr()。
0:代表不重載任何函數(默認值);
1:代表重載mail()函數;
2:代表重載str系列字符串處理函數;
4:代表重載ereg系列正則處理函數;
7:代表重載所有以上提及的函數。

4.2 www.conf參數

取消以下注釋並修改優化其參數:

pm = dynamic
pm.max_children = 180
pm.start_servers = 50
pm.min_spare_servers = 50
pm.max_spare_servers = 180
request_terminate_timeout = 120
request_slowlog_timeout = 50
slowlog = var/log/slow.log

; fpm監聽端口
; 即nginx中php處理的地址,一般默認值即可。
; 可用格式爲: ‘ip:port’, ‘port’, ‘/path/to/unix/socket’. 每個進程池都需要設置.
listen = 127.0.0.1:9000

; backlog數,-1表示無限制,由操作系統決定。
; 此行註釋掉就行。
;listen.backlog = -1

; 允許訪問FastCGI進程的IP,設置any爲不限制IP(默認值是any)。
; 如果要設置其他主機的nginx也能訪問這臺FPM進程,listen處要設置成本地可被訪問的IP。
; 每個地址是用逗號分隔. 如果沒有設置或者爲空,則允許任何服務器請求連接。
listen.allowed_clients = 127.0.0.1

; 啓動進程的帳戶和組
user = nginx
group = nginx

; unix socket設置選項,如果使用tcp方式訪問,這裏註釋即可。
;listen.owner = www
;listen.group = www
;listen.mode = 0666

; 允許訪問FastCGI進程的IP,設置any爲不限制IP(默認值是any); 如果要設置其他主機的nginx也能訪問這臺FPM進程,listen處要設置成本地可被訪問的IP。
; 每個地址是用逗號分隔. 如果沒有設置或者爲空,則允許任何服務器請求連接。
pm = dynamic

; 子進程最大數
pm.max_children = 8

; 啓動時的進程數(Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2)
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
pm.start_servers = 4

; 前提是pm = dynamic
; 保證空閒進程數最小值,如果空閒進程小於此值,則創建新的子進程。
pm.min_spare_servers = 4

; 保證空閒進程數最大值,如果空閒進程大於此值,此進行清理。
; 前提是pm = dynamic
pm.max_spare_servers = 4

; 設置每個子進程重生之前服務的請求數.
; 對於可能存在內存泄漏的第三方模塊來說是非常有用的.
; 如果設置爲 '0' 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變量. 默認值: 0.
pm.max_requests = 500

; FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none. munin監控會使用到
; Default Value: not set
;pm.status_path = /status

; FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/); Default Value: not set
;ping.path = /ping

; 用於定義ping請求的返回相應. 返回爲 HTTP 200 的 text/plain 格式文本. 默認值: pong.
; Default Value: pong
;ping.response = pong

; 設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的'max_execution_time'因爲某些特殊原因沒有中止運行的腳本有用. 
; 設置爲 '0' 表示 'Off'.當經常出現502錯誤時可以嘗試更改此選項。
; Default Value: 0
request_terminate_timeout = 180

; 當一個請求該設置的超時時間後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中. 
; 設置爲 '0' 表示 'Off'
; Default Value: 0
;request_slowlog_timeout = 10

; 慢請求的記錄日誌,配合request_slowlog_timeout使用
;slowlog = log/$pool.log.slow

; 設置文件打開描述符的rlimit限制. 
; 默認值: 系統定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
; Default Value: system defined value
;rlimit_files = 1024

; 設置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整數. 默認值: 系統定義值.
; Default Value: system defined value
;rlimit_core = 0

; 啓動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.
; Default Value: not set
;chroot =

; 設置啓動目錄,啓動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)
;chdir = /var/www

; 重定向運行過程中的stdout和stderr到主要的錯誤日誌文件中. 如果沒有設置, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: 空.
; Default Value: no
;catch_workers_output = yes

4.3 php-fpm.conf參數

; pid設置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啓。
pid = /opt/php/php7.2/var/run/php-fpm.pid

; 錯誤日誌,默認在安裝目錄中的var/log/php-fpm.log
error_log = log/php-fpm.log

; 錯誤級別. 可用級別爲: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.
log_level = notice

; 表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi進程數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啓。這兩個選項一般保持默認值。
emergency_restart_threshold = 60
emergency_restart_interval = 60s

; 後臺執行fpm,默認值爲yes,如果爲了調試可以改爲no。在FPM中,可以使用不同的設置來運行多個進程池。 這些設置可以針對每個進程池單獨設置。
daemonize = yes

5 至此php7已經安裝完成

說明:禁用php函數,如果程序需要這些函數,可以取消禁止,新手建議忽略此步驟。
/usr/lib/systemd/system/php-fpm.service文件是CentOS 7.4中系統服務配置方式非常好用,上面我們已經配置完成了,感興趣的可以看一下該文件具體配置信息。

[root@web system]# more php-fpm.service 
# It's not recommended to modify this file in-place, because it
# will be overwritten during upgrades.  If you want to customize,
# the best way is to use the "systemctl edit" command.

[Unit]
Description=The PHP FastCGI Process Manager(v 7.2.12)
After=network.target

[Service]
Type=simple
PIDFile=/opt/php/php7.2/var/run/php-fpm.pid
ExecStart=/opt/php/php7.2/sbin/php-fpm --nodaemonize --fpm-config /opt/php/php7.2/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

5.1 啓動php-fpm服務並加入開機自啓動

$ systemctl enable php-fpm.service
$ systemctl restart php-fpm.service

PHP整個安裝過程已經完成。如果你是按照本文安裝未成功的,希望你能留言說明錯誤原因,我將無償協助你配置。

如果你有好的建議完善該文章,非常歡迎你提出和改進,我們一起共同學習和進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章