Apakah ada perintah untuk mengaktifkan / menonaktifkan ekstensi php dari baris perintah?


46

Apakah ada perintah untuk mengaktifkan / menonaktifkan ekstensi php dengan mudah dari baris perintah? (php.ini)


Tidak, tetapi ada alat yang dapat Anda gunakan untuk mem-parsing dan memodifikasi konfigurasi (mis awk.)
jordanm

1
beri tahu kami apa yang Anda konfigurasikan untuk menonaktifkan ekstensi di php.ini sehingga kami dapat membuatnya mudah dari baris perintah
Rahul Patil

@RahulPatil Saya hanya berkomentar extension=x.sountuk menonaktifkan x.
PHPst

Jawaban:


27

Jika Anda menggunakan PHP5.4 + pada distro berbasis Debian Anda dapat menggunakan php5enmod untuk mengaktifkan dan php5dismod untuk menonaktifkan ekstensi PHP.


7
Perhatikan ini bekerja dengan menambahkan / menghapus tautan di /etc/php5/{apache2,cli,...}/conf.d/
Pierre-Olivier Vares

1
@ Pierre-OlivierVares Komentar ini adalah informasi yang sangat relevan di sini.
Xatenev

14

Anda dapat mengaktifkan ekstensi dari baris perintah menggunakan:

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

-ddigunakan untuk meneruskan nilai-nilai ini melalui baris perintah. Sayangnya tidak ada cara untuk menonaktifkan ekstensi pada baris perintah jika sudah dikonfigurasi dalam php.inifile. (Anda dapat mengikuti jawaban lain tentu saja tetapi tidak ada yang dapat Anda lakukan dengan menggunakan -datau opsi apa pun dari phpperintah.)


8

Di Lubuntu saya butuhkan pdo_sqlite.

Aktifkan secara manual:

$ sudo php5enmod pdo_sqlite

Jika tidak berhasil periksa:

$ ls /etc/php5/mods-available

Daftar hasil tidak ada pdo_sqlite.ini. Kami harus menginstalnya.

$ sudo apt-get install php5-sqlite

Atau untuk php7:

$ sudo apt-get install php7-sqlite3

Ekstensi sqlite3diaktifkan secara otomatis di CLI dan di Apache selama proses instalasi, dan sekarang kami memiliki mods-available: pdo_sqlite.ini, sqlite3.ini.

Nonaktifkan ekstensi dengan:

$ sudo php5dismod pdo_sqlite

4

Anda dapat menentukan -nagar tidak ada ekstensi yang dibuka php.ini. Ini dapat meningkatkan beberapa kinerja ketika Anda menggunakan beberapa (misalnya XDebug). Misalnya

php -n -r "phpinfo();"

1
Adakah cara untuk mencegah pemuatan ekstensi (seperti memcached) dari pemuatan, pada server yang dihosting, meskipun sudah diatur pada awalnya? Saya tidak mengontrol pengaturan host saya, hanya skrip di atasnya. Saya curiga itu entah bagaimana mengacaukan sesi saya dan ingin memastikan itu tidak aktif karena saya tidak benar-benar menggunakannya ..
userfuser

3

Anda harus menggunakan -ndan kemudian menambahkan setiap ekstensi yang dibutuhkan menggunakan-dextension

Contoh:

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

2

Anda cukup menggunakan

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

-i.bkp ambil cadangan sebagai php.php.bkp dan tulis ke file asli

&& jika perintah pertama berhasil maka muat ulang layanan httpd.

tapi saya hanya perhatikan bahwa sed memberikan status keluar 0 ketika pencarian derai tidak cocok sehingga Anda dapat menggunakan

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"

Atau Anda dapat menggunakan skrip di bawah ini untuk mengaktifkan dan menonaktifkan:

#!/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
Ekstensi juga dapat ditambahkan dalam conf.d/*.inifile. Mungkin beberapa modifikasi perlu dilakukan?
GHugo

Ya, kami perlu melakukan perubahan untuk hal yang sama, sudahkah Anda mencoba sesuatu?
Rahul Patil

2

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

Jadi gunakan phpenmod -s cli yourextension


Perintah ini digunakan dalam versi Debian yang lebih baru, seperti Stretch, di mana PHP5 / PHP7 dapat dijalankan berdampingan.
Jacob Hume

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.