CouchBase扩展安装错误

时间:2016-08-23 09:31:53

标签: php ubuntu couchbase

我使用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

1 个答案:

答案 0 :(得分:3)

我们在这里遇到了同样的问题。这是故事以及我们如何解决它。

在我们的机器上,我们试图让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-file保存到/usr/lib/php/20131226/couchbase.so,我们可以使用它。

长话短说:

编译扩展时,PECL会将其放入/usr/lib/php/20131226这样的文件夹中。最后一个文件夹名称表示此扩展编译的PHP API。请致电php -i | grep 'PHP API'查看您的版本,看看这些数字是否匹配。

如果您还安装了多个PHP版本并希望保留它们,则此答案可能会有所帮助:pecl installs for previous php version

一个有用的提示

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