Gibt es einen Befehl zum Aktivieren / Deaktivieren einer PHP-Erweiterung über die Befehlszeile?

46

Gibt es einen Befehl zum einfachen Aktivieren / Deaktivieren einer PHP-Erweiterung über die Befehlszeile? (php.ini)

PHPst
quelle
Nein, aber es gibt Tools, mit denen Sie die Konfiguration analysieren und ändern können (z awk. B. ).
Jordan
1
lassen Sie uns einfach wissen, was Sie konfigurieren, um die Erweiterung in php.ini zu deaktivieren, damit wir es einfach über die Befehlszeile machen können
Rahul Patil
@ RahulPatil Ich kommentiere nur extension=x.so, um x zu deaktivieren.
PHPst

Antworten:

27

Wenn Sie PHP5.4 + in einer Debian-basierten Distribution verwenden, können Sie mit php5enmod PHP-Erweiterungen aktivieren und mit php5dismod PHP-Erweiterungen deaktivieren.

cherrysoft
quelle
7
Beachten Sie, dass dies funktioniert, indem Sie Links in /etc/php5/{apache2,cli,...}/conf.d/ hinzufügen / entfernen
Pierre-Olivier Vares
1
@ Pierre-OlivierVares Dieser Kommentar war die wirklich relevante Information hier.
Xatenev
14

Sie können eine Erweiterung über die Befehlszeile aktivieren, indem Sie Folgendes verwenden:

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

-dwird verwendet, um INI-Werte über die Befehlszeile zu übergeben. Leider gibt es keine Möglichkeit, eine Erweiterung in der Befehlszeile zu deaktivieren, wenn sie in der php.iniDatei konfiguriert wurde . (Sie können natürlich den anderen Antworten folgen, aber es gibt nichts, was Sie mit -doder mit welcher Option des phpBefehls tun können .)

hek2mgl
quelle
8

Auf Lubuntu brauchte ich pdo_sqlite.

Manuell aktivieren:

$ sudo php5enmod pdo_sqlite

Wenn es nicht funktioniert, überprüfen Sie:

$ ls /etc/php5/mods-available

Die Ergebnisliste fehlte pdo_sqlite.ini. Wir müssen es installieren.

$ sudo apt-get install php5-sqlite

Oder für PHP7:

$ sudo apt-get install php7-sqlite3

Erweiterung sqlite3wird automatisch aktiviert in CLI und in Apache während der Installation, und wir haben jetzt mods-available: pdo_sqlite.ini, sqlite3.ini.

Erweiterung deaktivieren mit:

$ sudo php5dismod pdo_sqlite
Vladimir Vukanac
quelle
4

Sie können angeben -n, dass keine Erweiterungen geladen werden sollen php.ini. Dies kann die Leistung verbessern, wenn Sie einige verwenden (z. B. XDebug). Z.B

php -n -r "phpinfo();"
Kenorb
quelle
1
Gibt es eine Möglichkeit, das Laden einer Erweiterung (wie memcached) auf einem gehosteten Server zu verhindern, obwohl diese ursprünglich eingerichtet wurde? Ich kontrolliere nicht mein Host-Setup, sondern nur die darauf befindlichen Skripte. Ich vermute, es ist irgendwie durcheinander mit meinen Sitzungen und möchte sicherstellen, dass es ausgeschaltet ist, da ich es nicht wirklich benutze ..
userfuser
3

Sie müssen -njede benötigte Erweiterung mit und dann mit anhängen-dextension

Beispiel:

php -n -dextension=json.so -dextension=phar.so composer.phar update
Cobuz Alexandru
quelle
2

Sie können einfach verwenden

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

-i.bkp Backup als php.php.bkp erstellen und in die Originaldatei schreiben

&& Wenn der erste Befehl erfolgreich ist, laden Sie den httpd-Dienst neu.

aber ich stelle nur fest, dass sed den Exit-Status 0 gibt, wenn das Suchmuster nicht übereinstimmt, damit Sie es verwenden können

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"

Oder Sie können das folgende Skript zum Aktivieren und Deaktivieren verwenden:

#!/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 $*
Rahul Patil
quelle
2
Die Erweiterung kann auch in conf.d/*.iniDateien hinzugefügt werden. Möglicherweise müssen einige Änderungen vorgenommen werden?
Ghugo
Ja, wir müssen Änderungen vornehmen, haben Sie etwas ausprobiert?
Rahul Patil
2

Verwendung: phpenmod [-v ALL | PHP-Version] [-s ALL | SAPI-Name] Modulname [Modulname_2]

Verwenden Sie also phpenmod -s cli yourextension

neoteknic
quelle
Dieser Befehl wird in neueren Debian-Versionen wie Stretch verwendet, wo PHP5 / PHP7 nebeneinander ausgeführt werden kann.
Jacob Hume
-1

Bitte prüfen Sie das

Alle installierten Konfigurationsdateien für PHP-Module sind im Verzeichnis / etc / php / PHP_VERSION / mods-available verfügbar

Dulanjana K
quelle