¿Hay algún comando para habilitar / deshabilitar una extensión php desde la línea de comandos?

46

¿Hay algún comando para habilitar / deshabilitar una extensión php fácilmente desde la línea de comandos? (php.ini)

PHPst
fuente
No, pero hay herramientas que puede utilizar para analizar y modificar la configuración (por ejemplo awk).
jordanm
1
solo díganos qué configura para deshabilitar la extensión en php.ini para que podamos hacer que sea fácil desde la línea de comandos
Rahul Patil
@RahulPatil Acabo de comentar extension=x.sopara deshabilitar x.
PHPst

Respuestas:

27

Si está usando PHP5.4 + en la distribución basada en Debian, puede usar php5enmod para habilitar y php5dismod para deshabilitar las extensiones de PHP.

cherrysoft
fuente
77
Tenga en cuenta que esto funciona agregando / eliminando enlaces en /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares
1
@ Pierre-OlivierVares Este comentario fue la información realmente relevante aquí.
Xatenev
14

Puede habilitar una extensión desde la línea de comando usando:

php -d extension=/path/to/extension.so

-dse utiliza para pasar valores ini a través de la línea de comando. Desafortunadamente, no hay forma de deshabilitar una extensión en la línea de comando si se ha configurado en el php.iniarchivo. (Puede seguir las otras respuestas, por supuesto, pero no hay nada que pueda hacer usando -do cualquier opción del phpcomando).

hek2mgl
fuente
8

En Lubuntu que necesitaba pdo_sqlite.

Habilitar manualmente:

$ sudo php5enmod pdo_sqlite

Si no funciona, verifique:

$ ls /etc/php5/mods-available

Faltaba la lista de resultados pdo_sqlite.ini. Tenemos que instalarlo.

$ sudo apt-get install php5-sqlite

O para php7:

$ sudo apt-get install php7-sqlite3

La extensión sqlite3se habilita automáticamente en CLI y en Apache durante el proceso de instalación, y ahora tenemos mods-available: pdo_sqlite.ini, sqlite3.ini.

Deshabilitar extensión con:

$ sudo php5dismod pdo_sqlite
Vladimir Vukanac
fuente
4

Puede especificar -npara evitar que se carguen extensiones php.ini. Esto puede mejorar el rendimiento cuando está usando algo (por ejemplo, XDebug). P.ej

php -n -r "phpinfo();"
kenorb
fuente
1
¿Hay alguna forma de evitar que se cargue una extensión (como memcached) en un servidor alojado, aunque está configurado inicialmente? No controlo la configuración de mi host, solo las secuencias de comandos. Estoy sospechando que de alguna manera es jugar con mis sesiones y que le gustaría asegurarse de que está apagado, ya que no se sabe muy lo uso ..
userfuser
3

Tiene que usar -ny luego agregar cada extensión necesaria usando-dextension

Ejemplo:

php -n -dextension=json.so -dextension=phar.so composer.phar update
Cobuz Alexandru
fuente
2

Simplemente puedes usar

sed -i.bkp 's/^extension=x.so/# extension=x.so/' /path/of/php.ini && /etc/init.d/httpd reload

-i.bkp realiza una copia de seguridad como php.php.bkp y escribe en el archivo original

&& si el primer comando es exitoso, vuelva a cargar el servicio httpd.

pero acabo de notar que se está dando el estado de salida 0 cuando el patrón de búsqueda no coincide para que pueda usar

php_ini=/path/of/php.ini
__module=x.so
grep -q "^extension=$__module" $php_ini && { 
        sed -i.bkp "s/^extension=$__module/# extension=$__module/" $php_ini && 
        echo /etc/init.d/httpd reload; } || echo "cannot make requested change"

O puede usar el siguiente script para habilitar y deshabilitar:

#!/bin/bash

php_ini=/path/of/php.ini
__module="$2"


[[ ! -f $php_ini ]] && { echo "Error: Can not found $php_ini" >&2; 
                         echo "Please define php.ini path in $php_ini"; 
                         exit 1; }

[[  -z $__module ]] && { echo "Error: Please Type Module Name:" >&2; 
                          exit 1; }

show_help(){
cat <<_EOF
        Usage:    To enable :
                  $0 -ie  <modulename>

                  To disable :
                  $0 -id  <modulename>

        example:
                  $0 -i xyz.so
_EOF

}

do_enable() {
grep -Eq "# extension=$__module$" $php_ini && {
sed -i.bkp "s/^# extension\=$__module$/extension=$__module/" $php_ini &&
echo /etc/init.d/httpd reload; echo "Changes Successfully Done"; } || echo "cannot make requested change"
}

do_disable() {
grep -q "^extension=$__module" $php_ini && {
sed -i.bkp "s/^extension=$__module/# extension=$__module/" $php_ini &&
echo /etc/init.d/httpd reload; echo "Changes Successfully Done"; } || echo "cannot make requested change"
}

Main() {

case $1 in
        -ie) do_enable ;;
        -id) do_disable ;;
         *) show_help ;;
esac
}

Main $*
Rahul Patil
fuente
2
La extensión también podría agregarse en los conf.d/*.iniarchivos. Tal vez alguna modificación debe hacerse?
GHugo
Sí, tenemos que hacer cambios para lo mismo, ¿has intentado algo?
Rahul Patil
2

uso: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] nombre_módulo [nombre_módulo_2]

Entonces use phpenmod -s cli yourextension

neoteknic
fuente
Este comando se utiliza en versiones más recientes de Debian, como Stretch, donde PHP5 / PHP7 se pueden ejecutar de forma paralela.
Jacob Hume
-1

Por favor, chequee esto

Todos los archivos de configuración de los módulos PHP instalados están disponibles en el directorio / etc / php / PHP_VERSION / mods-available

Dulanjana K
fuente