solr php 扩展无法在最新的 Debian Wheezy 上运行

solr php 扩展无法在最新的 Debian Wheezy 上运行

我正在尝试在最近升级的 Debian Wheezy 上使用 Solr PHP 扩展。它可以完美地从 PECL 和源代码安装,但它并没有提供预期的功能,而是在每次运行 PHP 时都出现以下情况:

PHP Warning:  PHP Startup: Unable to load dynamic library 
'/usr/lib/php5/20100525/solr.so' - /usr/lib/php5/20100525/solr.so: 
undefined symbol: curl_easy_getinfo in Unknown on line 0

使用该扩展的脚本也会引发错误

PHP Error[2]: include(SolrClient.php): failed to open stream: 
No such file or directory in file <...path to my autoloader...>

我的主要观点是它之前已经设置好了,并且运行良好。在相关软件包的升级中,只有 PHP 和 libcurl 的版本发生了变化。Solr 本身的实例保持原样。

我有所有可能的libcurl库:

$ locate libcurl
...
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.2.0
/usr/lib/x86_64-linux-gnu/libcurl.a
/usr/lib/x86_64-linux-gnu/libcurl.la
/usr/lib/x86_64-linux-gnu/libcurl.so
/usr/lib/x86_64-linux-gnu/libcurl.so.3
/usr/lib/x86_64-linux-gnu/libcurl.so.4
/usr/lib/x86_64-linux-gnu/libcurl.so.4.2.0
...
/usr/lib32/libcurl.so.3
/usr/lib32/libcurl.so.4
/usr/lib32/libcurl.so.4.2.0
...

我已经php5-curl使用 aptitude 安装了软件包版本 5.4.4-2。

我安装了 Sorl 扩展

sudo pecl install solr

(使用各种组合-f-n标志也尝试过solr-beta)和

wget ...
cd ...
phpize
./configure
make 
make install

我正在安装 1.0.2 版的扩展程序,因为它在从 Squeeze 升级到 Wheezy 之前可以正常工作。正如我之前所说,扩展程序安装时没有任何错误。

我已经把extension=solr.so咒语加到/etc/php5/mods-available/solr.ini

我应该做什么魔法才能使 solr 扩展工作?这是真的吗?我唯一的解决方案是将 libcurl 版本降级到升级之前?

答案1

好的,我自己找到了答案。问题出在配置错误上。在最新的 Wheezy 上,PHP 的配置树如下:

/etc/php5/mods-available/*.ini # here's the ini files containing `extension=modulename.so` lines and module-specific config.
         /conf.d/NN-*.ini      # here's the symlinks to real .ini files in mods-available
         /cli/conf.d           # symlink from local CLI conf.d to global conf.d 
         /apache/conf.d        # symlink from local apache conf.d to global conf.d

因此我需要做以下几件事:

  • 添加文件/etc/php5/mods-available/solr.ini并添加以下行"extension=solr.so"
  • /etc/php5/conf.d/30-solr.ini添加指向真实 solr.ini 的符号链接
  • 做同样的事情curl.so
  • 确保"extension=solr.so""extension=curl.so"没有写成任何地方否则。这就是导致这个奇怪的错误信息的原因。

我认为配置变得混乱是因为最近从 Squeeze 升级到 Wheezy,因为所有这些配置设置都应该由包管理器完成。

答案2

我遇到了同样的问题和同样的错误。

FWIW - 对我有用的是将“extension=solr.so”从我的 php.ini 文件的顶部移动到底部 - 显然顺序很重要,并且需要先拉入 curl 扩展。

希望它能对某人有所帮助。

答案3

对于任何使用 CentOS 6.4 的人,这对我来说都行。感谢 hijarian,这是对他的答案的改编。

安装完所有内容并编译 solr.so 扩展后,solr.ini在下方创建一个新文件/etc/php.d

例如使用 nano: nano /etc/php.d/solr.ini

在该文件中添加一行extension=solr.so,保存并退出。

打开/usr/php.ini文件并添加extension=solr.so,保存并退出。

重新启动 Apache...

/etc/init.d/httpd restart

你就大功告成了!

答案4

curl 模块必须在 solr 模块之前加载。因此,请确保在 conf.d 中有类似以下内容:20-curl.ini 30-solr.ini(而不是 10-solr.ini)

或者在“extension=curl.so”后添加“extension=solr.so”

相关内容