php -v成功但phpinfo()不显示扩展,说明cli与web环境加载了不同php.ini或未加载任何配置;需先用php --ini和phpinfo()确认各自“loaded configuration file”路径,再检查extension_dir、扩展名、依赖库、zts/版本匹配、权限及服务重启。

php -v 成功但 phpinfo() 不显示扩展,说明 php.ini 没生效
很多人执行 php -v 看到 8.3.x 就以为装好了,结果跑 phpinfo() 发现 mbstring、pdo、opcache 全是灰色——根本原因是 PHP CLI 和 Web 服务加载了不同配置文件,或压根没加载任何 php.ini。
- 先运行
php --ini,看 “Loaded Configuration File” 行:如果是(none),说明 CLI 模式都没读到配置;如果是路径但和phpinfo()显示的不一致,就证明 Web 模式用了另一份 ini - Windows 下必须用
php.ini-development(不是php.ini-production)重命名为php.ini,否则所有扩展默认被注释 - macOS Homebrew 安装后,
php.ini不会自动生成,得手动复制:cp /opt/homebrew/etc/php/8.3/php.ini.default /opt/homebrew/etc/php/8.3/php.ini - Linux(Ubuntu/Debian)下 Apache 和 FPM 使用不同配置路径:
/etc/php/8.3/apache2/php.inivs/etc/php/8.3/fpm/php.ini,改错一个就只有一端生效
extension_dir 和扩展路径对不上,扩展加载全失败
extension_dir 配错是 silent failure 的高发区:PHP 找不到 .dll 或 .so 文件,既不报错也不加载,php -m 里就看不到模块。
- Windows 必须设为相对路径:
extension_dir = "ext"(注意双引号),不能写绝对路径如C:\php\ext,否则extension=mysqli会静默失败 - Linux/macOS 要确认实际扩展目录存在:
ls /usr/lib/php/8.3/或ls /opt/homebrew/lib/php/8.3/,再把extension_dir设成对应路径(通常不用改,默认值即可) - 启用扩展时别漏掉前缀:
extension=mbstring正确,extension=php_mbstring.dll错误(Windows 下也不需要带.dll) - macOS 上若用 Homebrew 安装,扩展名可能带版本号,比如
extension=intl.so要写成extension=intl,否则加载失败
date.timezone 和 openssl.cafile 不配,部分扩展拒绝初始化
这两个配置项看似可选,但在 PHP 8.3 中是硬性依赖:不设 date.timezone,DateTime 类构造失败;不设 openssl.cafile,cURL、Composer、file_get_contents('https://...') 全部报 SSL 错误。
-
date.timezone必须设为有效时区字符串,例如Asia/Shanghai或UTC,不能留空或写GMT+8 -
openssl.cafile在 Windows 上指向系统证书(如C:\php\cacert.pem),在 macOS/Linux 上通常设为/etc/ssl/certs/ca-certificates.crt或 Homebrew 的/opt/homebrew/etc/ca-certificates/cert.pem - 改完后必须重启 Web 服务(Apache/Nginx)或 PHP-FPM,
php -i | grep timezone和php -r "print_r(openssl_get_cert_locations());"可验证是否生效
PATH 和二进制路径混乱,终端和 Web 用的不是同一个 php
最典型的症状是:终端里 php -v 是 8.3,但 phpinfo() 显示 8.1 或 7.4——说明 Web 服务调用的是系统旧版或另一个安装路径的 php。
- macOS Apple Silicon:PATH 必须含
/opt/homebrew/bin,且要放在/usr/bin前;改完~/.zshrc后必须source ~/.zshrc,新开终端不解决 PATH 加载问题 - Windows:环境变量 PATH 里只能有一条 PHP 路径,且必须指向你解压的
C:\php目录,不能混着多个版本(如C:\php82和C:\php83) - Linux Ubuntu:确保
which php输出是/usr/bin/php(apt 安装)或/usr/local/bin/php(源码编译),如果指向/usr/local/php8.2/bin/php,说明旧版本残留干扰 - 验证方法:Web 环境中执行
<?php system('which php'); ?>,输出应和终端一致
php.ini,extension_dir 指向真实存在的目录,date.timezone 和 openssl.cafile 必填,PATH 保证终端和 Web 调用的是同一个二进制。少一个,都可能让整个环境看起来“成功”,实则路由不注册、数据库连不上、HTTPS 请求全挂。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











