php -v 和 php --version 无区别,均为显示 cli 环境下 php 版本的简写命令,不反映 web 服务器所用版本;常见现象是 cli 与 web sapi 版本不一致,需分别用 php -v、phpinfo() 查看。

php -v 和 php --version 有啥区别?
没区别,php -v 是 php --version 的简写,输出当前 CLI 环境下实际执行的 PHP 版本。注意:它不反映 Web 服务器(如 Apache/Nginx)里跑的是哪个版本,只管命令行。
常见错误现象:php -v 显示 8.2,但浏览器里 phpinfo() 显示 7.4 —— 这说明 CLI 和 Web SAPI 用的是不同安装路径或不同二进制文件。
- 查 CLI 版本:运行
php -v - 查 CLI 实际路径:运行
which php或where php(Windows) - 查 Web 环境版本:必须在 Web 可访问的 PHP 文件中写
<?php phpinfo(); ?>浏览器打开看
怎么临时切换 CLI 的 PHP 版本?
靠改 $PATH 顺序最直接,不是靠“配置文件”或“全局开关”。macOS/Linux 常用 brew install php@8.1 装多个版本,但默认只链接一个;Windows 用 XAMPP/WAMP 时,得手动把对应 php.exe 所在目录挪到系统环境变量 PATH 最前面。
性能影响:无。只是路径优先级变化,不启动额外进程或加载模块。
立即学习“PHP免费学习笔记(深入)”;
- Linux/macOS 示例:运行
export PATH="/opt/homebrew/bin/php@8.1:$PATH"(Homebrew 安装路径需按实际调整) - Windows 示例:把
C:\xampp\php移到系统环境变量PATH第一位,然后重启终端 - 验证是否生效:运行
php -v和which php,两者要对得上
php --ini 显示“Loaded Configuration File”为空是啥意思?
说明当前 CLI 没加载任何 php.ini,所有配置走默认内置值(比如 memory_limit 是 128M,display_errors 是 Off)。这不是报错,但容易踩坑:你改了 /etc/php/8.2/cli/php.ini,却忘了确认 CLI 实际读的是不是这个路径。
使用场景:调试扩展没加载、extension=redis 不生效、date.timezone 不起作用时,第一步就该跑 php --ini 看它到底读了哪几个文件。
- 查完整加载链:运行
php --ini,重点关注 “Loaded Configuration File” 和 “Scan for additional .ini files in” 两行 - 强制指定配置文件:运行
php -c /path/to/php.ini -v - Windows 下注意反斜杠转义:用
php -c "C:\php\php.ini",别漏引号
php -m 和 php -r 'print_r(get_loaded_extensions());' 输出不一样?
正常。php -m 列出的是 CLI SAPI 下成功加载的扩展(含 Zend 扩展),而 get_loaded_extensions() 是 PHP 代码里能调用的扩展列表,不包含 opcache、ioncube 这类 Zend 扩展。
容易踩的坑:看到 php -m | grep redis 有结果,就以为 new Redis() 能用,结果报 Class 'Redis' not found —— 很可能是扩展被编译成 redis.so 但没启用,或者启用了却在 Web 环境才加载(CLI 未启用)。
- 查扩展是否真可用:运行
php -m | grep -E '^(redis|mysqli|pdo)$' - 查扩展具体 ini 配置:运行
php --ri redis(替换成你要查的扩展名) - Windows 下扩展名是
.dll,ini 里写extension=php_redis.dll,不能漏php_前缀
which php、php --ini、php -m 这三个命令的输出,其他都是围绕它们展开的。











