最近 PHP7 出来了,班班说 Laravel 支持 PHP7 而且PHP 性能翻倍,我也就尝尝鲜试试 PHP7 的感觉。现在配置的环境是基于 CentOS release 6.5 (Final), 用的是源码编译安装。

前言

PHP7

本人的测试环境现在用的是 1G 内存单核的阿里云服务器,服务器系统是 CentOS release 6.5 (Final)

最后配好的环境是 PHP + Nginx

下不赘述。

卸载先前的 PHP

查看php版本命令:

1
[root@davex ~]# php -v

这个命令是删除不干净的

1
[root@davex ~]# yum remove php

因为使用这个命令以后再用

1
[root@davex ~]# php -v

还是会看到有版本信息的。。。。。

必须强制删除

1
[root@davex ~]# rpm -qa|grep php

提示如下

1
2
3
4
5
6
php-pdo-5.1.6-27.el5_5.3
php-mysql-5.1.6-27.el5_5.3
php-xml-5.1.6-27.el5_5.3
php-cli-5.1.6-27.el5_5.3
php-common-5.1.6-27.el5_5.3
php-gd-5.1.6-27.el5_5.3

注意卸载要先卸载没有依赖的,pdo是mysql的依赖项;common是gd的依赖项;

例如:

1
2
3
[root@davex ~]# rpm -e php-pdo-5.1.6-27.el5_5.3
error: Failed dependencies:
php-pdo is needed by (installed) php-mysql-5.1.6-27.el5_5.3.i386

所以正确的卸载顺序是:

1
2
3
4
5
6
[root@davex ~]# rpm -e php-mysql-5.1.6-27.el5_5.3 
[root@davex ~]# rpm -e php-pdo-5.1.6-27.el5_5.3
[root@davex ~]# rpm -e php-xml-5.1.6-27.el5_5.3
[root@davex ~]# rpm -e php-cli-5.1.6-27.el5_5.3
[root@davex ~]# rpm -e php-gd-5.1.6-27.el5_5.3
[root@davex ~]# rpm -e php-common-5.1.6-27.el5_5.3

再用 php -v 查看版本信息已经没有提示。

下载 & 解压

由于测试环境是国内,读者可以在 http://cn.php.net/get/php-7.0.0.tar.gz/from/a/mirror 中找到适合自己的镜像链接。

在此,笔者选的是香港的镜像。

1
2
3
[root@davex php-7.0.0]# wget http://hk1.php.net/get/php-7.0.0.tar.gz/from/this/mirror
[root@davex php-7.0.0]# tar -xzvf mirror
[root@davex php-7.0.0]# cd php-7.0.0/

安装前的参数配置

准备工作做完了就可以开始编译安装了,下面是安装明细。

Notice:操作前去掉 \ 后面的注释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[root@davex php-7.0.0]# ./configure \
--prefix=/usr/local/php7 \ [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 \ [PHP7的配置目录]
--with-mysql-sock=/var/run/mysql/mysql.sock \ [PHP7的Unix socket通信文件]
--with-mcrypt=/usr/include \
--with-mhash \
--with-openssl \
--with-mysql=shared,mysqlnd \ [PHP7依赖mysql库]
--with-mysqli=shared,mysqlnd \ [PHP7依赖mysql库]
--with-pdo-mysql=shared,mysqlnd \ [PHP7依赖mysql库]
--with-gd \
--with-iconv \
--with-zlib \
--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 \ [允许php会话session]
--with-curl \ [允许curl扩展]
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache \ [使用opcache缓存]
--enable-fpm \
--enable-fastcgi \
--with-fpm-user=nginx \ [php-fpm的用户]
--with-fpm-group=nginx \ [php-fpm的用户组]
--without-gdbm \
--disable-fileinfo

这是去掉注释后的版本:

1
./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/run/mysql/mysql.sock --with-mcrypt=/usr/include --with-mhash --with-openssl --with-mysql=shared,mysqlnd --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-iconv --with-zlib --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-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --enable-fastcgi --with-fpm-user=nginx --with-fpm-group=nginx --without-gdbm --disable-fileinfo

开始编译 & 安装 PHP7

PHP7的编译安装略微耗时,大约花了半个小时。

1
[root@davex php-7.0.0]# make clean && make && make install

安装好后,系统会有如下显示。

PHP7安装完成

虽说上面显示 Don't Forget to run 'make test'. ,但其实可做可不做,笔者在此就没有做这个工作。

查看编译成功后的PHP7安装目录

由于需要和 MySQL 进行通信,所以需要特别查看 PHP7 安装后的 lib 扩展库目录。

1
[root@davex ~]# cd /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/

需要确保至少存在 mysqli.sopdo_mysql.so 这两个动态库文件,如下图所示。

PHP7的PDO文件

设置PHP7的配置文件

可以用编译后的配置文件复制到PHP7的配置目录( /usr/local/php7/etc/ )。

参考博文中推荐使用PHP7中php.ini、php-fpm和www.conf的配置中整理的配置,这个由读者自行判断。

接下来采取源码包中自带的配置。

1
2
3
4
[root@davex php-7.0.0]# cp php.ini-production /usr/local/php7/etc/php.ini
[root@davex php-7.0.0]# cp /root/php-src-master/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@davex php-7.0.0]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@davex php-7.0.0]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

添加PHP7的环境变量

将php编译生成的bin目录添加到当前Linux系统的环境变量中

1
[root@davex ~]# echo -e '\nexport PATH=/usr/local/php7/bin:/usr/local/php7/sbin:$PATH\n' >> /etc/profile && source /etc/profile

设置目录

其中,设置php-fpm进程目录的用户和用户组为 Nginx ,并创建php会话session目录。

设置PHP日志目录和php-fpm的运行进程ID文件(php-fpm.sock)目录

1
[root@davex ~]# mkdir -p /var/log/php-fpm/ && mkdir -p /var/run/php-fpm && cd /var/run/ && chown -R nginx:nginx php-fpm

修改session的目录配置

1
2
[root@davex ~]# mkdir -p /var/lib/php/session
[root@davex ~]# chown -R nginx:nginx /var/lib/php

设置PHP开机启动以及测试配置文件是否正确

配置开机自启动

1
2
3
[root@davex ~]# chmod +x /etc/init.d/php-fpm
[root@davex ~]# chkconfig --add php-fpm
[root@davex ~]# chkconfig php-fpm on

测试PHP的配置文件是否正确合法

1
2
[root@davex ~]# php-fpm -t
[09-Dec-2015 21:15:31] NOTICE: configuration file /usr/local/php7/etc/php-fpm.conf test is successful

启动 PHP 服务

完成生面的操作后就可以正式使用PHP服务了。

1
2
[root@davex ~]# service php-fpm start
Starting php-fpm done

只需要通过命令 ps -aux|grep php 查看是否成功。

开启 Zend OPcache 缓存

/usr/local/php7/etc/php.ini 中添加一句 zend_extension = opcache.so 再重启即可。

配置 Nginx

/etc/nginx/conf.d/default.conf 中做如下配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 80 default_server;
server_name lab.davex.pw;

root /var/www/html;
index inde.htm index.html index.php;

access_log /var/log/nginx/lab.davex.pw.access.log main;
error_log /var/log/nginx/lab.davex.pw.error.log warn;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

接下来就大功告成了!!!

PHP7&Nginx配置完成

参考

centOS怎样强制卸载PHP以及自定义安装PHP

2015博客升级记(五):CentOS 7.1编译安装PHP7

PHP7中php.ini、php-fpm和www.conf的配置