Existe-t-il une commande pour activer / désactiver une extension php en ligne de commande?


46

Y at-il une commande pour activer / désactiver une extension php facilement en ligne de commande? (php.ini)


Non, mais il existe des outils que vous pouvez utiliser pour analyser et modifier la configuration (par exemple awk).
Jordanie

1
faites-nous simplement savoir ce que vous configurez pour désactiver l’extension dans le fichier php.ini afin que nous puissions effectuer facilement la procédure en ligne de commande
Rahul Patil le

@RahulPatil Je viens de commenter extension=x.sopour désactiver x.
PHPst

Réponses:


27

Si vous utilisez PHP 5.4 + sur une distribution basée sur Debian, vous pouvez utiliser php5enmod pour activer et php5dismod pour désactiver les extensions PHP.


7
Notez que ceci fonctionne en ajoutant / supprimant des liens dans /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares

1
@ Pierre-OlivierVares Ce commentaire était l'information vraiment pertinente ici.
Xatenev

14

Vous pouvez activer une extension à partir de la ligne de commande en utilisant:

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

-dest utilisé pour transmettre les valeurs ini via la ligne de commande. Malheureusement, il n’ya aucun moyen de désactiver une extension sur la ligne de commande si elle a été configurée dans le php.inifichier. (Vous pouvez bien sûr suivre les autres réponses, mais vous ne pouvez rien utiliser à l’aide de l’ -doption ou de n’importe quelle option de la phpcommande.)


8

Sur Lubuntu j'avais besoin pdo_sqlite.

Activer manuellement:

$ sudo php5enmod pdo_sqlite

Si ne fonctionne pas, vérifiez:

$ ls /etc/php5/mods-available

La liste de résultats était manquante pdo_sqlite.ini. Nous devons l'installer.

$ sudo apt-get install php5-sqlite

Ou pour php7:

$ sudo apt-get install php7-sqlite3

L'extension sqlite3est activée automatiquement dans la CLI et dans Apache lors du processus d'installation. Nous avons maintenant mods-available: pdo_sqlite.ini, sqlite3.ini.

Désactiver l'extension avec:

$ sudo php5dismod pdo_sqlite

4

Vous pouvez spécifier -npour éviter le chargement des extensions php.ini. Cela peut améliorer certaines performances lorsque vous en utilisez (par exemple, XDebug). Par exemple

php -n -r "phpinfo();"

1
Un moyen d'empêcher le chargement d'une extension (telle que memcached) sur un serveur hébergé, bien qu'il ait été configuré initialement? Je ne contrôle pas la configuration de mon hôte, mais uniquement les scripts. Je doutât salit en quelque sorte avec mes séances et je voudrais vous assurer qu'il est hors car je ne l' utilise pas vraiment ..
userfuser

3

Vous devez utiliser -npuis ajouter chaque extension nécessaire en utilisant-dextension

Exemple:

php -n -dextension=json.so -dextension=phar.so composer.phar update

2

Vous pouvez simplement utiliser

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

-i.bkp prend la sauvegarde en tant que php.php.bkp et écrit dans le fichier original

&& Si la première commande aboutit, rechargez le service httpd.

mais je viens de noter que sed donnant le statut de sortie 0 lorsque la recherche ne correspond pas, vous pouvez donc utiliser

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"

Ou vous pouvez utiliser le script ci-dessous pour activer et désactiver:

#!/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 $*

2
Une extension peut également être ajoutée dans des conf.d/*.inifichiers. Peut-être que quelques modifications doivent être faites?
GHugo

Oui, nous devons faire les mêmes changements, avez-vous déjà essayé?
Rahul Patil

2

utilisation: phpenmod [-v ALL | version_php] [-s ALL | nom_ sapi] nom_module [nom_module_2]

Alors utilisez phpenmod -s cli yourextension


Cette commande est utilisée dans les versions plus récentes de Debian, telles que Stretch, où PHP5 / PHP7 peut être exécuté côte à côte.
Jacob Hume

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.