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

PHP*_*Pst 54 php

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

小智 28

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

  • 请注意,这是通过在 /etc/php5/{apache2,cli,...}/conf.d/ 中添加/删除链接来实现的 (7认同)

hek*_*mgl 18

您可以使用以下命令从命令行启用扩展:

php -d extension=/path/to/extension.so
Run Code Online (Sandbox Code Playgroud)

-d用于通过命令行传递 ini 值。不幸的是,如果已在php.ini文件中配置了扩展,则无法在命令行上禁用扩展。(当然,您可以遵循其他答案,但您无法使用-d任何php命令或命令的任何选项。)


小智 11

在 Lubuntu 上,我需要pdo_sqlite.

手动启用:

$ sudo php5enmod pdo_sqlite
Run Code Online (Sandbox Code Playgroud)

如果不起作用,请检查:

$ ls /etc/php5/mods-available
Run Code Online (Sandbox Code Playgroud)

结果列表丢失pdo_sqlite.ini。我们必须安装它。

$ sudo apt-get install php5-sqlite
Run Code Online (Sandbox Code Playgroud)

或者对于 php7:

$ sudo apt-get install php7-sqlite3
Run Code Online (Sandbox Code Playgroud)

sqlite3在安装过程中,扩展在 CLI 和 Apache 中自动启用,现在我们有mods-available: pdo_sqlite.ini, sqlite3.ini.

禁用扩展:

$ sudo php5dismod pdo_sqlite
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 5

您可以指定-n避免从 加载任何扩展php.ini。当您使用某些(例如 XDebug)时,这可以提高一些性能。例如

php -n -r "phpinfo();"
Run Code Online (Sandbox Code Playgroud)


小智 5

您必须使用-n然后使用附加每个需要的扩展名-dextension

例子:

php -n -dextension=json.so -dextension=phar.so composer.phar update
Run Code Online (Sandbox Code Playgroud)


Rah*_*til 2

你可以简单地使用

sed -i.bkp 's/^extension=x.so/# extension=x.so/' /path/of/php.ini && /etc/init.d/httpd reload
Run Code Online (Sandbox Code Playgroud)

-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"
Run Code Online (Sandbox Code Playgroud)

或者您可以使用以下脚本来启用和禁用:

#!/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 $*
Run Code Online (Sandbox Code Playgroud)

  • 扩展名也可以添加到 `conf.d/*.ini` 文件中。也许需要做一些修改? (2认同)