如何在Ubuntu Linux 12.04 LTS中检查已启用/禁用的PHP扩展?

91

我在本地计算机上使用Ubuntu Linux 12.04 LTS。我很久以前在我的机器上安装了LAMP。现在我想启用以下PHP扩展:

  1. php_zip
  2. php_xml
  3. php_gd2

首先,我想检查这些PHP扩展是否已启用。我搜索了很多关于如何检查已安装/已启用的PHP扩展的内容,但每次我都找到了如何在Ubuntu Linux上安装这些扩展的方法。因此,有人可以告诉我应该如何检查Ubuntu Linux 12.04 LTS中已启用/未启用的PHP扩展吗?


3
<?php phpinfo(); ?> 添加到一个 PHP 文件中并运行它。 - Fluffeh
你看过phpinfo()的输出吗? - Mark Baker
23
尝试在终端中运行 php -m 命令,您将看到可用的模块。 - Rahil Wazir
@RahilWazir:我在终端中尝试了php -m命令,并列出了一些模块。这是否意味着这些模块已在我的计算机上启用? - PHPLover
3
@PHPLover - 它们可以通过命令行界面执行PHP,但不一定适用于Web SAPI,因为它们可以有不同的ini文件,启用/禁用不同的模块。 - Mark Baker
8个回答

197

检查已安装的PHP模块和软件包

除了运行

php -m

要获取已安装的php模块列表,您可能会发现获取Ubuntu中当前已安装的php软件包列表很有帮助:

sudo dpkg --get-selections | grep -v deinstall | grep php

这很有帮助,因为Ubuntu可通过提供php 模块

您可以从可用的Ubuntu php 中进行选择,然后安装所需的模块,通过运行以下命令查看可用的包:

sudo apt-cache search php | grep "^php5-"

或者,对于 Ubuntu 16.04 及更高版本:

sudo apt-cache search php | grep "^php7"

正如您所提到的,关于您可能需要安装的软件包的实际安装过程,有大量信息可供参考,因此我在这里不会详细介绍。

相关:启用/禁用已安装的PHP模块

有可能某个已安装模块禁用了。在这种情况下,当运行php -m时,它将不会显示,但是它将出现在已安装Ubuntu软件包列表中。

可以通过php5enmod工具(后续版本使用phpenmod)来启用/禁用模块,该工具是php-common软件包的一部分。

Ubuntu 12.04:

已启用的模块是在/etc/php5/conf.d中建立符号链接的。

Ubuntu 12.04(带有PHP 5.4+):

启用已安装的模块:

php5enmod <modulename>

禁用已安装的模块:

php5dismod <modulename>

Ubuntu 16.04(php7)及更高版本:

启用已安装的模块:

phpenmod <modulename>

禁用已安装的模块:

phpdismod <modulename>

重新加载Apache

启用/禁用后请记得重新加载Apache2:

service apache2 reload

1
如果您想检查脚本是否启用,请查看@tahsin-abrar的答案。 - Tuhin
1
许多模块在安装时会自行设置为在 Apache 启动时加载。当您运行 php -m 时,它们仍然会显示出来,但在您重新启动 Apache 之前不会启用。因此,例如在 Debian/Ubuntu 上,您应该运行以下命令:apt install -y php-gd php-curl && systemctl restart apache2.service - Peter Kionga-Kamau

40

要检查这些扩展是否启用,您可以创建一个php文件,即info.php并在其中编写以下代码:

<?php 
echo "GD: ", extension_loaded('gd') ? 'OK' : 'MISSING', '<br>';
echo "XML: ", extension_loaded('xml') ? 'OK' : 'MISSING', '<br>';
echo "zip: ", extension_loaded('zip') ? 'OK' : 'MISSING', '<br>';
?>

就是这样。


这样可以判断扩展是否已启用。如何使用PHP找到它是否已安装? - Hirdesh Vishwdewa
嗯..我认为您需要检查phpinfo()以获取信息。如果在phpinfo()中找不到扩展详细信息,则表示未安装该扩展。我没有找到其他解决方法。 - Tahsin Abrar

9

您可以通过终端命令 php -m 查看可用的模块(已编译)。


7
也许最简单的方法来查看哪些扩展被(编译并)加载(非CLI)是让服务器运行以下命令:
<?php
$ext = get_loaded_extensions();
asort($ext);
foreach ($ext as $ref) {
    echo $ref . "\n";
}

PHP 命令行界面(cli)并不一定加载相同的扩展。


1
+1 因为有人想以编程方式检查已启用的扩展列表,所以要认识到这是有原因的。 - fred2

4

关于 php extensions 等信息,请参考该网站。

  1. Create a new file and name it info.php (or some other name.php)

  2. Write this code in it:

     <?php
       phpinfo ();
     ?>
    
  3. Save the file in the root (home)of the site

  4. Open the file in your browser. For example: example.com/info.php All the php information on your site will be displayed.

3
/etc/php5/apache2/php.ini
中搜索扩展。

0
另一种快速查看模块是否启用/禁用而不仅仅是已安装或未安装的方法是使用phpquery命令。
例如,在我的Linux Mint机器上,如果我想查看xdebug是否已启用,我会运行:
 phpquery -v 8.1 -s apache2 -m xdebug

-v - 用于指定您想要的版本

-s - 用于指定环境(apache2或cli)

-m - 您感兴趣的模块。

上述示例的响应是(在我的情况下):

xdebug (Enabled for apache2 by maintainer script)

这里有更多的例子。


0

在 PHP 8.1 上测试通过:

检查扩展是否已安装(在操作系统中):

php -m

检查扩展已加载(在CLI中):
# set EXT value with the desired extension name.
EXT=gmp php -r "echo getenv('EXT'),': ', extension_loaded( getenv('EXT') ) ? 'Loaded' : 'Not loaded', PHP_EOL;"

检查扩展已加载(在PHP-FPM中):
echo "<?php phpinfo(); ?>" > public/info.php

然后访问 you-running-php-fpm-host/info.php;记得之后删除该文件!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接