zoukankan      html  css  js  c++  java
  • 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
    

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

    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-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;
    
  • 相关阅读:
    Eclipse中的Web项目自动部署到Tomcat
    Linux之grep命令
    Linux之sort
    Python 字典中一键对应多个值
    手动下载python更新后 换回以前版本
    N个降序数组,找到最大的K个数
    蓄水池抽样算法
    空瓶子换水问题
    rand()产生随机数 及其和clock()的不同
    C++复数运算 重载
  • 原文地址:https://www.cnblogs.com/irockcode/p/9603589.html
Copyright © 2011-2022 走看看