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整個安裝過程已經完成。如果你是按照本文安裝未成功的,希望你能留言說明錯誤原因,我將無償協助你配置。
如果你有好的建議完善該文章,非常歡迎你提出和改進,我們一起共同學習和進步。