Расширение 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
и вам следует все сделать!