通过性能评测可以看出PHP7在性能上做了很大的优化,相比PHP5.x有50%-150%的性能提升。因此,为了提高我们服务的响应速度,降低机器负载,需要升级版本。因为对binary比较熟悉,所以没有使用yum来安装。使用的二进制安装方式比较灵活,但是因为我是第一次安装高版本的PHP,所以也引入了很多问题,终于找到了一条还行的路。下载PHP7.2官方下载地址:wgethttp://cn2.php.net/get/php-7.2.13.tar.bz2/from/this/mirror-Ophp-7.2.13.tar.bz2tar-xjvfphp-7.2.13.tar.bz2//生成代码目录供后面编译mkdirphp7cdphp-7.2.13配置PHPPHP提供了大量参数供编译前配置,包括支持的扩展,执行用户等,可以查看参数列表。我们进行最简单的配置,只支持php-fpm管理,因为我们的PHP是用来服务Ngnix的,所以还需要指定用户执行:./configure--prefix=/home/work/lnmp/php7--enable-fpm--with-fpm-user=nginx--with-fpm-group=nginx我的第一个编译错误:configure:error:OpenSSLversion1.0.1orgreaterrequired.要解决此问题,您需要先查看自己的Openssl版本信息:$opensslversionOpenSSL1.0.0-fips29Mar2010所以更新openssl版本:wgethttps://www.openssl.org/source/openssl-1.1.0j.tar.gztar-xzvfopenssl-1.1。0j.tar.gzcdopenssl-1.1.0j./config--prefix=/usr/local/sslsharedzlib-dynamicakemakeinstallmv/usr/bin/openssl/usr/bin/openssl1.0.0ln-s/usr/local/ssl/bin/openssl/usr/bin/openssl重新安装配置,还是报同样的错误,所以我们需要手动指定openssl的位置://查看指定openssl的参数$./configure--帮助|grepopenssl--with-openssl=DIR包括OpenSSL支持(需要OpenSSL>=1.0.1)--with-openssl-dir=DIRFTP:opensslinstallprefix--with-openssl-dir=DIRSNMP:opensslinstallprefix$./configure--prefix=/home/work/lnmp/php7--enable-fpm--with-fpm-user=nginx--with-fpm-group=nginx--with-openssl=/usr/bin/opensslinstallmake&&makeinstall启动因为我是升级,所以原来的Nginx,代码和配置文件都是OK状态,这个阶段你可能会遇到不同的问题,这个得解决根据你的情况cdphp7//将php.ini和php-fpm.conf复制到etc/目录下,你也可以自己配置这个过程//生成两个目录用于保存日志和sock文件mkdirlogmkdirrunsbin/php-fpm-cetc/php.ini-yetc/php-fpm.conf-p。启动成功,访问url,报错:502BadGateway502BadGateway根据nginx访问日志可以看到:$caterror.log2018/12/1410:54:18[暴击]6260#0:*206open()"./run/factcgi_temp/0000000015"读取上游时失败(13:权限被拒绝),客户端:172.24.162.178,服务器:,请求:"GET/oss/index.phpHTTP/1.1",upstream:"fastcgi://unix:run/phpfpm.sock:",host:"xx.xx.com"见【资料1】【资料2】可知在老版本PHP中,有一个bug,任何可以连接到socket文件的用户都可以通过它执行任何命令,特别是在Ubuntu系统中,允许www-data用户执行任何代码。所以这个错误在最新的版本中被修复了,但是也导致我们出现了502的问题,所以我们需要升级我们的配置文件://在nginx.conf头文件中添加执行用户userwww;//在php-fpm中不要在.conf中注释这3行;设置unix套接字的权限,如果使用的话。在Linux中,读/写;必须设置权限才能允许来自Web服务器的连接。许多;BSD派生系统允许连接而不管权限。默认值:user和group设置为运行用户;mode设置为0666listen.owner=wwwlisten.group=wwwlisten.mode=0660重启nginx和php-fpm进程,依旧报错:nginx:[emerg]getpwnam("www")failedbecausewedidnotaddthisuser:useradd-rwww搞定,重启nginx和php-fpm进程,服务正常。总结使用二进制安装PHP7.2,编译时按需加载扩展。如果有问题,我们可以重新编译或者动态扩展。过程比较简单,但是我的服务不能正常运行,因为使用的Yii2.0不能完美兼容PHP7,所以只好升级Yii2.0和自己的代码。参考资料PHP7.2下载地址:http://php.net/downloads.phpPHP性能演进:http://www.laruence.com/2016/...OpenSSL下载:https://www.openssl.org/source/OpenSSL安装及介绍:https://www.jianshu.com/p/291...Centos7安装最新版PHP7:https://www.jianshu.com/p/246...CentOS7Linux安装PHP7.2-编译安装:https://blog.csdn.net/ai_zxc/...nginxerrorconnecttophp5-fpm.sockfailed(13:Permissiondenied):https://stackoverflow.com/que...nginxinstallnginx:[emerg]getpwnam(“www”)failederror:https://blog.csdn.net/justdoi...
