2016-08-23 177 views
2

我使用PHP和couchbase的NoSQL数据库,当我安装在Ubuntu couchbase-EXT我在php -m命令得到了一个erorr象下面这样:CouchBase扩展安装错误

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 

回答

3

我们有同样的问题在这里。这是故事,以及我们如何修复它。

在我们的机器上,我们试图让PHP 5.6运行,并且希望编译PHP扩展以对抗它。我们还在同一台机器上安装了PHP 7.1和PHP 7.0。 PECL把编译好的文件放入/usr/lib/php/20151012/couchbase.so,它不在extension_dir定义的路径之内,所以我们必须完全设置它才能在PHP5.6中加载它,并且出现类似于你的错误...我们后来注意到的是,文件夹20151012的名称代表PHP API版本,它通常随每个PHP版本而变化。由于我们反正没有使用后来的PHP版本,我们只是删除了PHP 7.1和7.0并再次尝试。现在它正确编译了PHP 5.6,将这个文件保存到/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 ...