PHP 怎么依赖检查

wen PHP项目 2

本文目录导读:

PHP 怎么依赖检查

  1. Composer 依赖检查(最常用)
  2. PHP 版本检查(运行时依赖)
  3. 运行时依赖检查脚本
  4. 自动化依赖检查工具
  5. Docker 环境依赖检查
  6. 常见检查点和最佳实践
  7. CI/CD 完整检查流程
  8. 快速检查清单

在 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 流程中都配置相应的检查机制。

抱歉,评论功能暂时关闭!