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

二、创建用户组php-fpm,创建用户 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

参数解释:

>创建php用户组(-r选项是创建一个系统用户组的意思) 

> 添加新用户

> -r: 添加系统用户( 这里指将要被创建的系统用户php ) 

> -g: 指定要创建的用户所属组( 这里指添加到新系统用户php到php系统用户组 ) 

> -s: 新帐户的登录shell( `/sbin/nologin` 这里设置为将要被创建系统用户php不能用来登录系统 ) 

> -d: 新帐户的主目录( 这里指定将要被创建的系统用户php的家目录为 `/usr/local/php` ) 

> -M: 不要创建用户的主目录( 也就是说将要被创建的系统用户php不会在 `/home` 目录下创建 `php` 家目录 )  

三、下载依赖安装包

源码包放在/usr/local/src 目录。我的软件安装目录统一指定在 /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执行文件所在目录]--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环境下该库在默认情况下不开启]--with-mhash \ [Mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启]--with-openssl \ [OpenSSL 是一个安全套接字层密码库]--with-mysqli=shared,mysqlnd \ [php依赖mysql库]--with-pdo-mysql=shared,mysqlnd \ [php依赖mysql库]--with-gd \ [gd库] --with-iconv \ [关闭iconv函数,种字符集间的转换] --with-zlib \ [zlib是提供数据压缩用的函式库]--enable-zip \ [打开对zip的支持]--enable-inline-optimization \ [优化线程]--disable-debug \ [关闭调试模式]--disable-rpath \ [关闭额外的运行库文件]--enable-shared \ [启用动态库]--enable-xml \ [开启xml扩展]--enable-bcmath \ [打开图片大小调整,用到zabbix监控的时候用到了这个模块]--enable-shmop \ [共享内存]--enable-sysvsem \ [内存共享方案]--enable-mbregex \ [开启多字节正则表达式的字符编码。]--enable-mbstring \ [开启多字节字符串函数]--enable-ftp \ [开启ftp]--enable-gd-native-ttf \ [开启gd库原有字体]--enable-pcntl \ [PHP的进程控制支持实现了Unix方式的多进程创建] --enable-sockets \ [开启套节字]--with-xmlrpc \ [打开xml-rpc的c语言]--enable-soap \ [开启简单对象访问协议简单对象访问协议]--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 \ [数据库函数使用可扩展散列和类似于标准UNIX dbm的工作]--enable-fast-install \ [为快速安装优化]--disable-fileinfo

4、可能会出现要求开启 --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

执行ldconfig,使其重新加载一次

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、修改时区,找到 `timezone` 修改时区如下:

date.timezone = PRC 

c、开启OPcache,开启OPcache

文件的最后一行(shift+G), 输入以下内容:zend_extension=opcache.so;

d、开启 mysqli 扩展

; For UNIX OS open mysqli extension  

extension=mysqli.so 

extension=pdo_mysql.so  

六、配置php-fpm

1、添加 php-fpm 管理相关的配置文件到系统配置目录 /etc/init.d

将php源码编译目录下的 `sapi/fpm/init.d.php-fpm` 文件拷贝到系统配置 `/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安装目录到系统环境变量

创建并打开文件php.sh 

[root@study php-7.1.20]# vim /etc/profile.d/php.sh

添加内容如下:export PATH=$PATH:/usr/local/php/bin/:/usr/local/php/sbin/

保存并退出

[root@ study  php-7.1.20]# wq!

使用source立即生效刚刚添加的php环境变量

[root@ study  php-src-php-7.1.20]#source /etc/profile.d/php.sh

八、设置PHP日志目录和php-fpm运行进程的ID文件目录

1、 添加系统用户组nginx (如果你没有创建过系统用户组nginx请创建)

[root@study  php-7.1.20]# groupadd -r nginx

2、 创建新的系统用户nginx, 并添加到系统用户组nginx, 设置不允许此用户名登录shell (如果你没有创建过系统用户nginx请创建)

[root@study  php-7.1.20]# useradd -r -g nginx -s /sbin/nologin -d /usr/local/nginx -M nginx

3、 创建 `php-fpm` 日志目录

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

4、 创建 `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、创建 `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状态

十一、修改nginx配置文件使之使用nginx反向php解释器

修改nginx.conf配置文件, /usr/local/nginx/conf/nginx.conf

# nginx运行的用户名

user nginx;

# nginx启动进程,通常设置成和cpu的数量相等,这里为自动

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.

# 用来加载其他动态模块的配置(暂时不清楚)

# include /usr/share/nginx/modules/*.conf;

# 工作模式和连接数上限

events {

    # 每个worker_processes的最大并发链接数

    # 并发总数:worker_processes*worker_connections

    worker_connections 1024;

}

# 与提供http服务相关的一些配置参数类似的还有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函数输出文件

    sendfile            on;

    # 数据包最大时发包(使用Nagle算法)

    tcp_nopush          on;

    # 立刻发送数据包(禁用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;

}

你可能感兴趣的:(centos7编译安装php7.1)