Есть ли команда для включения / отключения расширения php из командной строки?

46

Есть ли какая-либо команда для легкого включения / отключения расширения php из командной строки? (Php.ini)

PHPst
источник
Нет, но есть инструменты, которые вы можете использовать для анализа и изменения конфигурации (например awk).
Иордания
1
просто дайте нам знать, что вы настраиваете, чтобы отключить расширение в php.ini, чтобы мы могли легко это сделать из командной строки
Рахул Патил
@RahulPatil Я просто комментирую, extension=x.soчтобы отключить х.
PHPst

Ответы:

27

Если вы используете PHP5.4 + в дистрибутиве на основе Debian, вы можете использовать php5enmod для включения и php5dismod для отключения расширений PHP.

cherrysoft
источник
7
Обратите внимание, что это работает, добавляя / удаляя ссылки в /etc/php5/ enjapache2,cli,...casts/conf.d/
Пьер-Оливье Варес
1
@ Pierre-OlivierVares Этот комментарий был действительно актуальной информацией здесь.
Ксатенев
14

Вы можете включить расширение из командной строки, используя:

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

-dиспользуется для передачи значений ini через командную строку. К сожалению, нет способа отключить расширение в командной строке, если оно было настроено в php.iniфайле. (Конечно, вы можете следовать другим ответам, но вы ничего не можете сделать, используя -dкакую-либо опцию phpкоманды.)

hek2mgl
источник
8

На Лубунту мне нужно было pdo_sqlite.

Включить вручную:

$ sudo php5enmod pdo_sqlite

Если не работает, проверьте:

$ ls /etc/php5/mods-available

Список результатов отсутствует pdo_sqlite.ini. Мы должны установить это.

$ sudo apt-get install php5-sqlite

Или для php7:

$ sudo apt-get install php7-sqlite3

Расширение sqlite3автоматически включается в CLI и в Apache во время процесса установки, и теперь мы имеем mods-available: pdo_sqlite.ini, sqlite3.ini.

Отключить расширение с помощью:

$ sudo php5dismod pdo_sqlite
Владимир Вуканац
источник
4

Вы можете указать, -nчтобы избежать загрузки любых расширений из php.ini. Это может улучшить производительность при использовании некоторых (например, XDebug). Например

php -n -r "phpinfo();"
kenorb
источник
1
Любой способ предотвратить загрузку расширения (например, memcached) от загрузки на хост-сервере, хотя оно настроено изначально? Я не контролирую настройку своего хоста, только сценарии на нем. Я подозреваю, что это как-то портит мои сеансы, и я хотел бы убедиться, что оно отключено, поскольку я его не использую ..
userfuser
3

Вы должны использовать, -nа затем добавить каждое необходимое расширение, используя-dextension

Пример:

php -n -dextension=json.so -dextension=phar.so composer.phar update
Кобуз Александру
источник
2

Вы можете просто использовать

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

-i.bkp сделать резервную копию как php.php.bkp и записать в исходный файл

&& если первая команда выполнена успешно, перезагрузите службу httpd.

но я просто замечаю, что sed дает статус выхода 0, когда поиск не совпадает, так что вы можете использовать

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"

Или вы можете использовать приведенный ниже скрипт для включения и выключения:

#!/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
Расширение также может быть добавлено в conf.d/*.iniфайлы. Может быть, некоторые изменения должны быть сделаны?
Гуго
Да, мы должны сделать изменения для того же самого, вы пробовали что-нибудь?
Рахул Патил
2

использование: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] имя_модуля [имя_модуля_2]

Так что используйте phpenmod -s cli yourextension

neoteknic
источник
Эта команда используется в более новых версиях Debian, таких как Stretch, где PHP5 / PHP7 можно запускать параллельно.
Джейкоб Хьюм