分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

php5共存php7

发布时间:2023-09-06 02:13责任编辑:郭大石关键词:暂无标签

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

然后设置编译参数,这里有几个事情要提一下:

  1. 为了减少后续因为权限导致的问题,建议将nginx和php-fpm用相同的用户和用户组即(--with-fpm-user=nginx --with-fpm-group=nginx)
  2. 为了减少多网卡等复杂网络环境造成的问题,在不使用ipv6网络的情况下关闭ipv6的支持(--disable-ipv6)。 根据自己的情况选择
  3. 开启mysql数据库的API扩展(--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd )
  4. 开启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-fpmchkconfig 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.7make 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-configmakemake testmake 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

原文地址:https://www.cnblogs.com/irockcode/p/9603589.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved