美文网首页
升级PHP7时couchbase扩展导入的bug

升级PHP7时couchbase扩展导入的bug

作者: StanNAN | 来源:发表于2017-08-27 21:07 被阅读0次

    这两天在弄php7.1的docker镜像,使用的系统是Ubuntu 16.04;

    PHP7发布到现在大部分的扩展都可以直接用pecl安装,但也要注意一些变化,比如couchbase。

    首先说明一下,5.6的安装步骤是怎样的:

    • 使用apt-get 安装php5.6,以及各个库
    • 依次使用pecl安装几个扩展如(yar、couchbase)
    • 增加各个扩展的配置到/etc/php/{version}/mod_available,如couchbase.ini,内容如下:
    extension=couchbase.so
    
    • 使用phpenmod couchbase,使得配置生效(其实是在真实的配置地址下,建立软连接,如生成文件/etc/php/7.1/cli/conf.d/20-couchbase.ini
    • 如果是php-fpm,需要重启才能生效

    以上步骤,除了couchbase,都正常使用,当使用php -v命令时,出现报错,其中json_globals可能是json的其他函数:

    PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/couchbase.so' - /usr/lib/php/20160303/couchbase.so: undefined symbol: json_globals in Unknown on line 0
    

    导致整个原因是因为,couchbase在v2.0.0版本时修改了扩展的载入类型

    PHP_ARG_ENABLE(couchbase, whether to enable Couchbase support,
    [ --with-couchbase   Include Couchbase support])
    

    改成了

    PHP_ARG_WITH(couchbase, whether to enable Couchbase support,
    [  --with-couchbase   Include Couchbase support])
    

    这个修改导致couchbase的导入和内置扩展同个级别,但是couchbase依赖json,导致载入couchbase时报错

    通过修改couchbase.ini,增加注释priority = 30可以避免这个报错

    ; configuration for php couchbase module
    ; priority = 30
    extension=couchbase.so
    

    这样通过phpenmod命令生效的配置,是30-couchbase.ini文件,导入顺序在内置扩展之后,就不会出现报错了;
    另外这个就是书写配置的习惯问题了,如果不是PHP自带的扩展,在写扩展配置文件时,都添加priority = {value},value>20,这样就不会因为依赖问题,导致报错;

    相关文章

      网友评论

          本文标题:升级PHP7时couchbase扩展导入的bug

          本文链接:https://www.haomeiwen.com/subject/tzuidxtx.html