centos7編譯安裝php7.1

一、安裝依賴包。

[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?設(shè)置不能登錄。

[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` 這里設(shè)置為將要被創(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?

#進(jìn)入解壓后的源碼目錄編譯并安裝

[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、?加密支持?jǐn)U展庫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

#?進(jìn)入解壓后的源碼目錄編譯并安裝

[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、??加密方式擴(kuò)展庫mhash

[root@study src]#?wget -c https://downloads.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz

#?進(jìn)入解壓后的源碼目錄編譯并安裝?

[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、加密方式擴(kuò)展庫mcrypt

[root@study src]#?wget -c https://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz

#?進(jìn)入解壓后的源碼目錄編譯并安裝??

[root@?study src?]#?tar -zxvfmcrypt-2.6.8.tar.gz?

[root@study src]#?cd mcrypt-2.6.8

#由于在編譯mcrypt時,會找不到libmcrypt的鏈接庫,導(dǎo)致無法編譯,因為Libmcrypt的鏈接庫在/usr/local/lib文件夾下> 所以,在編譯mcrypt時要加入LD_LIBRARY_PATH=/usr/local/lib導(dǎo)入間接庫

[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里面重要的加密支持?jǐn)U展庫,linux環(huán)境下該庫在默認(rèn)情況下不開啟]--with-mhash \ [Mhash是基于離散數(shù)學(xué)原理的不可逆向的php加密方式擴(kuò)展庫,其在默認(rèn)情況下不開啟]--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)閉額外的運(yùn)行庫文件]--enable-shared \ [啟用動態(tài)庫]--enable-xml \ [開啟xml擴(kuò)展]--enable-bcmath \ [打開圖片大小調(diào)整,用到zabbix監(jiān)控的時候用到了這個模塊]--enable-shmop \ [共享內(nèi)存]--enable-sysvsem \ [內(nèi)存共享方案]--enable-mbregex \ [開啟多字節(jié)正則表達(dá)式的字符編碼。]--enable-mbstring \ [開啟多字節(jié)字符串函數(shù)]--enable-ftp \ [開啟ftp]--enable-gd-native-ttf \ [開啟gd庫原有字體]--enable-pcntl \ [PHP的進(jìn)程控制支持實現(xiàn)了Unix方式的多進(jìn)程創(chuàng)建] --enable-sockets \ [開啟套節(jié)字]--with-xmlrpc \ [打開xml-rpc的c語言]--enable-soap \ [開啟簡單對象訪問協(xié)議簡單對象訪問協(xié)議]--without-pear \ [開啟php擴(kuò)展與應(yīng)用庫]--with-gettext \ [開戶php在當(dāng)前域中查找消息]--enable-session \ [允許php會話session]--with-curl \ [允許curl擴(kuò)展]--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ù)使用可擴(kuò)展散列和類似于標(biāo)準(zhǔn)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擴(kuò)展目錄所在位置 ,找到 `extension_dir` 修改擴(kuò)展目錄位置如下:

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?擴(kuò)展

; 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

八、設(shè)置PHP日志目錄和php-fpm運(yùn)行進(jìn)程的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, 設(shè)置不允許此用戶名登錄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` 進(jìn)程的ID(php-fpm.sock)文件運(yùn)行目錄

[root@study?php-7.1.20]# mkdir -p /var/run/php-fpm

5、 修改 `php-fpm` 進(jìn)程的ID(php-fpm.sock)文件運(yùn)行目錄的所屬用戶和組

[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加入啟動服務(wù),設(shè)置開機(jī)啟動

[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運(yùn)行的用戶名

user nginx;

# nginx啟動進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等,這里為自動

worker_processes 1;

# errorlog文件位置

error_log /usr/local/nginx/logs/error.log;

# pid文件地址,記錄了nginx的pid,方便進(jìn)程管理

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服務(wù)相關(guān)的一些配置參數(shù)類似的還有mail

http {

? ? # 設(shè)置日志的格式

? ? 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;

? ? # 這部分下面會單獨解釋

? ? # 設(shè)置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;

? ? # 引入文件擴(kuò)展名與文件類型映射表

? ? include? ? ? ? ? ? /usr/local/nginx/conf/mime.types;

? ? # 默認(rèn)文件類型

? ? 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;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容