php5共存php7
PHP7与PHP5共存于CentOS7
原理
思路很简单:PHP5是通过yum安装的在/usr/,套接字在/var/run/php-fpm.socket,PHP7自己编译装在/usr/local/php7,套接字在/var/run/php7-fpm.socket,nignx根据应用需要跑的环境指定fastcgi_pass。
或者两个不同的端口,一个使用默认的9000,一个使用9002
编译并安装PHP7
yum安装编译需要的各种依赖包
    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 -y
接着到官网下载最新的PHP源码,解压
    cd ~
    wget http://am1.php.net/distributions/php-7.1.8.tar.gz
    tar xvf  php-7.1.8.tar.gz
    cd php-7.1.8
然后设置编译参数,这里有几个事情要提一下:
- 为了减少后续因为权限导致的问题,建议将nginx和php-fpm用相同的用户和用户组即(--with-fpm-user=nginx --with-fpm-group=nginx)
 - 为了减少多网卡等复杂网络环境造成的问题,在不使用ipv6网络的情况下关闭ipv6的支持(--disable-ipv6)。 根据自己的情况选择
 - 开启mysql数据库的API扩展(--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd )
 - 开启opcache扩展(--enable-opcache)
 
完整的编译参数:
    ./configure \
    --prefix=/usr/local/php7 \
    --with-config-file-path=/usr/local/php7/etc \
    --with-config-file-scan-dir=/usr/local/php7/etc/php.d/ \
    --disable-ipv6  \
    --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
设置检查通过之后就是喜闻乐见的make和make install了,有兴趣的可以在make install之前make test一下。
PS: make test很耗费时间,但其实跟make install差不多,在make test后,直接make install很快
配置PHP7
    cp php.ini-production /usr/local/php7/etc/php.ini
    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
修改相应的配置文件(根据需求修改),下面是配置时区
date.timezone ="Asia/Shanghai"
a.centos7版本启动文件的修改
make install无错安装成功之后就开始进行配置,首先将默认配置复制到指定位置
    cp -R ./sapi/fpm/php-fpm.service /usr/lib/systemd/system/php7-fpm.service
/usr/lib/systemd/system/php7-fpm.service
修改相应路径就好了。。。我也没有测试
b.centos6版本启动文件的修改
    cp -R ./sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm  # 这样启动的时候名字不会冲突
    chmod +x /etc/init.d/php7-fpm
修改启动项名称vi /etc/init.d/php7-fpm
    prefix=/usr/local/php7
    exec_prefix=${prefix}
    php_fpm_BIN=${exec_prefix}/sbin/php7-fpm
    php_fpm_CONF=${prefix}/etc/php7-fpm.conf
    php_fpm_PID=${prefix}/var/run/php7-fpm.pid
添加开机启动,建立软连
chkconfig --add php7-fpm
chkconfig php7-fpm  on  # 这两步根据需要选择
ln -s  /usr/local/php7/bin/php  /usr/bin/php
启动php7-fpm
centos7
    systemctl enable php7-fpm.service
    systemctl start  php7-fpm.service
centos6
    sudo /etc/init.d/php7-fpm restart
编译报错处理
# 找到类似的报错libiconv_open,因为内容找不到了
PHP7 编译安装时碰到 undefined reference to `libiconv_open' 问题解决方法  系统环境centos6.7
make install 的时候遇到错误:
ext/gd/libgd/.libs/gdkanji.o: In function `do_convert':
/root/src/php-7.1.3/ext/gd/libgd/gdkanji.c:349: undefined reference to `libiconv_open'
/root/src/php-7.1.3/ext/gd/libgd/gdkanji.c:364: undefined reference to `libiconv'
/root/src/php-7.1.3/ext/gd/libgd/gdkanji.c:380: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_dtor':
/root/src/php-7.1.3/ext/iconv/iconv.c:2565: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':
/root/src/php-7.1.3/ext/iconv/iconv.c:2591: undefined reference to `libiconv_open'
ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen':
/root/src/php-7.1.3/ext/iconv/iconv.c:754: undefined reference to `libiconv_open'
/root/src/php-7.1.3/ext/iconv/iconv.c:778: undefined reference to `libiconv'
/root/src/php-7.1.3/ext/iconv/iconv.c:812: undefined reference to `libiconv_close'
解决方法:
vim Makefile,添加"-liconv":
结果如下所示:
EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lpng -lz -lcurl -lz -lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl -lcurl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -liconv
再次 make install 通过
安装扩展模块
mysql模块
由于PHP从5.x开始,PHP连接MYSQL无论使用哪种方式都是使用的mysqlnd驱动,且PHP7已经正式移除了mysql扩展,由于新特性的原因,PHP7针对数据库主机地址为localhost和127.0.0.1时分别会采用unix domain socket和TCP/IP两种不同的方式连接MySQL服务。
而采用unix domain socket方式时PHP7会使用默认的/tmp/mysql.sock作为套接字,但是CentOS7默认MySQL服务MariaDB的套接字位置为/var/lib/mysql/mysql.sock,于是即使是所有数据库连接信息都正确的情况下也会出现诸如“mysqli::real_connect(): (HY000/2002): No such file or directory ” 和 “Error establishing a database connection”之类的错误提示。
不过我们公司使用的是--with-pdo-mysql=mysqlnd 所以没有出现mysql连接问题,这里给遇到的同学一个链接php7_mysql扩展模块安装
redis模块
1.git clone:
git clone  https://github.com/phpredis/phpredis.git
官网:https://github.com/phpredis/phpredis
切换分支:
git checkout -b php7 origin/php7
2.检查PHP扩展
/usr/local/php7/bin/phpize  # 根据个人路径来,如果是php5的扩展模块就不是这个结果了
3.建立编译连接、安装
./configure --with-php-config=/usr/local/php7/bin/php-config
make
make test
make install
4.检查so文件
cd /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303
# 这里的家目录不一样,主要是还是最后一级目录名称
ls
5.修改php.ini
vi /usr/local/php7/etc/php.ini
添加:extension="redis.so"
6.检查模块
php7 -m |grep redis
# php -m是检查扩展模块的
如果有redis则表示正常
7.重启php-fpm
sudo /etc/init.d/php7-fpm restart
nginx 配置
对应的php启动不同的端口,或者socket模式,
# fastcgi_pass  unix:/var/run/php7-fpm.socket;
fastcgi_pass fastcgi_pass   127.0.0.1:9002;
												
											php5共存php7的更多相关文章
