一、安裝依賴包。
[root@study?~]# yum -y install gcc gcc++ gcc-c++ wget make libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel bison autoconf
二、創(chuàng)建用戶組php-fpm,創(chuàng)建用戶 php-fpm?所屬組 php-fpm?設置不能登錄。
[root@study ~]#groupadd -r php-fpm && useradd -r -g php-fpm -s /sbin/nologin -d /usr/local/php?-M php-fpm
參數(shù)解釋:
>創(chuàng)建php用戶組(-r選項是創(chuàng)建一個系統(tǒng)用戶組的意思)?
> 添加新用戶
> -r: 添加系統(tǒng)用戶( 這里指將要被創(chuàng)建的系統(tǒng)用戶php )?
> -g: 指定要創(chuàng)建的用戶所屬組( 這里指添加到新系統(tǒng)用戶php到php系統(tǒng)用戶組 )?
> -s: 新帳戶的登錄shell( `/sbin/nologin` 這里設置為將要被創(chuàng)建系統(tǒng)用戶php不能用來登錄系統(tǒng) )?
> -d: 新帳戶的主目錄( 這里指定將要被創(chuàng)建的系統(tǒng)用戶php的家目錄為 `/usr/local/php` )?
> -M: 不要創(chuàng)建用戶的主目錄( 也就是說將要被創(chuàng)建的系統(tǒng)用戶php不會在 `/home` 目錄下創(chuàng)建 `php` 家目錄 ) ?
三、下載依賴安裝包
源碼包放在/usr/local/src 目錄。我的軟件安裝目錄統(tǒng)一指定在 /usr/local/'軟件名'(如:/usr/local/nginx、/usr/local/mysql)
1、?下載PHP語法分析器re2c?
[root@study src]#wget -c https://github.com/skvadrik/re2c/releases/download/0.16/re2c-0.16.tar.gz?
#進入解壓后的源碼目錄編譯并安裝
[root@study src]#tar -zxvf re2c-0.16.tar.gz
[root@study src]#?cd re2c-0.16
[root@study?re2c-0.16]# ./configure
[root@study??re2c-0.16]# make && make install
2、?加密支持擴展庫libmcrypt (使用php mcrypt 前必須先安裝Libmcrypt)
[root@study src]#?wget -c https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
#?進入解壓后的源碼目錄編譯并安裝
[root@study src]# tar -zxvf libmcrypt-2.5.8.tar.gz
[root@study src]#??cd libmcrypt-2.5.8
[root@?study libmcrypt-2.5.8]# ./configure?
[root@?study libmcrypt-2.5.8]# make && make install?
3、??加密方式擴展庫mhash
[root@study src]#?wget -c https://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
#?進入解壓后的源碼目錄編譯并安裝?
[root@?study src?]# tar -zxvf mhash-0.9.9.9.tar.gz
[root@study src]#?cd mhash-0.9.9.9
[root@?study?mhash-0.9.9.9]# ./configure
[root@?study mhash-0.9.9.9]# make && make install?
4、加密方式擴展庫mcrypt
[root@study src]#?wget -c https://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
#?進入解壓后的源碼目錄編譯并安裝??
[root@?study src?]#?tar -zxvfmcrypt-2.6.8.tar.gz?
[root@study src]#?cd mcrypt-2.6.8
#由于在編譯mcrypt時,會找不到libmcrypt的鏈接庫,導致無法編譯,因為Libmcrypt的鏈接庫在/usr/local/lib文件夾下> 所以,在編譯mcrypt時要加入LD_LIBRARY_PATH=/usr/local/lib導入間接庫
[root@?study?mcrypt-2.6.8]# ./configure LD_LIBRARY_PATH=/usr/local/lib
[root@?study?mcrypt-2.6.8]# make && make install??
四、下載php,編譯安裝
1、下載php、解壓
[root@study src]#?wget -c https://github.com/php/php-src/archive/php-7.1.20.tar.gz
[root@?study src?]#?tar -zxvf?php-7.1.20.tar.gz
[root@study src]#?cd?php-7.1.20
2、生成php源碼目錄下的配置文件?configure
[root@study php-7.1.20]#?./buildconf --force
3、正式編譯php7.1(如果使用此編譯選項列表, 請將?\?反斜線后面的注釋去除, 并且后面不能有空白字符)
[root@study php-7.1.20]#./configure \--prefix=/usr/local/php \ [php安裝的根目錄]--exec-prefix=/usr/local/php \ [php執(zhí)行文件所在目錄]--bindir=/usr/local/php/bin \ [php/bin目錄]--sbindir=/usr/local/php/sbin \ [php/sbin目錄]--includedir=/usr/local/php/include \ [php包含文件所在目錄]--libdir=/usr/local/php/lib/php \ [php/lib目錄]--mandir=/usr/local/php/php/man \ [php/man目錄]--with-config-file-path=/usr/local/php/etc \ [php的配置目錄]--with-mysql-sock=/var/run/mysql/mysql.sock \ [php的Unix socket通信文件]--with-mcrypt \ [是php里面重要的加密支持擴展庫,linux環(huán)境下該庫在默認情況下不開啟]--with-mhash \ [Mhash是基于離散數(shù)學原理的不可逆向的php加密方式擴展庫,其在默認情況下不開啟]--with-openssl \ [OpenSSL 是一個安全套接字層密碼庫]--with-mysqli=shared,mysqlnd \ [php依賴mysql庫]--with-pdo-mysql=shared,mysqlnd \ [php依賴mysql庫]--with-gd \ [gd庫] --with-iconv \ [關(guān)閉iconv函數(shù),種字符集間的轉(zhuǎn)換] --with-zlib \ [zlib是提供數(shù)據(jù)壓縮用的函式庫]--enable-zip \ [打開對zip的支持]--enable-inline-optimization \ [優(yōu)化線程]--disable-debug \ [關(guān)閉調(diào)試模式]--disable-rpath \ [關(guān)閉額外的運行庫文件]--enable-shared \ [啟用動態(tài)庫]--enable-xml \ [開啟xml擴展]--enable-bcmath \ [打開圖片大小調(diào)整,用到zabbix監(jiān)控的時候用到了這個模塊]--enable-shmop \ [共享內(nèi)存]--enable-sysvsem \ [內(nèi)存共享方案]--enable-mbregex \ [開啟多字節(jié)正則表達式的字符編碼。]--enable-mbstring \ [開啟多字節(jié)字符串函數(shù)]--enable-ftp \ [開啟ftp]--enable-gd-native-ttf \ [開啟gd庫原有字體]--enable-pcntl \ [PHP的進程控制支持實現(xiàn)了Unix方式的多進程創(chuàng)建] --enable-sockets \ [開啟套節(jié)字]--with-xmlrpc \ [打開xml-rpc的c語言]--enable-soap \ [開啟簡單對象訪問協(xié)議簡單對象訪問協(xié)議]--without-pear \ [開啟php擴展與應用庫]--with-gettext \ [開戶php在當前域中查找消息]--enable-session \ [允許php會話session]--with-curl \ [允許curl擴展]--with-jpeg-dir \ [指定jpeg安裝目錄yum安裝過后不用再次指定會自動找到]--with-freetype-dir \ [指定freetype安裝目錄yum安裝過后不用再次指定會自動找到]--enable-opcache \ [開啟使用opcache緩存]--enable-fpm \ [開啟fpm]--with-fpm-user=nginx \ [php-fpm的用戶]--with-fpm-group=nginx \ [php-fpm的用戶組]--without-gdbm \ [數(shù)據(jù)庫函數(shù)使用可擴展散列和類似于標準UNIX dbm的工作]--enable-fast-install \ [為快速安裝優(yōu)化]--disable-fileinfo
4、可能會出現(xiàn)要求開啟?--enable-opcache=on?的錯誤提示
configure: error: Don't know how to define struct flock on this system, set --enable-opcache=no
解決辦法,編輯/etc/ld.so.conf
加入/usr/local/lib
執(zhí)行l(wèi)dconfig,使其重新加載一次
5、如果沒有錯誤。
[root@study php-7.1.20]#make && make install
沒有錯誤,則表示編譯安裝完成。
可以查看php版本
[root@study php-7.1.20]#/usr/local/php/bin/php -v
五、配置php
1、修改php配置文件之-》添加php配置文件。將php源碼編譯目錄下的 `php.ini-production` 拷貝到php安裝目錄下的 `etc` 目錄下
[root@study php-7.1.20]# cp php.ini-production /usr/local/php/etc/php.ini
2、修改php配置文件之-》
[root@?study? php-7.1.20]#?vim /usr/local/php/etc/php.ini
a、修改php擴展目錄所在位置 ,找到 `extension_dir` 修改擴展目錄位置如下:
extension_dir = "../lib/php/extensions/no-debug-non-zts-20160303/" ?# `相對路徑`
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/" ?#`絕對路徑
b、修改時區(qū),找到 `timezone` 修改時區(qū)如下:
date.timezone = PRC?
c、開啟OPcache,開啟OPcache
文件的最后一行(shift+G), 輸入以下內(nèi)容:zend_extension=opcache.so;
d、開啟?mysqli?擴展
; For UNIX OS open mysqli extension ?
extension=mysqli.so?
extension=pdo_mysql.so ?
六、配置php-fpm
1、添加?php-fpm?管理相關(guān)的配置文件到系統(tǒng)配置目錄?/etc/init.d
將php源碼編譯目錄下的 `sapi/fpm/init.d.php-fpm` 文件拷貝到系統(tǒng)配置 `/etc/init.d` 目錄下并重命名為 `php-fpm`
[root@?study php-7.1.20]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
2、添加?php-fpm?配置文件
將php安裝目錄下的 `/usr/local/php/etc/php-fpm.conf.default` 文件拷貝同目錄下并重命名為 `php-fpm.conf`
[root@?study php-7.1.20]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
3、添加?www.conf?配置文件
將php安裝目錄下的 `/usr/local/php/etc/php-fpm.d/www.conf.default` 文件拷貝同目錄下并重命名為 `www.conf`
[root@study php-7.1.20]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
七、添加php安裝目錄到系統(tǒng)環(huán)境變量
創(chuàng)建并打開文件php.sh?
[root@study php-7.1.20]# vim /etc/profile.d/php.sh
添加內(nèi)容如下:export PATH=$PATH:/usr/local/php/bin/:/usr/local/php/sbin/
保存并退出
[root@?study? php-7.1.20]# wq!
使用source立即生效剛剛添加的php環(huán)境變量
[root@?study??php-src-php-7.1.20]#source /etc/profile.d/php.sh
八、設置PHP日志目錄和php-fpm運行進程的ID文件目錄
1、 添加系統(tǒng)用戶組nginx (如果你沒有創(chuàng)建過系統(tǒng)用戶組nginx請創(chuàng)建)
[root@study? php-7.1.20]# groupadd -r nginx
2、 創(chuàng)建新的系統(tǒng)用戶nginx, 并添加到系統(tǒng)用戶組nginx, 設置不允許此用戶名登錄shell (如果你沒有創(chuàng)建過系統(tǒng)用戶nginx請創(chuàng)建)
[root@study? php-7.1.20]# useradd -r -g nginx -s /sbin/nologin -d /usr/local/nginx -M nginx
3、 創(chuàng)建 `php-fpm` 日志目錄
[root@study?php-7.1.20]# mkdir -p /var/log/php-fpm/
4、 創(chuàng)建 `php-fpm` 進程的ID(php-fpm.sock)文件運行目錄
[root@study?php-7.1.20]# mkdir -p /var/run/php-fpm
5、 修改 `php-fpm` 進程的ID(php-fpm.sock)文件運行目錄的所屬用戶和組
[root@study?php-7.1.20]# chown -R nginx:nginx /var/run/php-fpm/
九、修改session的目錄配置
1、創(chuàng)建 `session` 存放目錄
[root@study php-7.1.20]# mkdir -p /var/lib/php/session
2、修改 `session` 存放目錄的所屬用戶和組
[root@study?php-7.1.20]# chown -R nginx:nginx /var/lib/php
3、再次修改 `php.ini` 文件
[root@study php-7.1.20]# vim /usr/local/php/etc/php.ini
修改session.save_path = "/var/lib/php/session"
十、php-fpm加入啟動服務,設置開機啟動
[root@study?php-7.1.20]#cp ./sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@study?php-7.1.20]#systemctl enable php-fpm
systemctl start php-fpm #啟動php-fpm
systemctl status php-fpm #查看php-fpm狀態(tài)
十一、修改nginx配置文件使之使用nginx反向php解釋器
修改nginx.conf配置文件,?/usr/local/nginx/conf/nginx.conf
# nginx運行的用戶名
user nginx;
# nginx啟動進程,通常設置成和cpu的數(shù)量相等,這里為自動
worker_processes 1;
# errorlog文件位置
error_log /usr/local/nginx/logs/error.log;
# pid文件地址,記錄了nginx的pid,方便進程管理
pid /usr/local/nginx/logs/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
# 用來加載其他動態(tài)模塊的配置(暫時不清楚)
# include /usr/share/nginx/modules/*.conf;
# 工作模式和連接數(shù)上限
events {
? ? # 每個worker_processes的最大并發(fā)鏈接數(shù)
? ? # 并發(fā)總數(shù):worker_processes*worker_connections
? ? worker_connections 1024;
}
# 與提供http服務相關(guān)的一些配置參數(shù)類似的還有mail
http {
? ? # 設置日志的格式
? ? log_format? main? '$remote_addr - $remote_user [$time_local] "$request" '
? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '
? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';
? ? # access_log記錄訪問的用戶、頁面、瀏覽器、ip和其他的訪問信息
? ? access_log /usr/local/nginx/logs/access.log? main;
? ? # 這部分下面會單獨解釋
? ? # 設置nginx是否使用sendfile函數(shù)輸出文件
? ? sendfile? ? ? ? ? ? on;
? ? # 數(shù)據(jù)包最大時發(fā)包(使用Nagle算法)
? ? tcp_nopush? ? ? ? ? on;
? ? # 立刻發(fā)送數(shù)據(jù)包(禁用Nagle算法)
? ? tcp_nodelay? ? ? ? on;
? ? # 鏈接超時時間
? ? keepalive_timeout? 60;
? ? # 這個我也不清楚...
? ? #types_hash_max_size 2048;
? ? # 引入文件擴展名與文件類型映射表
? ? include? ? ? ? ? ? /usr/local/nginx/conf/mime.types;
? ? # 默認文件類型
? ? default_type? ? ? ? application/octet-stream;
? ? # Load modular configuration files from the /etc/nginx/conf.d directory.
? ? # See http://nginx.org/en/docs/ngx_core_module.html#include
? ? # for more information.
? ? include /usr/local/nginx/conf/vhost/*.conf;
}