Расширение 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, как это было до обновления?

4 ответа

Решение

ОК, я нашел ответ сам. Проблема была в ошибках в конфигурации. На новейшем 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, потому что все эти настройки конфигурации должны быть действительно выполнены менеджером пакетов.

I was having the same problem with the same error.

FWIW - для меня работало перемещение "extension=solr.so" из верхней части моего файла php.ini в нижнюю часть - очевидно, порядок важен, и расширение curl нужно сначала вытянуть.

Надеюсь, это кому-нибудь поможет.

Модуль curl должен быть загружен ДО модуля solr. Итак, убедитесь, что у вас есть что-то подобное в conf.d: 20-curl.ini 30-solr.ini (а не 10-solr.ini)

Или просто добавьте "extension=solr.so" после вашего "extension=curl.so"

Для любого, кто работает под 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

и вам следует все сделать!

Другие вопросы по тегам