MENU

centos6.8编译安装php7

2017 年 02 月 20 日 • 应用服务器

本站php一直在使用5.6版本的,现在看来版本貌似有点低了,并且在网上看php7的速度是5.6的两倍,而且内存使用也降低了,好东西啊,然后就想搞个php7出来玩玩。然后再本地的测试环境搞出了一套,测试了一下,看上去是没什么问题,然后准备在正式环境上搞了,先说一下我的服务器目前的环境吧,centos6.8,nginx版本1.10.3,mysql5.6,php5.6。现在把php升级到7,开工。

准备工作

[root@rj-bai ~]# mv /usr/local/php/ /usr/local/php5.6        #备份旧版本

文件夹虽然是剪切了,但是剪切之后php的服务还在正常运行的,不要去动它的任何进程。

编译安装

[root@rj-bai src]# wget -O php7.tar.gz http://cn2.php.net/get/php-7.0.4.tar.gz/from/this/mirror   #下载php7
[root@rj-bai src]# tar zxf php7.tar.gz  #解压
[root@rj-bai src]# cd php-7.0.4/
[root@rj-bai php-7.0.4]# yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel 
libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel   #安装依赖包
[root@rj-bai php-7.0.4]# ./configure \
 --prefix=/usr/local/php \
 --with-config-file-path=/etc \
 --enable-fpm \
 --with-fpm-user=www  \        #别照搬,你nginx运行用户是什么就写什么
 --with-fpm-group=www \        #组也要和nginx一致
 --enable-inline-optimization \
 --disable-debug \
 --disable-rpath \
 --enable-shared  \
 --enable-soap \
 --with-libxml-dir \
 --with-xmlrpc \
 --with-openssl \
 --with-mcrypt \
 --with-mhash \
 --with-pcre-regex \
 --with-sqlite3 \
 --with-zlib \
 --enable-bcmath \
 --with-iconv \
 --with-bz2 \
 --enable-calendar \
 --with-curl \
 --with-cdb \
 --enable-dom \
 --enable-exif \
 --enable-fileinfo \
 --enable-filter \
 --with-pcre-dir \
 --enable-ftp \
 --with-gd \
 --with-openssl-dir \
 --with-jpeg-dir \
 --with-png-dir \
 --with-zlib-dir  \
 --with-freetype-dir \
 --enable-gd-native-ttf \
 --enable-gd-jis-conv \
 --with-gettext \
 --with-gmp \
 --with-mhash \
 --enable-json \
 --enable-mbstring \
 --enable-mbregex \
 --enable-mbregex-backtrack \
 --with-libmbfl \
 --with-onig \
 --enable-pdo \
 --with-mysqli=mysqlnd \
 --with-pdo-mysql=mysqlnd \
 --with-zlib-dir \
 --with-pdo-sqlite \
 --with-readline \
 --enable-session \
 --enable-shmop \
 --enable-simplexml \
 --enable-sockets  \
 --enable-sysvmsg \
 --enable-sysvsem \
 --enable-sysvshm \
 --enable-wddx \
 --with-libxml-dir \
 --with-xsl \
 --enable-zip \
 --enable-mysqlnd-compression-support \
 --with-pear \
 --enable-opcache
[root@rj-bai php-7.0.4]# make && make install

配置阶段

配置php-fpm
[root@rj-bai php-7.0.4]# rm -rf /etc/php.ini
[root@rj-bai php-7.0.4]# rm -rf /etc/php-fpm.conf            #删除软连接
[root@rj-bai php-7.0.4]# cp php.ini-production /etc/php.ini
[root@rj-bai php-7.0.4]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@rj-bai php-7.0.4]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf # 复制配置文件
[root@rj-bai php-7.0.4]# \cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@rj-bai php-7.0.4]# chmod +x /etc/init.d/php-fpm
启动php-fpm
[root@rj-bai php-7.0.4]# kill -9 `ps aux | grep php | grep -v grep | awk {'print $2'}`&& /etc/init.d/php-fpm start
Starting php-fpm  done

使用sock方式连接php
[root@rj-bai ~]# vim /usr/local/php/etc/php-fpm.d/www.conf     #修改配置文件 
;listen = 127.0.0.1:9000                                     #注释TCP连接
listen = /dev/shm/php-fpm.sock                               #使用socket
nginx配置
        location ~ .*\.php(\/.*)*$ {
            include fastcgi.conf;
#           fastcgi_pass  127.0.0.1:9000;              #注释TCP
            fastcgi_pass  unix:/dev/shm/php-fpm.sock;            #使用socket方式连接
        }
[root@rj-bai ~]# nginx -s reload
[root@rj-bai ~]# /etc/init.d/php-fpm restart
可能会出现的问题

修改php使用socket方式连接之后,可能会出现502 Bad Gateway的情况,原因解释一下,我的nginx及PHP配置文件运行用户写的都为www,启动服务我是以root身份启动的,而启动之后nginx和PHP会有两种进程,分别是master进程(管理进程),及worker进程(工作进程),master也就是用来管理worker进程的,服务启动后会创建管理进程,因为我启动服务的用户是root,所以进程的运行属主就是root,master进程会创建worker进程,这个时候master进程创建的worker进程运行用户就是www了,因为创建socket文件也是master进程做的事情,所以生成的文件也就是root了,www用户没有权限去访问这个文件,所以出现502的情况。

解决办法,不嫌麻烦你就每次重启完了手动去改,或是在PHP的启动脚本里面简单的加上几条命令也能解决这个问题。

if [ -S /dev/shm/php-fpm.sock ] ;
  then
   chown www.www /dev/shm/php-fpm.sock
fi
最后编辑于: 2018 年 12 月 10 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码