PHP 8.3 安装成功≠能跑项目,必须同时满足CLI可用、扩展加载、配置生效、Web模式就绪;php -v仅验证版本,需通过php -m、php --ini、phpinfo()及test.php双端测试综合确认。

PHP 8.3 安装成功 ≠ 能跑起来,更不等于能跑项目。光看 php -v 输出带 8.3.x 远不够——CLI 可用、扩展加载、配置生效、Web 模式就绪,四者缺一不可。
php -v 显示 8.3.x 但提示 command not found
这是 PATH 没生效的典型表现,尤其在 macOS(Apple Silicon/Intel 路径不同)和 Windows(PATH 漏加 C:\php\ext)上高频发生。
- macOS:运行
which php,输出必须是/opt/homebrew/bin/php(M1/M2/M3)或/usr/local/bin/php(Intel),绝不能是/usr/bin/php(系统已弃用) - Windows:检查系统环境变量
Path是否包含C:\php和C:\php\ext两行;改完后必须重启终端,echo %PATH%确认生效 - Linux(Ubuntu/Debian):
apt install php8.3-cli必须显式安装,仅装php8.3不保证 CLI 可用
php -m 不显示 mbstring/pdo_mysql 等关键扩展
扩展没加载,90% 是因为 php.ini 根本没被读取,或扩展路径/名称写错。Homebrew、PPA、ZIP 解压三种方式,php.ini 位置完全不同。
- macOS Homebrew:
php --ini显示 “Loaded Configuration File” 为(none)?立刻执行:cp /opt/homebrew/etc/php/8.3/php.ini.default /opt/homebrew/etc/php/8.3/php.ini - Ubuntu/Debian PPA:
/etc/php/8.3/cli/php.ini和/etc/php/8.3/fpm/php.ini是两个独立文件,CLI 验证用前者,Nginx/FPM 用后者 - Windows ZIP:
extension_dir = "ext"必须与实际解压结构一致;若把ext文件夹挪到别处,就得写绝对路径如extension_dir = "C:/php/ext" - 所有平台:启用扩展时,确认行首无空格、无分号,例如
extension=mbstring(不是;extension=mbstring,也不是extension = "mbstring")
phpinfo() 页面不显示预期扩展或版本
浏览器里看到的 PHP 版本和扩展,由 Web 服务器(Apache/Nginx)调用的 SAPI 决定,和 CLI 完全无关。Nginx + PHP-FPM 和 Apache + mod_php 加载的是两套配置。
立即学习“PHP免费学习笔记(深入)”;
- Nginx 场景:改完
/etc/php/8.3/fpm/php.ini后,必须重启服务:sudo systemctl restart php8.3-fpm,否则phpinfo()仍用旧配置 - Apache 场景:装了
libapache2-mod-php8.3后,要禁用旧模块:sudo a2dismod php8.2,再启用新模块:sudo a2enmod php8.3,最后sudo systemctl restart apache2 - 验证 Web SAPI 实际加载的配置:
php -i | grep 'Loaded Configuration File'(CLI) vs<?php phpinfo(); ?>页面里找同一行(Web)——两者路径必须一致才说明配置对齐
脚本执行报错 Class 'PDO' not found 或 Warning: Module 'xxx' already loaded
前者是扩展根本没启用,后者是 php.ini 里重复写了 extension= 行,或通过 phpenmod 启用后又手动在 php.ini 里打开一遍。
- Linux(Debian/Ubuntu):用
phpenmod启用扩展时,它会自动生成符号链接到/etc/php/8.3/cli/conf.d/目录,此时 php.ini 里就不要再写对应extension=行,否则冲突 - Windows/macOS:没有
phpenmod,所有扩展都靠 php.ini 手动管理,务必全局搜索重复项:grep -n "extension=" /path/to/php.ini - 最简验证法:新建
test.php,内容仅<?php echo extension_loaded('pdo') ? 'OK' : 'FAIL'; ?>,执行php test.php和浏览器访问双测,结果必须一致
最容易被忽略的点:PHP 8.3 的 FPM 和 CLI 默认使用不同配置文件,且扩展启用方式在不同发行版中差异极大——Ubuntu 用 phpenmod,CentOS/RHEL 用 dnf module enable php:remi-8.3,macOS Homebrew 必须手动复制 php.ini.default。不区分场景硬套命令,90% 会卡在“明明装了却用不了”。



















