经过性能评测,能够看出PHP7对性能进行了较大的优化,相比与PHP5.x
有50%-150%
的性能提高,所以,为了提高咱们服务的响应速度,下降机器负载,须要进行版本升级。php
由于对二进制比较熟悉,因此没有用yum
的方式进行安装,采用的二进制安装方式比较灵活,可是由于第一次安装PHP
的高版本,也引入了不少的问题,总而言之,就是在错误中不断摸索错误,最终找到一个还能用的道路。html
PHP7.2
官方下载地址:nginx
wget http://cn2.php.net/get/php-7.2.13.tar.bz2/from/this/mirror -O php-7.2.13.tar.bz2 tar -xjvf php-7.2.13.tar.bz2 // 用于后面编译的生成代码目录 mkdir php7 cd php-7.2.13
PHP
PHP
编译前提供了大量的参数进行配置,包括支持的扩展、执行用户等,能够查看参数列表。web
咱们进行最简单的配置,只支持php-fpm
管理,由于咱们的PHP
是配合Ngnix
来进行服务,所以还要指定执行的用户:php7
./configure --prefix=/home/work/lnmp/php7 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx
个人第一次编译报错:
configure: error: OpenSSL version 1.0.1 or greater required.
解决这个问题,须要首先看本身的openssl
的版本信息:less
$ openssl version OpenSSL 1.0.0-fips 29 Mar 2010
所以更新openssl
版本:socket
wget https://www.openssl.org/source/openssl-1.1.0j.tar.gz tar -xzvf openssl-1.1.0j.tar.gz cd openssl-1.1.0j ./config --prefix=/usr/local/ssl shared zlib-dynamic make make install mv /usr/bin/openssl /usr/bin/openssl1.0.0 ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
安装完毕再次配置依然报相同错误,所以咱们须要手动指定openssl
的位置:php-fpm
// 查看指定openssl的参数 $./configure --help | grep openssl --with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 1.0.1) --with-openssl-dir=DIR FTP: openssl install prefix --with-openssl-dir=DIR SNMP: openssl install prefix $ ./configure --prefix=/home/work/lnmp/php7 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-openssl=/usr/bin/openssl
make && make install
性能
由于我是升级,因此原有Nginx
和代码以及配置文件都是OK
的状态,可能在这个阶段你会遇到不一样的问题,这个得结合你的状况进行解决。优化
cd php7 // 复制php.ini和php-fpm.conf到etc/目录下,这个过程你也能够本身配置啊 // 生成两个目录用于日志和sock文件保存 mkdir log mkdir run sbin/php-fpm -c etc/php.ini -y etc/php-fpm.conf -p .
启动成功,访问URL
,报错:502 Bad Gateway
根据nginx
的访问日志能够看出:
$ cat error.log 2018/12/14 10:54:18 [crit] 6260#0: *206 open() "./run/factcgi_temp/0000000015" failed (13: Permission denied) while reading upstream, client: 172.24.162.178, se rver: , request: "GET /oss/index.php HTTP/1.1", upstream: "fastcgi://unix:run/phpfpm.sock:", host: "xx.xx. com"
查阅【资料1】【资料2】能够知道,在PHP
老版本里,有一个bug
,任何可以链接socket
文件的用户能够经过它执行任何命令,特别是在Ubuntu
系统里容许www-data
用户执行任何代码。所以最新版本里修复了这个错误,但也致使咱们出现了502
的问题,所以咱们须要配套升级咱们的配置文件:
// 在nginx.conf头部添加执行用户 user www www; // 在php-fpm.conf里放弃注释这3行 ; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0666 listen.owner = www listen.group = www listen.mode = 0660
重启nginx
和php-fpm
进程,依然报错:
nginx: [emerg] getpwnam("www") failed
由于咱们没有加上这个用户:
useradd -r www
搞定,重启nginx
和php-fpm
进程,服务正常。
使用二进制来安装PHP7.2
,在编译的时候按需加载扩展,若是有问题,咱们能够从新编译,也能够动态扩展。过程比较简单,但个人服务并无正常服务,由于使用的Yii2.0
不可以完美兼容PHP7
,我还得对Yii2.0
进行升级,以及对自身的代码进行升级。