Потокобезопасные 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.
У вас есть несколько вариантов здесь:
Согласно рекомендации в FAQ по PHP, наиболее надежным способом использования PHP вместе с многопоточным Apache MPM является режим FastCGI (например, с php-fpm), так что PHP будет работать в отдельных однопоточных процессах. Таким образом, вы можете использовать все доступные расширения PHP - даже те, которые используют не-поточные библиотеки и вообще не могут работать в многопоточном процессе.
Если вам действительно нужно использовать mod_php с многопоточным MPM, вы можете использовать сторонние пакеты ( например, такие), которые собраны с поддержкой php-zts (обратите внимание, что
/usr/lib64/php-zts/modules/memcache.so
присутствует в списке файлов).Если вы не можете найти готовый бинарный пакет с поддержкой php-zts для нужного вам расширения PHP, вы можете попытаться пересобрать пакет самостоятельно, но даже это может оказаться невозможным, если у рассматриваемого расширения нет поддержки ZTS. код.