本文目录导读:

在 PHP 中进行依赖检查,通常包含以下几种情况和工具:
Composer 依赖检查(最常用)
检查 composer.json 与 composer.lock 是否同步
composer check-platform-reqs composer validate --strict
检查已安装包的依赖关系
# 显示所有已安装的包及其依赖关系 composer show --tree # 检查包是否有安全漏洞 composer audit # 检查过期的依赖包 composer outdated # 详细检查依赖是否满足 composer install --dry-run
在 CI/CD 中使用
# GitHub Actions 示例 - name: Validate composer.json run: composer validate --strict - name: Check dependencies run: composer install --dry-run --no-install
PHP 版本检查(运行时依赖)
// 检查 PHP 版本
if (PHP_VERSION_ID < 70400) {
throw new \Exception('Need PHP 7.4 or higher');
}
// 使用 phpversion() 函数
$requiredVersion = '8.0.0';
if (version_compare(phpversion(), $requiredVersion, '<')) {
die('PHP 版本过低');
}
// 检查特定扩展
if (!extension_loaded('curl')) {
die('需要安装 cURL 扩展');
}
// 检查函数是否存在
if (!function_exists('mysqli_connect')) {
die('需要启用 MySQLi 扩展');
}
运行时依赖检查脚本
<?php
class DependencyChecker {
private array $requiredExtensions = [];
private array $requiredFunctions = [];
private array $requiredClasses = [];
private array $requiredMethods = [];
public function check(): array {
$errors = [];
// 检查扩展
foreach ($this->requiredExtensions as $ext => $version) {
if (!extension_loaded($ext)) {
$errors[] = "缺少扩展: {$ext}";
} elseif ($version &&
version_compare(phpversion($ext), $version, '<')) {
$errors[] = "扩展 {$ext} 版本过低,需要 {$version}";
}
}
// 检查函数
foreach ($this->requiredFunctions as $function) {
if (!function_exists($function)) {
$errors[] = "缺少函数: {$function}";
}
}
// 检查类
foreach ($this->requiredClasses as $class) {
if (!class_exists($class)) {
$errors[] = "缺少类: {$class}";
}
}
return $errors;
}
}
// 使用示例
$checker = new DependencyChecker();
$checker->requiredExtensions = [
'curl' => '7.0.0',
'json' => '',
'mysqli' => '8.0.0',
];
$checker->requiredClasses = [
'PDO',
'Redis',
'Monolog\Logger',
];
$errors = $checker->check();
if (!empty($errors)) {
echo "依赖检查失败:\n" . implode("\n", $errors);
exit(1);
}
echo "所有依赖满足要求\n";
自动化依赖检查工具
使用 PHP_CodeSniffer 检查代码依赖
# 安装 composer require --dev squizlabs/php_codesniffer # 检查代码标准 ./vendor/bin/phpcs --standard=PSR12 src/
使用 PHPStan 进行静态分析
# 安装
composer require --dev phpstan/phpstan
# 运行检查
vendor/bin/phpstan analyse src/ --level=8
# PHPStan 配置示例(phpstan.neon)
parallels:
count: 8
parameters:
level: 8
paths:
- src/
exclre_analyse:
- tests/
Docker 环境依赖检查
# Dockerfile 中的依赖检查
FROM php:8.2-fpm
# 检查扩展
RUN php -m | grep curl
# 或使用 docker-php-ext-install 自动检查
RUN docker-php-ext-install pdo_mysql mysqli
# 组合检查脚本
COPY docker-init.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-init.sh
# docker-init.sh
#!/bin/bash
# 检查所有依赖
required_exts=("curl" "mysqli" "json")
for ext in "${required_exts[@]}"; do
if ! php -m | grep -q "$ext"; then
echo "缺少扩展: $ext"
exit 1
fi
done
# 检查 Composer 依赖
composer install --no-dev --optimize-autoloader
composer check-platform-reqs
echo "所有依赖检查通过"
常见检查点和最佳实践
检查网络连接(使用 curl)
class NetworkDependencyChecker {
public function checkExternalServices(): array {
$services = [
'API Service' => 'https://api.example.com/health',
'Database' => 'https://db.internal:3306',
'Redis' => 'redis://localhost:6379',
];
$failures = [];
foreach ($services as $name => $url) {
if (!$this->testConnection($url)) {
$failures[] = "无法连接: {$name}";
}
}
return $failures;
}
private function testConnection(string $url): bool {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $result !== false && $httpCode >= 200 && $httpCode < 500;
}
}
数据库连接检查
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "数据库连接成功";
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
CI/CD 完整检查流程
# .gitlab-ci.yml 示例
stages:
- dependencies
- tests
check-dependencies:
stage: dependencies
script:
- composer validate --strict
- composer install --no-dev --prefer-dist
- composer check-platform-reqs
- php -v
- php -m | grep -E "curl|json|mysqli"
- vendor/bin/phpstan analyse src/ --level=8
only:
- main
- develop
快速检查清单
# 快速检查命令集合 php -v # PHP 版本 php -m # 已安装扩展 composer install --dry-run # 依赖安装模拟 composer show --platform-reqs # 平台要求 composer check-platform-reqs # 平台检查 composer audit # 安全检测 php -l file.php # 语法检查 vendor/bin/phpcs --standard=PSR12 # 代码规范
依赖检查是确保应用稳定运行的重要环节,建议在开发环境、CI/CD 流程中都配置相应的检查机制。