Centos 升级 PHP7

这两天升级了下VPS的PHP7,原来是5.3.3。
System: CentOS release 6.7 (Final)

一、备份系统镜像

我使用的是阿里云的VPS,可以在控制面板备份镜像。

二、下载与安装

# 下载
wget http://cn2.php.net/get/php-7.1.0.tar.gz/from/this/mirror

# 解压
tar -xjf mirror
cd php-7.1.0

#安装编译php时需要的依赖包
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel

#如果没有 configure文件,先生成configure文件
./buildconf

#开始配置(我的安装目录上是/usr/local/php7,可以根据自己情况修改安装目录)
./configure --prefix=/usr/local/php7 \
--exec-prefix=/usr/local/php7 \
--bindir=/usr/local/php7/bin \
--sbindir=/usr/local/php7/sbin \
--includedir=/usr/local/php7/include \
--libdir=/usr/local/php7/lib/php \
--mandir=/usr/local/php7/php/man \
--with-config-file-path=/usr/local/php7/etc \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--with-mcrypt=/usr/include \
--with-mhash \
--with-mysqli=shared,mysqlnd \
--with-pdo-mysql=shared,mysqlnd \
--with-gd \
--with-iconv \
--with-zlib \
--with-openssl \
--enable-zip \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-cli \
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache \
--enable-fpm \
--with-fpm-user=php-fpm \
--with-fpm-group=php-fpm \
--without-gdbm \
--disable-fileinfo

#编译
make clean && make && make install

#测试——非必须操作
make test

#设置PHP7的配置文件php.ini、php-fpm.conf、www.conf和php-fpm脚本
cp php.ini-production /usr/local/php7/etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

# 可能需要加上执行权限  
chmod +x  /etc/init.d/php-fpm

安装信息

看到如下安装信息,代表安装成功,留意下Installing shared extensions: ,这是PHP7扩展目录,需要配置到php.ini文件中。

Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
Installing PHP CLI binary:        /usr/local/php7/bin/
Installing PHP CLI man page:      /usr/local/php7/php/man/man1/
Installing PHP FPM binary:        /usr/local/php7/sbin/
Installing PHP FPM config:        /usr/local/php7/etc/
Installing PHP FPM man page:      /usr/local/php7/php/man/man8/
Installing PHP FPM status page:      /usr/local/php7/php/php/fpm/
Installing phpdbg binary:         /usr/local/php7/bin/
Installing phpdbg man page:       /usr/local/php7/php/man/man1/
Installing PHP CGI binary:        /usr/local/php7/bin/
Installing PHP CGI man page:      /usr/local/php7/php/man/man1/
Installing build environment:     /usr/local/php7/lib/php/build/
Installing header files:          /usr/local/php7/include/php/
Installing helper programs:       /usr/local/php7/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php7/php/man/man1/
  page: phpize.1
  page: php-config.1
/root/php-7.0.0/build/shtool install -c ext/phar/phar.phar /usr/local/php7/bin
ln -s -f phar.phar /usr/local/php7/bin/phar
Installing PDO headers:          /usr/local/php7/include/php/ext/pdo/

 将PHP7添加到环境变量

# vim ~/.bashrc

# 添加
PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH
export PATH

php.ini相关配置优化

# 设置扩展目录 (此处的值应该是你刚才看到扩展目录)
extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/"
#设置PHP的时区,修改为 Asia/Shanghai 或 PRC
date.timezone = Asia/Shanghai

#避免PHP信息暴露在http头中
expose_php = Off

#避免暴露php调用mysql的错误信息(如果是本地环境,可以设置为On,方便查看原因)
display_errors = Off

#在关闭display_errors后,开启PHP错误日志(路径在php-fpm.conf中配置)
log_errors = On

php-fpm相关配置优化

#开启pid文件
pid = run/php-fpm.pid
#设置错误日志的路径
error_log = log/php-fpm.log

