是否有任何命令可以从命令行启用/禁用php扩展?


46

是否有任何命令可以从命令行轻松启用/禁用php扩展?(php.ini)


否,但是您可以使用一些工具来解析和修改配置(例如awk)。
jordanm 2013年

1
只是让我们知道您在php.ini中配置为禁用扩展名是什么,以便我们可以从命令行轻松完成
Rahul Patil

@RahulPatil我只是评论extension=x.so禁用x。
PHPst

Answers:


27

如果您在基于Debian的发行版上使用PHP5.4 +,则可以使用php5enmod启用,并使用php5dismod禁用PHP扩展。


7
请注意,这是通过在/etc/php5/{apache2,cli,...}/conf.d/中添加/删除链接来实现的
Pierre-Olivier Vares

1
@ Pierre-OlivierVares此评论是此处真正相关的信息。
Xatenev

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中自动启用Extension ,现在有了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

是的,我们需要做同样的更改,您尝试过什么吗?
Rahul Patil

2

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

因此,使用phpenmod -s cli yourextension


此命令用于Debian等较新的版本中,其中PHP5 / PHP7可以并行运行。
雅各布·休

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.