Bir php uzantısını komut satırından etkinleştirmek / devre dışı bırakmak için herhangi bir komut var mı?


46

Bir php uzantısını komut satırından kolayca etkinleştirmek / devre dışı bırakmak için herhangi bir komut var mı? (Php.ini)


Hayır, fakat config (örn. awk) 'I ayrıştırmak ve değiştirmek için kullanabileceğiniz araçlar var .
Ürdün

1
sadece php.ini'deki eklentiyi devre dışı bırakmak için ne yapılandırdığınızı bize bildirin, böylece komut satırından kolaylaştırabiliriz
Rahul Patil

@RahulPatil Sadece x'i extension=x.sodevre dışı bırakmak için yorum yapıyorum .
PHPst

Yanıtlar:


27

Debian tabanlı dağıtımda PHP5.4 + kullanıyorsanız, PHP uzantılarını devre dışı bırakmak için php5enmod ve php5dismod komutlarını kullanabilirsiniz.


7
/Etc/php5/{apache2,cli,...}/conf.d/ bağlantıları ekleme / kaldırarak bu işleri Not
Pierre-Olivier Vareš

1
@ Pierre-OlivierVares Bu yorum burada gerçekten alakalı bilgiler oldu.
Xatenev

14

Aşağıdakileri kullanarak komut satırından bir uzantıyı etkinleştirebilirsiniz:

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

-dini değerlerini komut satırı üzerinden iletmek için kullanılır. Ne yazık ki, php.inidosyada yapılandırılmışsa, komut satırında bir uzantıyı devre dışı bırakmanın bir yolu yoktur . (Elbette diğer cevapları takip edebilirsiniz ancak komutun -dherhangi bir seçeneğini veya ne kullanarak yapabileceğinizi hiçbir şey yapamazsınız php.)


8

Lubuntu'da ihtiyacım vardı pdo_sqlite.

Manuel olarak etkinleştir:

$ sudo php5enmod pdo_sqlite

Çalışmıyorsa kontrol edin:

$ ls /etc/php5/mods-available

Sonuç listesi eksikti pdo_sqlite.ini. Yüklemeliyiz.

$ sudo apt-get install php5-sqlite

Veya php7 için:

$ sudo apt-get install php7-sqlite3

Uzantı sqlite3, yükleme işlemi sırasında CLI'de ve Apache'de otomatik olarak etkindir ve şimdi elimizde mods-available: pdo_sqlite.ini, sqlite3.ini.

Uzantıyı şu şekilde devre dışı bırak:

$ sudo php5dismod pdo_sqlite

4

-nEklentilerin yüklenmesini önlemek için belirtebilirsiniz php.ini. Bu, bazılarını kullanırken bazı performansı artırabilir (örneğin, XDebug). Örneğin

php -n -r "phpinfo();"

1
Başlangıçta kurulmasına rağmen, bir uzantının (memcached gibi) yüklenmesini engellemenin herhangi bir yolu var mı? Ana bilgisayar kurulumumu kontrol etmiyorum, sadece üzerindeki komut dosyaları. Bir şekilde oturumlarıma
bulaştığından ve

3

Kullanmanız gereken -nher uzantıyı eklemek için sonra kullanmanız gerekir.-dextension

Örnek:

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

2

Sadece kullanabilirsiniz

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

-i.bkp php.php.bkp olarak yedeği alın ve orijinal dosyaya yazın

&& eğer ilk komut başarılıysa httpd servisini yeniden yükleyin.

ama fark ettim ki, arama pıtırmanı eşleşmediğinde sed'in 0 statüsünü verdiğini görebiliyorum.

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"

Veya etkinleştirmek ve devre dışı bırakmak için aşağıdaki betiği kullanabilirsiniz:

#!/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
Uzantı ayrıca conf.d/*.inidosyalara eklenebilir . Belki bazı değişiklik yapılması gerekiyor?
GHugo

Evet, aynı şeyleri yapmamız gerekiyor, bir şey denediniz mi?
Rahul Patil

2

kullanım: phpenmod [-v ALL | php_version] [-s ALL | sapi_name] module_name [module_name_2]

Yani phpenmod -s cli yourextension kullanın.


Bu komut, PHP5 / PHP7'nin yan yana çalıştırılabildiği Stretch gibi daha yeni Debian sürümlerinde kullanılır.
Jacob Hume,

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.