#确保php-fpm.conf里有include了php-fpm.d里的文件,再修改www.conf
include=/usr/local/php/etc/php-fpm.d/*.conf

配置www.conf

#修改为以下配置
pm.max_children = 50  
pm.start_servers = 20  
pm.min_spare_servers = 5  
pm.max_spare_servers = 35  

#开启慢日记  
request_slowlog_timeout = 1
slowlog = log/$pool.log.slow

#修改fpm运行的用户和组都改为web 用户
user = nobody
group = nobody

#根据nginx.conf中的配置fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;设置PHP监听
; listen = 127.0.0.1:9000   #####不建议使用
; listen = /var/run/php-fpm/php-fpm.sock #由于以前的vhost里的配置文件大都是用127.0.0.1:9000,等以后有时间再来改为sock

opcache扩展

#注意:建议本地环境非必要情况下不要开启opcache, 正式环境才开启  

#进入到刚才解压后的php源码路径里的opcache目录
cd ext/opcache/

phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-opcache
make clean && make && make install

#成功之后的so文件路径会显示出来,注意查看

#编辑php.ini
vim /usr/local/php/etc/php.ini

#确保 extension_dir 的路径有填写了,如果没填可参照以下填写,或是自定义一个路径  
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012"

# 添加
;;
; opcache
;;
zend_extension=opcache.so

#修改如下选项

opcache.enable=1
opcache.enable_cli=1

#Zend Optimizer + 共享内存的大小, 总共能够存储多少预编译的 PHP 代码(单位:MB),推荐 128
opcache.memory_consumption=128

#Zend Optimizer + 暂存池中字符串的占内存总量.(单位:MB),推荐 8
opcache.interned_strings_buffer=8

#最大缓存的文件数目 200  到 100000 之间,推荐 4000
opcache.max_accelerated_files=4000

#Opcache 会在一定时间内去检查文件的修改时间, 这里设置检查的时间周期, 默认为 2, 定位为秒,推荐60
opcache.revalidate_freq=60

#是否保存文件/函数的注释   如果apigen、Doctrine、 ZF2、 PHPUnit需要文件注释.推荐 0
opcache.save_comments=0

#打开快速关闭, 打开这个在PHP Request Shutdown的时候回收内存的速度会提高,推荐1
opcache.fast_shutdown=1

#从缓存不被访问后,等待多久后(单位为秒)调度重启
opcache.force_restart_timeout=180

mysql扩展

# 确定是否已安装Mysqli Pdo的扩张
ll /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
# 看到如下信息表示安装成功
-rwxr-xr-x 1 root root 1420598 11月 30 11:23 mysqli.a
-rwxr-xr-x 1 root root 717575 11月 30 11:23 mysqli.so
-rwxr-xr-x 1 root root 520870 11月 30 11:23 pdo_mysql.a
-rwxr-xr-x 1 root root 264883 11月 30 11:23 pdo_mysql.so
# 配置php.ini,在尾部添加
;;
; mysql
;;
extension=pdo_mysql.so
extension=mysqli.so

memcached扩展

如果没有安装libmemcached,需要先安装libmemcached

# Install dependencies
yum install cyrus-sasl-devel zlib-devel gcc-c++

# Get the latest libmemcached
wget https://launchpad.net/libmemcached/1.0/1.0.16/+download/libmemcached-1.0.16.tar.gz
tar -xvf libmemcached-1.0.16.tar.gz
cd libmemcached-1.0.16

# Compile and install liblmemcached with sasl disabled
./configure
make
make install

Memcached扩展

#添加php7下的memcached扩展
cd ~/your_download_dir

#下载
wget -c --no-check-certificate -O php7-memcached.zip https://codeload.github.com/php-memcached-dev/php-memcached/zip/php7

#解压
unzip -q php7-memcached.zip && cd php-memcached-php7

#编译,前提是已安装过 libmemcached,如未安装,请先自行安装,再执行以下命令  
phpize
./configure --with-libmemcached-dir=/usr/local/libmemcached --with-php-config=/usr/local/php/bin/php-config
make clean && make
make test

#拷贝生成的so文件至php目录里  
cp modules/memcached.so /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
cp modules/memcached.la /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/

vim /usr/local/php/etc/php.ini
# 添加
;;
; memcache
;;
extension=memcached.so

Redis扩展

先安装Redis

# 安装依赖
# yum install -y tcl

# 下载redis  
wget http://download.redis.io/redis-stable.tar.gz

# 解压并进入目录  
tar -zxvf redis-stable.tar.gz && cd redis-stable

# 编译  
make && make install
# 测试  
make test

# 编辑redis.conf文件  
vim redis.conf

# 将`daemonize`由`no`修改为`yes`  
daemonize yes

# 添加启动脚本
cp utils/redis_init_script /etc/init.d/redis

chmod +x /etc/init.d/redis

# 设置开机自动启动服务
chkconfig redis on

# 启动
service redis start
# 停止
service redis stop

编译php7-redis扩展

# 下载
wget -c --no-check-certificate -O phpredis-php7.zip https://codeload.github.com/phpredis/phpredis/zip/php7

# 解压并进入目录
unzip phpredis-php7.zip && cd phpredis-php7

# 编译(`phpize`依赖于`php-devel`这个包,如果没有直接用`yum install php-devel`先安装一下)
phpize
./configure --with-php-config=/usr/local/php/bin/php-config --enable-redis
make && make install
make test

# 当出现类似如下语句时,说明安装成功  
# Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/
ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/

# 编辑`php.ini`
vim /usr/local/php7/etc/php.ini

# 添加
;;
; redis
;;
extension=redis.so

Update @ 2016-12-08
曝一张升级后的内存监控图:
img_5848e547cecc1

JackSun

JackSun

I'm a coder.

You may also like...

No Responses

  1. Gourd says:

    沙发

Leave a Reply

Your email address will not be published.