跳转到主内容
极星编程网:以代码为星,赴技术山海!

PHP终端命令:一行命令检测当前系统所有已安装的PHP版本

用 find 命令扫描常见路径:find /usr /opt /home/linuxbrew /home/homebrew 2>/dev/null -name 'php' -type f -executable -exec sh -c 'echo "{}: $({} -v | head -n1)"' \;,可发现所有可执行 PHP 二进制文件及其版本,覆盖系统级、Homebrew 及用户级安装,规避 which/whereis 的 PATH 依赖和非可执行项干扰。 如何用 shell 命令快速列出所有已安装的 PHP 可执行文件路径 Linux/macOS 终端里没有全局“PHP 版本管理器”时,
php -v
只能显示当前
$PATH
中第一个
php
的版本。要真正摸清系统里藏了多少个 PHP,得主动扫描常见安装路径。 实操建议:直接运行这行命令(支持 bash/zsh):
find /usr /opt /home/linuxbrew /home/homebrew 2>/dev/null -name 'php' -type f -executable -exec sh -c 'echo "{}: $(\"{}\" -v | head -n1)"' \;
/usr
和
/opt
覆盖绝大多数系统级或第三方包管理安装路径(如 apt、yum、Homebrew、MacPorts)
/home/linuxbrew
和
/home/homebrew
是 Linux/macOS 上 Homebrew 的典型用户级安装根目录(尤其 WSL 或非默认安装)
2>/dev/null
屏蔽权限拒绝提示,避免干扰结果
-executable
确保只匹配真正可执行的二进制文件,跳过符号链接或残留脚本 为什么不用 which 或 whereis 查所有 PHP
which php
只返回
$PATH
中首个匹配项;
whereis php
会混入 man 页面、源码路径等无关结果,且不检查可执行性。 更关键的是:某些 PHP 安装(比如通过
phpenv
、
asdf
或手动编译到
/usr/local/php-8.2
)根本不会把路径加进
$PATH
,但二进制文件真实存在——这类版本只能靠文件系统扫描发现。 立即学习 “ PHP免费学习笔记(深入) ”; PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 如果你用
asdf
,它的 PHP 实际在
~/.asdf/installs/php/
,这个路径不在上面 find 命令默认范围内,需额外加上:
~/.asdf/installs/php
macOS 用户若用 MacPorts,还要补上
/opt/local
扫描结果中重复出现同一路径(比如多个软链接指向同一个
php
),属正常现象,不必删减 输出结果里怎么识别“有效版本”而非误报 扫描会找到所有叫
php
的可执行文件,但不是每个都能成功运行
-v
。常见无效情况包括: 损坏的二进制(执行时报
Segmentation fault
或
cannot execute binary file
) 被剥离符号表或依赖缺失的交叉编译版(尤其 Docker 容器内) 某些调试构建的
php
不带 CLI SAPI,
php -v
会静默失败 改进办法:加一层校验,只保留能稳定输出版本号的条目:
find /usr /opt 2>/dev/null -name 'php' -type f -executable -exec sh -c 'if output=$("$(echo {})" -v 2>/dev/null | head -n1) && [ -n "$output" ]; then echo "{}: $output"; fi' \;
Windows 用户怎么办(WSL 除外) 原生命令行无
find
,但 PowerShell 可替代:
Get-ChildItem -Path 'C:\xampp\php', 'C:\php', 'C:\Program Files\php', "${env:USERPROFILE}\AppData\Local\Programs\php" -Filter 'php.exe' -Recurse -ErrorAction SilentlyContinue | ForEach-Object { try { & $_.FullName '-v' 2>$null | Select-Object -First 1 | ForEach-Object { "$($_.FullName): $($_)" } } catch {} }
路径列表覆盖 XAMPP、WampServer、手动解压、Windows 包管理器(如 Scoop 的
scoop install php
默认位置)
2>$null
和
try/catch
是必须的——Windows 下很多
php.exe
缺少依赖 DLL,直接崩溃,不捕获会中断整个扫描 PowerShell 默认不加载
php.ini
,所以
php -v
输出可能不含扩展信息,但版本号本身是可靠的 真正麻烦的不是找不全,而是某些 PHP 构建根本不提供 CLI SAPI(比如纯嵌入式或 Web Server API-only 版本),它们连
-v
都不响应——这种得靠文件名后缀(如
php-cgi.exe
)、数字签名或
file
命令查 ELF/PE 结构来辅助判断,已经超出“一行命令”范畴了。

相关文章