Я пытаюсь использовать расширение Solr PHP в недавно обновленном Debian Wheezy. Он безупречно устанавливается как из 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
версия пакета 5.4.4-2 с aptitude.
Я установил расширения 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, которая была до обновления?
Хорошо, я сам нашел ответ. Проблема заключалась в ошибках в конфигурации. В новейшей версии 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.inicurl.so
"extension=solr.so"
и "extension=curl.so"
не написано везде еще. Это было причиной этого странного сообщения об ошибке.Я думаю, что конфигурация стала беспорядочной из-за недавнего обновления Squeeze до Wheezy, потому что вся эта настройка конфигурации должна действительно выполняться менеджером пакетов.
У меня была такая же проблема с той же ошибкой.
FWIW. У меня сработало перемещение «extension = solr.so» из верхней части моего файла php.ini в нижнюю часть - очевидно, что порядок важен, и сначала нужно вытащить расширение curl.
Надеюсь, это кому-то поможет.
Для всех, кто работал с CentOS 6.4, это сделало это за меня. Благодаря хиджариану, это адаптация его ответа.
После установки всего и компиляции расширения 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
и все должно быть сделано!
Модуль curl должен быть загружен ПЕРЕД модулем solr. Итак, убедитесь, что у вас есть что-то вроде этого в conf.d: 20-curl.ini 30-solr.ini (а не 10-solr.ini)
Или просто добавьте "extension = solr.so" после вашего "extension = curl.so"