コマンドラインからPHP拡張機能を有効/無効にするコマンドはありますか?


46

コマンドラインからPHP拡張機能を簡単に有効/無効にするコマンドはありますか?(php.ini)


いいえ。ただし、構成を解析および変更するために使用できるツールがあります(例:)awk
ヨルダン

1
コマンドラインから簡単に私たちが作ることができるようにちょうど私たちはあなたがphp.iniで無効に延長するように設定するか知ってみましょう
ラーフルパティル

@RahulPatil extension=x.soxを無効にするためにコメントするだけです。
PHPst

回答:


27

DebianベースのディストリビューションでPHP5.4 +を使用している場合、php5enmodを使用してPHP拡張機能を有効にし、php5dismodを使用して無効にすることができます。


7
/etc/php5/{apache2,cli,...}/conf.d/内のリンクを追加/削除することによって、この作品を注意してください
ピエール・オリヴィエVares

1
@ Pierre-OlivierVaresこのコメントは、ここで本当に重要な情報でした。
ザテネフ

14

次を使用して、コマンドラインから拡張機能を有効にできます。

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

-dコマンドライン経由でini値を渡すために使用されます。残念ながら、php.iniファイルで設定されている場合、コマンドラインで拡張機能を無効にする方法はありません。(もちろん、他の答えに従うこともできますが、使用できるコマンド-dphpコマンドのオプションは何もありません。)


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-availablepdo_sqlite.inisqlite3.ini

拡張機能を無効にします:

$ sudo php5dismod pdo_sqlite

4

あなたは指定することができます-nからロードする任意の拡張子を避けるためにphp.ini。これにより、一部(XDebugなど)を使用しているときのパフォーマンスが向上します。例えば

php -n -r "phpinfo();"

1
拡張機能(memcachedなど)のロードを、ホストされたサーバー上で防ぐ方法はありますか?ホストのセットアップは制御せず、スクリプトのみを制御します。私は...それが何らかの形で私のセッションでめちゃくちゃにされ、私は実際にそれを使用していないので、それがオフになっていることを確認したいと思い疑ってる
userfuser


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 ALL | php_version] [-s ALL | sapi_name] module_name [module_name_2]

phpenmod -s cli yourextensionを使用します


このコマンドは、Stretchなどの新しいDebianバージョンで使用され、PHP5 / PHP7を並行して実行できます。
ジェイコブヒューム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.