- PHP5和PHP7的安装、PHP和apache的整合!
		
1.PHP5的安装: 下载: wget -c http://cn2.php.net/distributions/php-5.6.36.tar.gz (php5) wget -c http://cn2 ...
 - 安装最新版的wampserver,可以兼容php5和php7
		
本文介绍的wamp是Windows+Apache+MySQL+PHP+phpMyAdmin,主要应用于开发环境[一键安装包,简单好用]. 这是运行在Windows系统下的官方安装包,可以快速的搭建属于 ...
 - 在Apache中安装php5.6 & php7.3
		
1.下载 httpd-2.4.41-win64-VC15.zip.php5.6 + vc11. php7.3 + vc14-16 2.配置httpd,在 httpd.conf L180 添加如下 ...
 - wamp集成环境php多版本搭建(php5.5,php5.6,php7.0.6)
		
首先需要搭建的版本可以在php官方(http://windows.php.net/download)下载对应的版本,X86对应的是32位操作系统,X64对应的是64位操作系统. 1:下载 ...
 - [macOS] macOS下,VirtualBox安装CentOS7.4, 搭建nginx, mysql, PHP5.6&PHP7.1
		
准备工作 网络设置 相关教程:http://www.jianshu.com/p/e6ba699b5992 ifcfg-enp0s3配置 TYPE=Ethernet BOOTPROTO=dhcp DEF ...
 - php5和php7的异常处理机制   ----thinkphp5 异常处理的分析
		
1.php异常和错误 在其他语言中,异常和错误是有区别的,但是PHP,遇见自身错误时,会触发一个错误,而不是跑出异常.并且,php大部分情况,都会触发错误,终止程序执行,在php5中,try catc ...
 - centos7更新php5.4到php5.6/php7
		
centos7系统yum安装的php版本为5.4. 因业务需求,开发可能需要php5.6环境. 本文应需而生,介绍从php5.4升级到php5.6. 如需更新到php7环境,步骤一样. 如果是线上应用 ...
 - 安装PHP5和PHP7
		
5月25日任务 课程内容: 11.10/11.11/11.12 安装PHP511.13 安装PHP7php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn. ...
 - PHP5和PHP7引用对比(笔记)
		
php5在引入引用计数后,使用了refcount_gc来记录次数,同时使用is_ref_gc来记录是否是引用类型. 例如 $a = 'hello'; //$a->zval1(type=IS_ST ...
 
随机推荐
- /etc/vsftpd.conf配置(ftp上传)
			
# Example config file /etc/vsftpd.conf## The default compiled in settings are fairly paranoid. This ...
 - SQL语句中拆分字段
			
SELECT PARSENAME(replace(MONITOR_ROOM_ID,'^' , '.'), 1) AS RoomID FROM ZY_MONITOR_ROOM 遇到以前系统高人设计的表, ...
 - ipkg包管理
			
添加ipkg更新源 你可以通过修改/opt/etc/ipkg.conf去添加 ############################ echo src optware http://ipkg.nsl ...
 - Oracle DB 数据库维护
			
• 管理优化程序统计信息 • 管理自动工作量资料档案库(AWR) • 使用自动数据库诊断监视器(ADDM) • 说明和使用指导框架 • 设置预警阈值 • 使用服务器生成的预警 • 使用自动任务 数 ...
 - Java版 数字金额大写转换
			
需求:读入一个浮点数值,将其转化为中文金额的大写形式.如123.45,转化为:壹佰贰拾叁元肆角伍分. 以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加“整”字.如123 ...
 - Python 倒叙切片
			
倒序切片 对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试: >>> L = ['Adam', 'Lisa', 'Bart', 'Paul' ...
 - selenium webdriver 的三种等待方式
			
1.显式等待 一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriver from selenium.webdriver ...
 - 用css3选择器给你要的第几个元素添加不同样式方法【转发】
			
下面我们来了解一下css选择器里面的几个 :only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素. 3 :nth-child(n) p:nth- ...
 - Qt Multimedia Backends(多媒体后端)翻译
			
目录 MediaService plugins 媒体服务插件 不同后端支持的媒体播放器功能: 后端支持的摄像头(相机)功能 后端支持的音频解码功能 Audio plugins 音频插件 原文地址: Q ...
 - C3P0连接参数解释
			
<c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> < ...