Cambiar directorio de módulos php

8

Estoy compilando php, y está configurando mi directorio de módulos a / usr / lib64 / 20090626-zts

Me gustaría cambiar esto a / usr / lib64 / php / modules, pero no puedo encontrar una opción de configuración para hacerlo.

Puedo cambiarlo en mi php.ini y mover el directorio, pero cuando ejecuto phpize y hago un nuevo módulo, todavía lo coloca en / usr / lib64 / 20090626-zts

copacetic
fuente
¿No tiene tiempo para probar esto: EXTENSION_DIR=/usr/lib64/php/modules phpize.
Mark Wagner

Respuestas:

4

Sugeriría hacer / usr / lib64 / php / modules un enlace simbólico a la carpeta con la ID. Esto evita mezclar extensiones de diferentes versiones de PHP a largo plazo.

Además de eso: debe poder establecerlo estableciendo EXTENSION_DIRcomo variable de entorno antes de ejecutar la configuración de PHP. algo como

 $ EXTENSION_DIR=/my/location ./configure --with-some-extension
johannes
fuente
Sí, eso tiene sentido, no quiero que mis módulos entren en conflicto en el futuro. Creo que dejaré solo el nombre de la carpeta.
copacetic
8

Verifique el directorio de extensiones actual con:

php-config --extension-dir

y se puede cambiar mediante el establecimiento extension_dirde php.ini:

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

No olvides reiniciar Apache.

quanta
fuente
0

Mi problema no fue idéntico, pero dado que esta pregunta fue la primera en aparecer con respuestas que finalmente fueron muy útiles, agregaré mis comentarios.

Estaba teniendo problemas para hacer que PHP (bajo Centos7 ejecutándose en un contenedor docker) usara MySQL debido a la configuración del directorio, aunque estaba usando binarios precompilados y no estaba compilando nada. Aunque los diversos módulos pdo y mysqlnd.so y los archivos .ini se instalaron en mi contenedor (solo usando el estándar yum install php72y todas las demás cosas especificadas en el asistente de instalación de PHP ), no estaban en los lugares predeterminados que PHP los estaba buscando. No tengo ni idea de porqué. Tal vez es una especie de estibador?

De todos modos, para resolver el problema, tuve que hacer eco de una extension_dirdirectiva para mí PHP.iniy TAMBIÉN configuré la PHP_INI_SCAN_DIRvariable env. Estos son los comandos relevantes de mi 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 esto no resulte en conflictos de módulos más adelante, como advierte @johanes.

charlesdeb
fuente
> "no estaban en los lugares predeterminados". No siguió las instrucciones del asistente correctamente, eligió "versión única", todo está instalado en los lugares predeterminados. SCL utiliza diferentes rutas para permitir múltiples versiones.
Remi Collet
@RemiCollet gracias por la respuesta. Elegí una versión única del asistente, que es lo que creo que quiero, ya que solo quiero una versión de PHP en mi contenedor. La única parte de las instrucciones del asistente que no agregué en mi dockerfile fue `yum --enablerepo = remi-php72-test install php-xxx` y yum update. ¿Me estoy perdiendo de algo?
charlesdeb
Estos últimos comandos son para paquetes de prueba y para extensiones adicionales (reemplace xxx por el nombre de la extensión que desee)
Remi Collet
@RemiCollet Lo siento, debo ser un poco tonto. ¿Está diciendo que si uso los paquetes de prueba esto solucionará mi problema de que los módulos mysql no entren en las .../remi/...carpetas?
charlesdeb
1
Digo que los paquetes php- * (versión única) usan rutas estándar, y php72-php- * (SCL, versiones múltiples) usan / opt / remi. Ver blog.remirepo.net/pages/English-FAQ#scl
Remi Collet