我正在尝试在最近升级的 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”