Existe algum comando para ativar / desativar uma extensão php na linha de comando?

46

Existe algum comando para ativar / desativar uma extensão php facilmente na linha de comando? (php.ini)

PHPst
fonte
Não, mas existem ferramentas que você pode usar para analisar e modificar a configuração (por exemplo awk).
31413 jordanm
1
apenas deixe-nos saber o que você configurar para desabilitar a extensão no php.ini para que possamos fazer é fácil a partir da linha de comando
Rahul Patil
@RahulPatil Acabei de comentar extension=x.sopara desativar o x.
PHPst 26/02

Respostas:

27

Se você estiver usando o PHP5.4 + na distribuição baseada no Debian, poderá usar o php5enmod para ativar e o php5dismod para desativar as extensões PHP.

cherrysoft
fonte
7
Nota Isso funciona, adicionando / removendo os links em /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares
1
@ Pierre-OlivierVares Este comentário foi a informação realmente relevante aqui.
Xatenev 22/01
14

Você pode habilitar uma extensão na linha de comando usando:

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

-dé usado para transmitir valores ini através da linha de comando. Infelizmente, não há como desativar uma extensão na linha de comando se ela tiver sido configurada no php.iniarquivo. (Você pode seguir as outras respostas, é claro, mas não há nada que possa fazer usando -dou qualquer outra opção do phpcomando.)

hek2mgl
fonte
8

No Lubuntu eu precisava pdo_sqlite.

Ativar manualmente:

$ sudo php5enmod pdo_sqlite

Se não funcionar, verifique:

$ ls /etc/php5/mods-available

A lista de resultados estava ausente pdo_sqlite.ini. Temos que instalá-lo.

$ sudo apt-get install php5-sqlite

Ou para php7:

$ sudo apt-get install php7-sqlite3

A extensão sqlite3é ativada automaticamente na CLI e no Apache durante o processo de instalação e agora temos mods-available: pdo_sqlite.ini, sqlite3.ini.

Desativar extensão com:

$ sudo php5dismod pdo_sqlite
Vladimir Vukanac
fonte
4

Você pode especificar -npara evitar o carregamento de qualquer extensão php.ini. Isso pode melhorar um pouco o desempenho quando você estiver usando alguns (por exemplo, XDebug). Por exemplo

php -n -r "phpinfo();"
kenorb
fonte
1
Existe alguma maneira de impedir o carregamento de uma extensão (como o memcached) em um servidor hospedado, embora ela esteja configurada inicialmente? Eu não controlo a configuração do meu host, apenas os scripts. Estou suspeitando que é de alguma forma bagunçar com minhas sessões e gostaria de se certificar de que está desligado desde que eu realmente não usá-lo ..
userfuser
3

Você precisa usar -ne depois anexar cada extensão necessária usando-dextension

Exemplo:

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

Você pode simplesmente usar

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

-i.bkp faça backup como php.php.bkp e grave no arquivo original

&& se o primeiro comando for bem-sucedido, recarregue o serviço httpd.

mas noto que o sed está dando o status de saída 0 quando o padrão de pesquisa não corresponde para que você possa 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"

Ou você pode usar o script abaixo para ativar e desativar:

#!/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
fonte
2
A extensão também pode ser adicionada aos conf.d/*.iniarquivos. Talvez algumas modificações precisem ser feitas?
GHugo
Sim, precisamos fazer alterações para o mesmo, você já tentou alguma coisa?
Rahul Patil 28/03
2

uso: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] module_name [module_name_2]

Então use phpenmod -s cli yourextension

neoteknic
fonte
Este comando é usado em versões mais recentes do Debian, como Stretch, onde o PHP5 / PHP7 pode ser executado lado a lado.
Jacob Hume
-1

Por favor, checar isto

Todos os arquivos de configuração dos módulos PHP instalados estão disponíveis no diretório / etc / php / PHP_VERSION / mods-available

Dulanjana K
fonte