php-fpm не загружает расширение kafka, а php cli —

Я компилирую расширение php kafka как эта ссылка говорит.

я могу использовать Kafka Класс в режиме php cli, но получите Class 'Kafka' not found ошибка в режиме php-fpm (веб-запрос).

php --info | grep kafka указать расширение присутствует в то время как phpinfo в html указать расширение, которое отсутствует.

Я могу подтвердить от phpinfo page что php-fpm и php-cli используют один и тот же php.ini.

Итак, как я могу определить, где проблема?

версия php: 5.5.13
версия php-fpm: 5.5.13

0

Решение

Я нахожу ответ.

Class 'Kafka' not found ошибка в режиме php-fpm вызвана тем, что php-fpm не может загрузить расширение Kafka. Хотя я добавляю extension=kafka.so в php.ini, Но при загрузке расширения произошла ошибка.

Я нашел причину использования dl загрузить расширение вручную и получить ошибку в ответе. Почему php-fpm хранит молчание, когда в процессе загрузки расширения произошла какая-то ошибка. Может быть, я пропустил некоторые настройки?

Во всяком случае, причина найдена. Php-fpm не может загружать librdkafka во время загрузки расширения kafka. Либрдкафка в реж /usr/local/lib, которого нет в пути поиска ld в red-hat. Проверьте /etc/ld.so.conf для вашего пути поиска.

добавлять /usr/local/lib в /etc/ld.so.conf и запустите ldconfig, чтобы решить проблему.

Причина, по которой работает режим cli, заключается в том, что переменная $ LD_LIBRARY_PATH = «/ usr / local / lib».

Для получения дополнительной информации о процессе загрузки, проверьте эта ссылка

Список каталогов для поиска хранится в файле /etc/ld.so.conf. Многие производные от Red Hat дистрибутивы обычно не включают / usr / local / lib в файл /etc/ld.so.conf. Я считаю это ошибкой, и добавление / usr / local / lib в /etc/ld.so.conf — это общее «исправление», необходимое для запуска многих программ в системах, производных от Red Hat.

Поиск всех этих каталогов при запуске программы был бы крайне неэффективным, поэтому фактически используется механизм кэширования. Программа ldconfig (8) по умолчанию считывает файл /etc/ld.so.conf, устанавливает соответствующие символические ссылки в каталогах динамических ссылок (чтобы они следовали стандартным соглашениям), а затем записывает кеш в / etc / ld.so.cache, который затем используется другими программами. Это значительно ускоряет доступ к библиотекам. Подразумевается, что ldconfig должен запускаться всякий раз, когда добавляется DLL, когда DLL удаляется или когда изменяется набор каталогов DLL; Запуск ldconfig часто является одним из шагов, выполняемых менеджерами пакетов при установке библиотеки. При запуске динамический загрузчик фактически использует файл /etc/ld.so.cache, а затем загружает необходимые библиотеки.

Руководство по установке в GitHub Имеется в виду запуск ldconfig, но у red-hat есть особая ситуация, когда директория lib отсутствует в файле конфигурации ld.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector