CouchBase扩展安装错误


CouchBase extension install error

我使用php和couchbase nosql数据库,当我在ubuntu上安装couchbase-ext时,在php -m命令中出现如下错误:

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

这里也有同样的问题。这是我们的故事和如何解决它。

在我们的机器上,我们试图运行PHP 5.6,并希望针对它编译couchbase的PHP扩展。我们还在同一台机器上安装了PHP 7.1和PHP 7.0。PECL将编译后的文件放入/usr/lib/php/20151012/couchbase.so,这不是在extension_dir中定义的路径内,所以我们必须设置它,以便在PHP 5.6中加载它,并得到一个错误,类似于你的…后来我们注意到,文件夹20151012的名称代表PHP API版本,通常随着每个PHP版本而变化。由于我们没有使用后来的PHP版本,我们只是删除了PHP 7.1和7.0,然后再试一次。现在它可以正确地编译PHP 5.6,保存so文件到/usr/lib/php/20131226/couchbase.so,我们可以使用它了。

长话短说:

当编译一个扩展时,PECL把它放到像/usr/lib/php/20131226这样的文件夹中。最后一个文件夹名表示编译此扩展所针对的PHP API。请通过呼叫php -i | grep 'PHP API'检查您的版本,看看这些号码是否匹配。

如果您也安装了多个PHP版本,并希望保留它们,这个答案可能会对您有所帮助:

一个有用的提示

PHP有一个名为extension_dir的变量,它是使用相对路径加载扩展的所有路径的前缀。如果您只是通过设置文件名来加载模块(并让PHP添加前缀),您应该不会有这些问题。请注意,您必须为加载为zend_extension的扩展使用绝对路径-如f.e. xdebug…