Назад | Перейти на главную страницу

расширение solr php не работает на новейшей версии Debian Wheezy

Я пытаюсь использовать расширение 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.ini
  • Сделайте то же самое с curl.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"