Esiste un comando per abilitare / disabilitare un'estensione php dalla riga di comando?


46

Esiste un comando per abilitare / disabilitare un'estensione php facilmente dalla riga di comando? (Php.ini)


No, ma ci sono strumenti che puoi usare per analizzare e modificare la configurazione (ad es awk.).
Giordania,

1
fateci sapere cosa configurate per disabilitare l'estensione in php.ini in modo che possiamo renderlo semplice dalla riga di comando
Rahul Patil,

@RahulPatil Ho solo un commento extension=x.soper disabilitare x.
PHPst

Risposte:


27

Se stai usando PHP5.4 + sulla distro basata su Debian puoi usare php5enmod per abilitare e php5dismod per disabilitare le estensioni PHP.


7
Nota che funziona aggiungendo / rimuovendo i collegamenti in /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares

1
@ Pierre-OlivierVares Questo commento è stato l'informazione davvero rilevante qui.
Xatenev il

14

È possibile abilitare un'estensione dalla riga di comando utilizzando:

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

-dviene utilizzato per passare valori ini tramite la riga di comando. Sfortunatamente non c'è modo di disabilitare un'estensione sulla riga di comando se è stata configurata nel php.inifile. (Puoi ovviamente seguire le altre risposte ma non c'è niente che tu possa fare usando -do qualunque opzione del phpcomando.)


8

Su Lubuntu ne avevo bisogno pdo_sqlite.

Abilita manualmente:

$ sudo php5enmod pdo_sqlite

Se non funziona controlla:

$ ls /etc/php5/mods-available

L'elenco dei risultati mancava pdo_sqlite.ini. Dobbiamo installarlo.

$ sudo apt-get install php5-sqlite

O per php7:

$ sudo apt-get install php7-sqlite3

L'estensione sqlite3è abilitata automaticamente nella CLI e in Apache durante il processo di installazione e ora abbiamo mods-available: pdo_sqlite.ini, sqlite3.ini.

Disabilita l'estensione con:

$ sudo php5dismod pdo_sqlite

4

È possibile specificare -nper evitare il caricamento di eventuali estensioni da php.ini. Questo può migliorare alcune prestazioni quando ne usi alcune (ad es. XDebug). Per esempio

php -n -r "phpinfo();"

1
Qualche modo per impedire il caricamento di un'estensione (come memcached) su un server ospitato, sebbene sia inizialmente impostata? Non controllo la configurazione del mio host, ma solo gli script. Sospetto che sia in qualche modo incasinato con le mie sessioni e vorrei assicurarmi che sia spento dato che non lo uso davvero ..
userfuser

3

Devi usare -ne poi aggiungere ogni estensione necessaria usando-dextension

Esempio:

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

2

Puoi semplicemente usare

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

-i.bkp prende il backup come php.php.bkp e scrive nel file originale

&& se il primo comando ha esito positivo, ricaricare il servizio httpd.

ma noto solo che sed dà lo stato di uscita 0 quando lo schema di ricerca non corrisponde, quindi puoi usarlo

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"

Oppure puoi usare lo script seguente per abilitare e disabilitare:

#!/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
L'estensione può anche essere aggiunta nei conf.d/*.inifile. Forse è necessario apportare alcune modifiche?
GHugo

Sì, dobbiamo apportare modifiche per lo stesso, hai provato qualcosa?
Rahul Patil,

2

utilizzo: phpenmod [-v ALL | php_version] [-s ALL | nome_sapi] nome_modulo [nome_modulo_2]

Quindi usa phpenmod -s cli yourextension


Questo comando è usato nelle versioni Debian più recenti, come Stretch, in cui PHP5 / PHP7 possono essere eseguiti fianco a fianco.
Jacob Hume l'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.