可在 composer.json 的 "scripts" 段定义自定义脚本,用 PHP 内置函数检查环境;轻量、无需额外依赖,可随 composer install 或手动触发运行。

可以在 composer.json 的 "scripts" 段中定义一个自定义脚本,利用 PHP 内置函数检查当前环境是否满足项目要求。这种方式轻量、无需额外依赖,且能随 composer install 或手动触发运行。
在 composer.json 中定义检查脚本
将以下内容添加到项目的 composer.json 文件的 "scripts" 区块中:
"scripts": {
"check-env": [
"@php -r \"if (version_compare(PHP_VERSION, '8.1.0', '<')) { echo \"\\n❌ PHP 版本过低:当前是 \" . PHP_VERSION . \",需至少 8.1.0\\n\"; exit(1); } else { echo '\\n✅ PHP 版本 OK:' . PHP_VERSION . \"\\n\"; }\"",
"@php -r \"if (!extension_loaded('mbstring')) { echo \"\\n❌ 缺少扩展:mbstring 未启用\\n\"; exit(1); } else { echo '✅ 扩展 OK:mbstring\\n'; }\"",
"@php -r \"if (!extension_loaded('curl')) { echo \"\\n❌ 缺少扩展:curl 未启用\\n\"; exit(1); } else { echo '✅ 扩展 OK:curl\\n'; }\""
]
}
你可以按需增减检查项,比如加 json、openssl、pdo_mysql 等。
支持更灵活的检查逻辑(推荐)
把检查逻辑抽成独立 PHP 脚本(如 bin/check-env.php),更易维护和测试:
立即学习“PHP免费学习笔记(深入)”;
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
- 创建
bin/check-env.php,内容类似:
= {$requiredPhpVersion}\n");
exit(1);
}
$requiredExtensions = ['mbstring', 'curl', 'json', 'openssl'];
foreach ($requiredExtensions as $ext) {
if (!extension_loaded($ext)) {
fwrite(STDERR, "❌ 缺少扩展:{$ext}\n");
exit(1);
}
}
echo "✅ 环境检查通过\n";
- 在
composer.json中调用它:
"scripts": {
"check-env": "php bin/check-env.php"
}
自动在安装/更新时运行检查
利用 Composer 的事件钩子,让检查在关键流程中自动触发:
- 添加到
"scripts"的事件监听中:
"scripts": {
"check-env": "php bin/check-env.php",
"post-install-cmd": "@check-env",
"post-update-cmd": "@check-env"
}
这样每次执行 composer install 或 composer update 后都会自动校验。如果失败,命令会中断并报错,避免在不兼容环境中继续操作。
增强体验的小技巧
让检查更友好、可调试:
- 输出当前 PHP 二进制路径:
echo '? PHP 路径:' . PHP_BINARY . "\n"; - 检查扩展版本(如需要):
phpversion('curl') - 跳过检查(开发调试时):
composer run check-env -- --no-check(需在脚本中解析参数) - 结合
composer.json的"config.platform"做语义化提示(非强制,仅提示)
基本上就这些。不复杂但容易忽略——关键是把检查变成自动化环节,而不是靠人肉记文档。










