Czy jest jakieś polecenie, aby włączyć / wyłączyć rozszerzenie php z wiersza poleceń?


46

Czy jest jakieś polecenie, aby łatwo włączyć / wyłączyć rozszerzenie php z wiersza poleceń? (php.ini)


Nie, ale istnieją narzędzia, których można użyć do przeanalizowania i zmodyfikowania konfiguracji (np awk.).
jordanm

1
po prostu daj nam znać, co skonfigurowałeś, aby wyłączyć rozszerzenie w php.ini, abyśmy mogli to zrobić jest łatwe z wiersza poleceń
Rahul Patil

@RahulPatil Po prostu komentuję, extension=x.soaby wyłączyć x.
PHPst

Odpowiedzi:


27

Jeśli używasz PHP5.4 + na dystrybucji opartej na Debianie, możesz użyć php5enmod, aby włączyć i php5dismod, aby wyłączyć rozszerzenia PHP.


7
Zauważ, że działa to poprzez dodanie / usunięcie linków w /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares

1
@ Pierre-OlivierVares Ten komentarz był naprawdę istotną informacją tutaj.
Xatenev

14

Możesz włączyć rozszerzenie z wiersza poleceń, używając:

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

-dsłuży do przekazywania wartości ini przez wiersz poleceń. Niestety nie ma możliwości wyłączenia rozszerzenia w wierszu poleceń, jeśli zostało skonfigurowane w php.inipliku. (Oczywiście możesz postępować zgodnie z innymi odpowiedziami, ale nie możesz nic zrobić, używając żadnej -dopcji phppolecenia).


8

Na Lubuntu potrzebowałem pdo_sqlite.

Włącz ręcznie:

$ sudo php5enmod pdo_sqlite

Jeśli nie działa, sprawdź:

$ ls /etc/php5/mods-available

Brak listy wyników pdo_sqlite.ini. Musimy to zainstalować.

$ sudo apt-get install php5-sqlite

Lub dla php7:

$ sudo apt-get install php7-sqlite3

Rozszerzenie sqlite3jest automatycznie włączane w CLI i Apache podczas procesu instalacji, a teraz mamy mods-available: pdo_sqlite.ini, sqlite3.ini.

Wyłącz rozszerzenie za pomocą:

$ sudo php5dismod pdo_sqlite

4

Możesz określić, -naby uniknąć ładowania z rozszerzeń php.ini. Może to poprawić wydajność podczas korzystania z niej (np. XDebug). Na przykład

php -n -r "phpinfo();"

1
W jaki sposób można zapobiec ładowaniu rozszerzenia (np. Memcached) przed uruchomieniem na serwerze hostowanym, chociaż jest ono początkowo skonfigurowane? Nie kontroluję konfiguracji hosta, tylko skrypty na nim. Podejrzewam, że to w jakiś sposób psuje moje sesje i chciałbym się upewnić, że jest wyłączony, ponieważ tak naprawdę go nie używam ..
userfuser

3

Musisz użyć, -na następnie dołączyć każde potrzebne rozszerzenie za pomocą-dextension

Przykład:

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

2

Możesz po prostu użyć

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

-i.bkp weź kopię zapasową jako php.php.bkp i zapisz w oryginalnym pliku

&& jeśli pierwsze polecenie zakończy się powodzeniem, przeładuj usługę httpd.

ale zauważam, że sed daje status wyjścia 0, gdy tupot wyszukiwania nie pasuje, więc możesz użyć

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"

Lub możesz użyć poniższego skryptu do włączania i wyłączania:

#!/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
Rozszerzenie można również dodać w conf.d/*.iniplikach. Może trzeba zmodyfikować?
GHugo

Tak, musimy wprowadzić zmiany w tym samym, próbowaliście już czegoś?
Rahul Patil

2

użycie: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] nazwa_modułu [nazwa_modułu_2]

Więc użyj phpenmod -s cli yourextension


To polecenie jest używane w nowszych wersjach Debiana, takich jak Stretch, w których PHP5 / PHP7 można uruchamiać równolegle.
Jacob Hume

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.