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 对服务器进行发测试,测试结果如下:
从测试结果可以看出,无论是系统响应时间还是TPS有都很大提高,特别是响应时间,提高了一倍左右,而且错误率也大大降低,所以升级php7还是一个不错的选择。