Я хочу переключить сервер Fedora с Apache с prefork на worker.
Вроде все нормально, кроме библиотек php для Mongo и Memcache. Кому-нибудь удалось заставить их работать с httpd worker mpm?
Обратите внимание, что я установил 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: undefined symbol: basic_globals in Unknown on строка 0 Предупреждение PHP: запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib64/php-zts/modules/mongo.so' - /usr/lib64/php-zts/modules/mongo.so: неопределенный символ: core_globals в Неизвестно в строке 0
Вы не можете просто копировать модули из /usr/lib64/php/modules/
к /usr/lib64/php-zts/modules/
- ZTS (многопоточная) и не-ZTS сборки PHP имеют разные ABI модуля.
Видимо пакет php-pecl-memcache для Fedora 18 и даже Пакет Rawhide созданы без поддержки ZTS, поэтому их нельзя использовать с mod_php в многопоточном MPM Apache.
Здесь у вас есть несколько вариантов:
Согласно рекомендация в PHP FAQ, самый надежный способ использовать PHP вместе с многопоточным Apache MPM - это режим FastCGI (например, с php-fpm), так что PHP будет работать в отдельных однопоточных процессах. Таким образом, вы можете использовать все доступные расширения PHP - даже те, которые используют небезопасные библиотеки и вообще не могут работать в многопоточном процессе.
Если вам действительно нужно использовать mod_php с многопоточным MPM, вы можете использовать сторонние пакеты (как это), которые построены с поддержкой php-zts (обратите внимание, что /usr/lib64/php-zts/modules/memcache.so
присутствует в списке файлов).
Если вы не можете найти готовый двоичный пакет с поддержкой php-zts для нужного вам расширения PHP, вы можете попробовать перестроить пакет самостоятельно, но даже это может оказаться невозможным, если рассматриваемое расширение не имеет поддержки ZTS в своем код.