Alterar diretório de módulos php

8

Estou compilando php e sua configuração de diretório de módulos para / usr / lib64 / 20090626-zts

Gostaria de mudar isso para / usr / lib64 / php / modules, mas não consigo encontrar uma opção de configuração para fazer isso.

Posso alterá-lo no meu php.ini e mover o diretório, mas quando executo o phpize e faço um novo módulo, ele ainda o coloca em / usr / lib64 / 20090626-zts

copacético
fonte
Tem não tem tempo para testar isso: EXTENSION_DIR=/usr/lib64/php/modules phpize.
Mark Wagner

Respostas:

4

Eu sugeriria que o / usr / lib64 / php / modules fizesse um link simbólico para a pasta com o ID. Isso evita misturar extensões de diferentes versões do PHP a longo prazo.

Além disso: você deve poder defini-lo definindo EXTENSION_DIRcomo variável de ambiente antes de executar o configure do PHP. algo como

 $ EXTENSION_DIR=/my/location ./configure --with-some-extension
johannes
fonte
Sim, isso faz sentido, não quero que meus módulos entrem em conflito no futuro. Acho que vou deixar o nome da pasta em paz.
copacetic
8

Verifique o diretório de extensão atual com:

php-config --extension-dir

e você pode alterá-lo, definindo extension_direm php.ini:

extension_dir="/usr/lib64/php/modules"

Não se esqueça de reiniciar o Apache.

quanta
fonte
0

Meu problema não era idêntico, mas como essa foi a primeira a aparecer com respostas que foram muito úteis, adicionarei meus comentários.

Eu estava tendo problemas para que o PHP (no Centos7 executando em um contêiner de docker) usasse o MySQL devido à configuração do diretório - embora eu estivesse usando binários pré-criados e não compilando nada. Embora os vários módulos pdo e mysqlnd.so e arquivos .ini tenham sido instalados no meu contêiner (apenas usando o padrão yum install php72e todos os outros itens especificados no assistente de instalação do PHP ), eles não estavam nos locais padrão que o PHP os procurava. Eu não tenho ideia do porquê. Talvez seja algum tipo de coisa de estivador?

De qualquer forma, para resolver o problema, tive que repetir uma extension_dirdiretiva como minha PHP.inie TAMBÉM definir a PHP_INI_SCAN_DIRvariável env. Estes são os comandos relevantes do meu Dockerfile

ENV PHP_INI_SCAN_DIR=/etc/php.d/
RUN echo 'extension_dir = "/usr/lib64/php/modules"' >> /etc/opt/remi/php72/php.ini

Espero que isso não resulte em conflitos de módulos mais tarde, como o @johanes avisa.

charlesdeb
fonte
> "eles não estavam nos locais padrão". Você não seguiu as instruções do assistente corretamente, escolhendo "versão única", tudo instalado nos locais padrão. O SCL usa caminhos diferentes para permitir várias versões.
Remi Collet
@RemiCollet obrigado pela resposta. Eu escolhi uma versão única do assistente - que é o que eu acho que quero, pois eu quero apenas uma versão do PHP no meu contêiner. A única parte das instruções do assistente que eu não adicionei no meu arquivo docker foi `yum --enablerepo = remi-php72-test install php-xxx` e yum update. Estou faltando alguma coisa aqui?
charlesdeb 16/02/19
Estes comandos mais recentes são para pacotes de teste, e por extensão adicional (substitua xxx pelo nome da extensão que você quiser)
Remi Collet
@RemiCollet Desculpe, devo ser um pouco idiota. Você está dizendo que, se usar os pacotes de teste, isso resolverá o problema dos módulos mysql que não estão nas .../remi/...pastas?
charlesdeb
1
Eu digo que os pacotes php- * (versão única) usam caminhos padrão e o php72-php- * (SCL, várias versões) usa / opt / remi. Veja blog.remirepo.net/pages/English-FAQ#scl
Remi Collet