本文目录导读:

在 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 流程中都配置相应的检查机制。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播