5154

Good Luck To You!

CentOS系统里怎么查看当前PHP版本以及已安装的扩展列表?

在基于 CentOS 的服务器上管理和维护 Web 应用时,经常需要检查当前 PHP 环境中已安装并启用的扩展模块,无论是为了排查应用故障、安装新软件的前置条件确认,还是进行性能优化,掌握查看 PHP 扩展的方法都是一项基本且重要的技能,本文将详细介绍在 CentOS 系统中查看 PHP 扩展的多种实用方法,并对它们进行比较,以帮助您在不同场景下选择最合适的方案。

CentOS系统里怎么查看当前PHP版本以及已安装的扩展列表?

使用命令行工具 php -m

这是最直接、最快捷的方法,适用于通过命令行接口(CLI)快速获取已加载的 PHP 扩展列表。

基本用法

打开您的终端,直接输入以下命令:

php -m

执行后,系统会列出两个部分:首先是 PHP 编译时内置的扩展(Zend Extensions),然后是通过 .so 文件动态加载的扩展,输出结果是一个清晰的扩展名称列表,

[PHP Modules]
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
zlib
[Zend Modules]
Zend OPcache

搜索特定扩展

如果列表很长,您可以使用 grep 命令来过滤和查找特定的扩展是否存在,要检查 gd(图像处理库)扩展是否已安装:

php -m | grep -i gd

这里的 -i 参数表示忽略大小写,如果命令返回了 gd,则表示该扩展已加载;如果没有输出,则表示未加载。

优点与局限

  • 优点:操作简单,响应迅速,无需 Web 服务器环境。
  • 局限:此命令显示的是 CLI SAPI(Server Application Programming Interface) 的扩展列表,在许多服务器配置中,命令行环境的 PHP 和 Web 服务器(如 Apache 或 Nginx 通过 PHP-FPM)使用的 PHP 可能是不同的版本,或者加载了不同的 php.ini 配置文件。php -m 的结果可能与您网站实际运行环境不一致。

使用 phpinfo() 函数

phpinfo() 是 PHP 提供的一个功能极其强大的函数,它能输出关于 PHP 配置的详细信息,包括编译选项、PHP 版本、服务器信息、环境变量以及最重要的——已加载的扩展列表,这是查看 Web 服务器环境下 PHP 配置的“黄金标准”。

操作步骤

  1. 创建一个 PHP 文件:在您的网站根目录下(/var/www/html/)创建一个新的 PHP 文件,可以命名为 info.php

    sudo vi /var/www/html/info.php
  2. 写入 PHP 代码:在该文件中,输入以下内容:

    <?php
    phpinfo();
    ?>
  3. 通过浏览器访问:保存文件后,在您的浏览器中访问 http://您的服务器IP地址/info.php

    CentOS系统里怎么查看当前PHP版本以及已安装的扩展列表?

您将看到一个内容详尽的页面,在这个页面上,您可以向下滚动,找到名为 "Core" 的部分,其下方会列出所有已编译和加载的扩展,每个扩展名都是一个链接,点击后可以查看该扩展的详细配置信息。

安全警告

phpinfo() 页面会暴露大量服务器的敏感信息,如服务器路径、配置详情、环境变量等。在查看完毕后,务必立即删除此文件,切勿在生产环境中长期保留。

sudo rm /var/www/html/info.php

检查扩展目录和 php.ini 文件

除了直接查看运行时状态,您还可以通过检查文件系统来了解 PHP 扩展的安装和配置情况。

定位扩展目录

PHP 扩展通常以 .so(Shared Object)文件的形式存放在一个特定的目录中,您可以通过以下命令找到这个目录的路径:

php -i | grep "extension_dir"

输出结果类似:

extension_dir => /usr/lib64/php/modules => /usr/lib64/php/modules

这表示您的 PHP 扩展文件存放在 /usr/lib64/php/modules 目录下,您可以使用 ls 命令列出该目录下的所有 .so 文件,这些就是已安装到系统中的扩展。

ls -l /usr/lib64/php/modules

注意:这个目录中的文件仅代表“已安装”,不代表“已启用”,一个扩展是否启用,取决于 php.ini 文件中的配置。

