资讯专栏INFORMATION COLUMN

Linux安装二进制PHP7.2

yanest / 737人阅读

摘要:因为对二进制比较熟悉,所以没有用的方式进行安装,采用的二进制安装方式比较灵活,但是因为第一次安装的高版本,也引入了很多的问题,总而言之,就是在错误中不断摸索错误,最终找到一个还能用的道路。

通过性能评测,可以看出PHP7对性能进行了较大的优化,相比与PHP5.x50%-150%的性能提升,因此,为了提升我们服务的响应速度,降低机器负载,需要进行版本升级。

因为对二进制比较熟悉,所以没有用yum的方式进行安装,采用的二进制安装方式比较灵活,但是因为第一次安装PHP的高版本,也引入了很多的问题,总而言之,就是在错误中不断摸索错误,最终找到一个还能用的道路。

下载PHP7.2

官方下载地址:

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编译前提供了大量的参数进行配置,包括支持的扩展、执行用户等,可以查看参数列表。

我们进行最简单的配置,只支持php-fpm管理,因为我们的PHP是配合Ngnix来进行服务,因此还要指定执行的用户:

./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的版本信息:

$ openssl version
OpenSSL 1.0.0-fips 29 Mar 2010

因此更新openssl版本:

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的位置:

// 查看指定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

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

重启nginxphp-fpm进程,依然报错:

nginx: [emerg] getpwnam("www") failed

因为我们没有加上这个用户:

useradd -r www

搞定,重启nginxphp-fpm进程,服务正常。

总结

使用二进制来安装PHP7.2,在编译的时候按需加载扩展,如果有问题,我们可以重新编译,也可以动态扩展。过程比较简单,但我的服务并没有正常服务,因为使用的Yii2.0不能够完美兼容PHP7,我还得对Yii2.0进行升级,以及对自身的代码进行升级。

参考资料

PHP7.2下载地址:http://php.net/downloads.php

PHP的性能演进:http://www.laruence.com/2016/...

OpenSSl downloads:https://www.openssl.org/source/

OpenSSL 安装、介绍:https://www.jianshu.com/p/291...

Centos7 安装 PHP7最新版:https://www.jianshu.com/p/246...

CentOS 7 Linux 安装PHP7.2 - 编译安装:https://blog.csdn.net/ai_zxc/...

nginx error connect to php5-fpm.sock failed (13: Permission denied):https://stackoverflow.com/que...

nginx安装 nginx: [emerg] getpwnam(“www”) failed 错误:https://blog.csdn.net/justdoi...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40258.html

相关文章

  • Linux安装进制PHP7.2

    摘要:因为对二进制比较熟悉,所以没有用的方式进行安装,采用的二进制安装方式比较灵活,但是因为第一次安装的高版本,也引入了很多的问题,总而言之,就是在错误中不断摸索错误,最终找到一个还能用的道路。 通过性能评测,可以看出PHP7对性能进行了较大的优化,相比与PHP5.x有50%-150%的性能提升,因此,为了提升我们服务的响应速度,降低机器负载,需要进行版本升级。 因为对二进制比较熟悉,所以没...

    gghyoo 评论0 收藏0
  • MongoDB 入门教程

    摘要:可选,抛出异常的级别。示例教程更新一条数据标题。命令行下执行进入数据库进入库可查看当前库用户列表执行新建用户设置账户密码,并指定级别。重启服务重新进入数据库,发现命令无法执行,报权限不足错误。命令可以正常执行。 1.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB ...

    Vicky 评论0 收藏0
  • MongoDB 入门教程

    摘要:可选,抛出异常的级别。示例教程更新一条数据标题。命令行下执行进入数据库进入库可查看当前库用户列表执行新建用户设置账户密码,并指定级别。重启服务重新进入数据库,发现命令无法执行,报权限不足错误。命令可以正常执行。 1.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB ...

    zhonghanwen 评论0 收藏0

发表评论

0条评论

yanest

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<