Thread Safe php-pecl-memcache e php-pecl-mongo

1

Eu estou olhando para mudar um servidor Fedora rodando o Apache do prefork para o worker.

Tudo parece estar bem, exceto as bibliotecas php do Mongo e do Memcache. Alguém já teve algum sucesso conseguindo estes para trabalhar com o trabalhador httpd mpm?

Note que eu instalei memcache e mongo assim:

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

Por um capricho, tentei copiar o .so de /usr/lib64/php/modules/ para /usr/lib64/php-zts/modules/ , mas recebi esses erros:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php-zts/modules/memcache.so' - /usr/lib64/php-zts/modules/memcache.so: undefined symbol: basic_globals in Unknown on line 0 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php-zts/modules/mongo.so' - /usr/lib64/php-zts/modules/mongo.so: undefined symbol: core_globals in Unknown on line 0

    
por dtbarne 26.02.2013 / 20:22

1 resposta

2

Você não pode simplesmente copiar módulos de /usr/lib64/php/modules/ para /usr/lib64/php-zts/modules/ - ZTS (encadeados) e construções não ZTS de PHP têm diferentes módulos ABI.

Aparentemente, o pacote php-pecl-memcache para o Fedora 18 e até mesmo o pacote Rawhide são construídos sem suporte a ZTS, então eles não são utilizáveis com mod_php em um segmentado Apache MPM.

Você tem várias opções aqui:

  1. De acordo com a recomendação na FAQ do PHP , o A maneira mais confiável de usar o PHP junto com um Apache MPM encadeado é o modo FastCGI (por exemplo, com php-fpm), para que o PHP seja executado em processos de encadeamento único separados. Dessa forma, você pode usar todas as extensões PHP disponíveis - mesmo aquelas que usam bibliotecas não thread-safe e não podem trabalhar em um processo multithreaded.

  2. Se você realmente precisa usar mod_php com um MPM encadeado, você pode usar pacotes de terceiros ( como este ) que são construídos com suporte a php-zts (observe que /usr/lib64/php-zts/modules/memcache.so está presente na lista de arquivos).

  3. Se você não puder encontrar um pacote binário pronto com suporte php-zts para uma extensão PHP que você precisa, você pode tentar reconstruir o pacote você mesmo, mas mesmo isso pode não ser possível se a extensão em questão fizer não tem suporte a ZTS em seu código.

por 09.03.2013 / 09:56