Is there any command to enable/disable a php extension easily from command line? (php.ini)
8 Answers
If you are using PHP5.4+ on Debian based distro you can use php5enmod to enable and php5dismod to disable PHP extensions.
-
7Note this works by adding/removing links in /etc/php5/{apache2,cli,...}/conf.d/ Commented Jan 8, 2016 at 14:23
-
1@Pierre-OlivierVares This comment was the really relevant information here.– XatenevCommented Jan 22, 2017 at 16:25
-
phpenmod
is only available for root users, because it's located in/usr/sbin
– stollrCommented Jun 2, 2020 at 10:04
You can enable an extension from the command line using:
php -d extension=/path/to/extension.so
-d
is used to pass ini values via the command line. Unfortunately there is no way to disable an extension on the command line if it has been configured in the php.ini
file. (You can follow the other answers of course but there is nothing you can do using -d
or whatever option of the php
command.)
On Lubuntu I needed pdo_sqlite
.
Enable manually:
$ sudo php5enmod pdo_sqlite
If doesn't work check:
$ ls /etc/php5/mods-available
The result list was missing pdo_sqlite.ini
. We have to install it.
$ sudo apt-get install php5-sqlite
Or for php7:
$ sudo apt-get install php7-sqlite3
Extension sqlite3
is auto-enabled in CLI and in Apache during installation process, and now we have mods-available
: pdo_sqlite.ini
, sqlite3.ini
.
Disable extension with:
$ sudo php5dismod pdo_sqlite
-
1You can also use straight
phpenmod
andphpdismod
without version number. After this you may need to restart apache server Commented Oct 3, 2020 at 8:32
You have to use -n
and then to append each needed extension using -dextension
Example:
php -n -dextension=json.so -dextension=phar.so composer.phar update
-
the order of the argument is not relevant. you can also do
php -d extension=json.so -d extension=phar.so -n composer.phar update
Or mix -d around -n. I tested this while I had to hack openssl.so back into pecl command via PHP_PEAR_PHP_BIN. Commented Apr 22, 2020 at 15:04
You can specify -n
to avoid any extensions loading from php.ini
. This can improve some performance when you're using some (e.g. XDebug). E.g.
php -n -r "phpinfo();"
-
1Any way to prevent loading an extension (like memcached) from loading, on a hosted server, although it is set up initially? I don't control my host setup, just the scripts on it. I'm suspecting it is somehow messing up with my sessions and would like to make sure it is off since I don't really use it.. Commented Mar 21, 2017 at 14:28
-
1
usage: phpenmod [ -v ALL|php_version ] [ -s ALL|sapi_name ] module_name [ module_name_2 ]
So use phpenmod -s cli yourextension
You can simply use
sed -i.bkp 's/^extension=x.so/# extension=x.so/' /path/of/php.ini && /etc/init.d/httpd reload
-i.bkp take backup as php.php.bkp and write in to original file
&& if first command is success then reload httpd service.
but I just notice that sed giving exit status 0 when search patter not match so you can use
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"
Or you can use below script for the enable and disable :
#!/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 $*
-
2Extension could also be added in
conf.d/*.ini
files. Maybe some modification needs to be done ?– GHugoCommented Mar 28, 2013 at 11:21 -
Yes, we need to do changes for the same, have you tried anything ? Commented Mar 28, 2013 at 19:11
All the installed PHP modules configuration files are available under /etc/php/PHP_VERSION/mods-available directory
awk
).extension=x.so
to disable x.