升级PHP7时couchbase扩展导入的bug

2017-08-27  本文已影响0人  StanNAN

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

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

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

extension=couchbase.so

以上步骤,除了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,这样就不会因为依赖问题,导致报错;

上一篇 下一篇

猜你喜欢

热点阅读