检查 php.ini 配置文件

php.ini 是 PHP 的核心配置文件,其中包含了加载扩展的指令。

  • 定位 php.ini 文件:同样,使用 php -i 命令可以找到当前环境正在使用的配置文件路径。

    php -i | grep "Loaded Configuration File"

    输出可能为:

    CentOS系统里怎么查看当前PHP版本以及已安装的扩展列表?

    Loaded Configuration File => /etc/php.ini

    重要提示:如前所述,CLI 和 Web 服务器环境可能使用不同的 php.ini 文件,要确认 Web 服务器的配置文件路径,最准确的方法还是通过 phpinfo() 页面,页面顶部会明确显示 "Loaded Configuration File" 的路径。

  • 查看扩展配置:打开 php.ini 文件,您会看到类似下面的行:

    ;extension=mysqli
    ;extension=pdo_mysql
    extension=gd

    行首的分号 表示该行被注释掉了,对应的扩展不会被加载,去掉分号并保存文件,然后重启 Web 服务器或 PHP-FPM 服务,该扩展就会被启用。

    您也可以使用 grep 快速搜索某个扩展的配置状态:

    grep -i "gd" /etc/php.ini

方法对比与小编总结

为了更清晰地选择合适的方法,下表对上述几种方式进行了对比:

方法 易用性 信息详细度 适用环境 最适用场景
php -m 非常高 CLI 环境 快速检查、脚本自动化、确认 CLI 环境依赖
phpinfo() 较高 非常高 Web 服务器环境 全面诊断、排查网站问题、确认 Web 环境依赖
检查扩展目录 中等 中等 文件系统 确认扩展是否已被物理安装到系统
检查 php.ini 中等 配置文件 手动启用/禁用扩展、排查配置错误

在日常工作中,建议将 php -m 作为快速检查的日常工具,当遇到与网站相关的具体问题时,再临时使用 phpinfo() 进行深入分析,而直接编辑 php.ini 则是管理扩展启用的最终手段。


相关问答 (FAQs)

为什么我使用 php -m 命令看到了某个扩展,但是我的网站程序依然提示该扩展不存在?

解答:这是一个非常常见的问题,根本原因在于 PHP 环境不一致php -m 命令查询的是 命令行接口(CLI) 的 PHP 环境,而您的网站(如通过 Apache 或 Nginx + PHP-FPM 运行)使用的是另一个独立的 PHP 环境,它们可能使用了不同的 php.ini 配置文件,甚至是不同版本的 PHP,解决方法是:

  1. 创建 phpinfo() 文件并通过浏览器访问,找到 "Loaded Configuration File" 一项,确认 Web 服务器实际使用的 php.ini 文件路径。
  2. 编辑该 php.ini 文件,确保您需要的扩展行(如 extension=xxx.so)没有被分号 注释掉。
  3. 保存文件后,重启您的 Web 服务器(如 sudo systemctl restart httpd)或 PHP-FPM 服务(如 sudo systemctl restart php-fpm)。

我已经在 php.ini 中取消了扩展的注释,并且也重启了服务,为什么 phpinfo() 页面里还是没有显示这个扩展?

解答:如果配置正确且服务已重启,但扩展仍未加载,可能的原因有以下几点:

  1. 扩展文件不存在:确认 extension_dir 指定的目录下确实存在对应的 .so 文件,如果不存在,您需要先通过 yum(如 sudo yum install php-gd)或 pecl 安装该扩展。
  2. 版本不兼容:您安装的扩展版本可能与当前的 PHP 版本不兼容,为 PHP 7.4 编译的扩展无法在 PHP 8.0 上运行,请确保扩展是为您服务器上运行的 PHP 版本正确编译的。
  3. 依赖库缺失:某些 PHP 扩展依赖于系统的其他库,如果这些底层库未安装,PHP 扩展在加载时会失败,您可以查看 Web 服务器的错误日志(如 /var/log/httpd/error_log)或 PHP-FPM 的日志,通常会记录具体的加载失败原因,"undefined symbol" 或 "cannot open shared object file",这能帮助您定位缺失的依赖包。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.