Чи є якась команда для включення / відключення розширення php з командного рядка?


46

Чи є якась команда для того, щоб увімкнути / вимкнути розширення php легко з командного рядка? (php.ini)


Ні, але є інструменти, які можна використовувати для розбору та зміни конфігурації (наприклад awk).
Йорданм

1
просто дайте нам знати, що ви налаштовуєте для відключення розширення в php.ini, щоб ми могли зробити це легко з командного рядка
Рахул Патіл,

@RahulPatil Я просто коментую, extension=x.soщоб відключити х.
PHPst

Відповіді:


27

Якщо ви використовуєте PHP5.4 + в дистрибутиві на базі Debian, ви можете використовувати php5enmod для включення, а php5dismod для відключення розширень PHP.


7
Зауважте, що це працює, додаючи / видаляючи посилання у /etc/php5/{apache2,cli,...}/conf.d/
П'єр-Олів'є Варес

1
@ Pierre-OlivierVares Цей коментар був справді актуальною інформацією тут.
Ксатенев

14

Ви можете ввімкнути розширення з командного рядка, використовуючи:

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

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


8

На Lubuntu мені було потрібно 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();"

1
Будь-який спосіб запобігти завантаженню розширення (на зразок запам’ятованого) на розміщений сервер, хоча він налаштований спочатку? Я не контролюю налаштування свого хоста, лише сценарії на ньому. Я підозрюю, що якимось чином псує мої сеанси, і я хотів би переконатися, що він вимкнений, оскільки я не дуже його використовую ..
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файли. Може бути, якусь модифікацію потрібно зробити?
GHugo

Так, нам потрібно змінити те саме, ви щось пробували?
Рахул Патіль

2

використання: phpenmod [-v ВСЕ | php_version] [-s ALL | sapi_name] module_name [module_name_2]

Тому використовуйте phpenmod -s clirextension


Ця команда використовується в нових версіях Debian, як-от Stretch, де PHP5 / PHP7 можна запускати поруч.
Яків Юм

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.