我不生产代码
我只是代码的搬运工

centos7.0中将php5.6到php7最新版本

php7已经出来了一段时间了,并且很多公司已将项目迁移到了php7,都说性能提高很多,由于今天没事,所以决定将自己服务器上的php5.6也升级到7

1.在安装之前需要将原来的php5.6卸载掉

由于原来使用的是集成环境lnmp1.2安装的,所以将对应的php文件直接删掉即可,在删除之前,需要将对应的服务关闭:

lnmp stop

为了防止安装失败导致php不能用,所以我这没里面直接删除而是做了一下备份:

mv /usr/local/php /usr/local/php20170730
mv /usr/bin/php /usr/bin/php20170730
mv /etc/init.d/php-fpm /etc/init.d/php-fpm20170730

2.下载最新版本的php

去php官网 http://php.net/get/php-7.1.7.tar.gz/from/a/mirror 下载对应的安装包,我这下面下载的是 php7.17 版本(目前的最新稳定版本)

wget "http://cn2.php.net/get/php-7.1.7.tar.gz/from/this/mirror"

将下载后的文件解压并进入相应的目录:

tar -zxvf php-7.1.7.tar.gz
cd php-7.1.7

3.安装依赖包

直接运行下面的命令安装对应的依赖包:

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

4.编译安装

通过下面命令对php进行编译:

./configure \
--prefix=/usr/local/php \
--with-config-file-path=/etc \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=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

通过下面命令对php进行安装:

make && make install

在安装过程中服务器卡死并出现了如下错误:

[ext/sqlite3/libsqlite/sqlite3.lo] Error 1

原来是服务器的内存不够了,我的服务器是1G1核的,通过重启一下服务器就解决了,但是接下来又出现了如下错误:

collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

通过查找了一些资料,原来是在 ./configure 时没有抓好一些环境变量,错误发生点在建立 -o sapi/cli/php 时出错,没给到要 link 的 iconv 函式库参数。以下为两种解解决办法:

    ①. 在Makefile文件 119 行(不同php版本中可能不一样)中

EXTRA_LIBS = -lcrypt -lz -lexslt -lresolv -lcrypt -lreadline -lncurses -lrt -lmcrypt -lltdl -lgmp -lpng -lz -ljpeg -lcurl -lbz2 -lz -lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl -lssl -lcrypto      -lcurl -lxml2 -lz -lm -ldl -lssl -lcrypto -lfreetype -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxm     l2 -lz -lm -ldl -lxslt -lxml2 -lz -ldl -lm -lssl -lcrypto -lcrypt

 末尾添加 -liconv,然后再重新安装;

   ②. 使用如下命令安装:

make ZEND_EXTRA_LIBS='-liconv' && make install

 我这里使用第二种方式安装。

5.配置环境变量

打开文件 /etc/profile:

/etc/profile

并在文件末尾添加如下内容:

PATH=$PATH:/usr/local/php/bin
export PATH

执行以下命令使修改生效:

source /etc/profile

6.配置php-fpm

cp php.ini-production /etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

7.启动php-fpm

/etc/init.d/php-fpm start

当启动 php-fpm时会出现如下错误:

Starting php-fpm [30-Jul-2017 10:31:31] ERROR: [pool www] cannot get uid for user 'nginx'
[30-Jul-2017 10:31:31] ERROR: FPM initialization failed

此时需要修改php-fpm的配置文件 /usr/local/php/etc/php-fpm.conf,在里面添加对应的服务器执行的用户和用户组:

user = www
group = www

此时再重新启动 php-fpm 即可正常运行,在这里从 php5.6 升级 php7.17完成。

8.总结

在升级之前后分别使用腾讯测试工具http://wetest.qq.com 对服务器进行发测试,测试结果如下:

php5.6.25

php7.17

从测试结果可以看出,无论是系统响应时间还是TPS有都很大提高,特别是响应时间,提高了一倍左右,而且错误率也大大降低,所以升级php7还是一个不错的选择。

本文章为本站原创,如转载请注明文章出处:https://www.sviping.com/archives/33

分享到:
上一篇: php实现curl多线程 下一篇: php使用cli模式生成圣诞树
12