Потокобезопасные php-pecl-memcache и php-pecl-mongo

Я хочу переключить сервер Fedora, работающий под Apache, с prefork на рабочий.

Все вроде бы хорошо, кроме библиотек php для Mongo и Memcache. У кого-нибудь был какой-нибудь успех, заставляющий их работать с mpd работника httpd?

Обратите внимание, что я установил memcache и mongo следующим образом:

yum install php-pecl-memcache php-pecl-mongo

По какой-то причине я попытался скопировать.so из /usr/lib64/php/modules/ в /usr/lib64/php-zts/modules/, но я получил эти ошибки:

Предупреждение PHP: Запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib64/php-zts/modules/memcache.so' - /usr/lib64/php-zts/modules/memcache.so: неопределенный символ: basic_globals в Unknown on строка 0 Предупреждение PHP: Запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib64/php-zts/modules/mongo.so' - /usr/lib64/php-zts/modules/mongo.so: неопределенный символ: core_globals in Неизвестно в строке 0

1 ответ

Вы не можете просто скопировать модули из /usr/lib64/php/modules/ в /usr/lib64/php-zts/modules/ -ZTS (многопоточные) и не ZTS сборки PHP имеют разные модули ABI.

Очевидно, пакет php-pecl-memcache для Fedora 18 и даже пакет Rawhide созданы без поддержки ZTS, поэтому их нельзя использовать с mod_php в многопоточной Apache MPM.

У вас есть несколько вариантов здесь:

  1. Согласно рекомендации в FAQ по PHP, наиболее надежным способом использования PHP вместе с многопоточным Apache MPM является режим FastCGI (например, с php-fpm), так что PHP будет работать в отдельных однопоточных процессах. Таким образом, вы можете использовать все доступные расширения PHP - даже те, которые используют не-поточные библиотеки и вообще не могут работать в многопоточном процессе.

  2. Если вам действительно нужно использовать mod_php с многопоточным MPM, вы можете использовать сторонние пакеты ( например, такие), которые собраны с поддержкой php-zts (обратите внимание, что /usr/lib64/php-zts/modules/memcache.so присутствует в списке файлов).

  3. Если вы не можете найти готовый бинарный пакет с поддержкой php-zts для нужного вам расширения PHP, вы можете попытаться пересобрать пакет самостоятельно, но даже это может оказаться невозможным, если у рассматриваемого расширения нет поддержки ZTS. код.

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