mirror of
https://devops.lemonos.cn/lawson/FendxPHP.git
synced 2026-06-15 15:02:49 +08:00
- 创建用户表(users)包含基本信息和认证字段 - 创建角色表(roles)用于权限控制 - 创建权限表(permissions)定义系统权限 - 创建用户角色关联表(user_roles)建立用户与角色关系 - 创建角色权限关联表(role_permissions)建立角色与权限关系 - 创建迁移记录表(migrations)追踪数据库变更 - 添加AdminController提供管理员面板功能 - 实现系统监控、配置管理、缓存清理等功能 - 添加AOP切面编程支持的各种通知类型 - 实现告警管理AlertManager支持多渠道告警 - 添加文档注解接口规范
268 lines
6.8 KiB
PHP
268 lines
6.8 KiB
PHP
<?php
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* FendxPHP 快速冒烟测试脚本
|
||
* 使用方法: php test.php
|
||
*/
|
||
|
||
echo "🚀 FendxPHP 冒烟测试开始...\n\n";
|
||
|
||
// 检查PHP版本
|
||
echo "📋 检查PHP版本...\n";
|
||
$phpVersion = PHP_VERSION;
|
||
echo "PHP版本: $phpVersion\n";
|
||
if (version_compare($phpVersion, '8.1.0', '<')) {
|
||
echo "❌ PHP版本过低,需要 >= 8.1\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ PHP版本检查通过\n\n";
|
||
|
||
// 检查必需扩展
|
||
echo "📋 检查必需扩展...\n";
|
||
$requiredExtensions = ['pdo', 'redis', 'json', 'mbstring'];
|
||
foreach ($requiredExtensions as $ext) {
|
||
if (!extension_loaded($ext)) {
|
||
echo "❌ 缺少扩展: $ext\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ $ext 扩展已安装\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查文件结构
|
||
echo "📋 检查项目结构...\n";
|
||
$requiredDirs = [
|
||
'app',
|
||
'config',
|
||
'fendx-framework',
|
||
'public',
|
||
'runtime',
|
||
'docs'
|
||
];
|
||
|
||
foreach ($requiredDirs as $dir) {
|
||
if (!is_dir($dir)) {
|
||
echo "❌ 缺少目录: $dir\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 目录 $dir 存在\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查核心文件
|
||
echo "📋 检查核心文件...\n";
|
||
$requiredFiles = [
|
||
'fendx.php',
|
||
'public/index.php',
|
||
'config/config.php',
|
||
'FendxPHP_项目架构.txt',
|
||
'README.md'
|
||
];
|
||
|
||
foreach ($requiredFiles as $file) {
|
||
if (!file_exists($file)) {
|
||
echo "❌ 缺少文件: $file\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 文件 $file 存在\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查配置文件
|
||
echo "📋 检查配置文件...\n";
|
||
$configFiles = [
|
||
'config/app.php',
|
||
'config/database.php',
|
||
'config/cache.php',
|
||
'config/routes.php'
|
||
];
|
||
|
||
foreach ($configFiles as $file) {
|
||
if (!file_exists($file)) {
|
||
echo "❌ 缺少配置文件: $file\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 配置文件 $file 存在\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查框架模块
|
||
echo "📋 检查框架模块...\n";
|
||
$frameworkModules = [
|
||
'fendx-framework/fendx-common',
|
||
'fendx-framework/fendx-core',
|
||
'fendx-framework/fendx-web',
|
||
'fendx-framework/fendx-db',
|
||
'fendx-framework/fendx-cache',
|
||
'fendx-framework/fendx-security',
|
||
'fendx-framework/fendx-log',
|
||
'fendx-framework/fendx-starter',
|
||
'fendx-framework/fendx-job',
|
||
'fendx-framework/fendx-file'
|
||
];
|
||
|
||
foreach ($frameworkModules as $module) {
|
||
if (!is_dir($module)) {
|
||
echo "❌ 缺少模块: $module\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 模块 $module 存在\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查应用模块
|
||
echo "📋 检查应用模块...\n";
|
||
$appModules = [
|
||
'app/Controller',
|
||
'app/Service',
|
||
'app/Dao',
|
||
'app/Entity',
|
||
'app/Job',
|
||
'app/Command'
|
||
];
|
||
|
||
foreach ($appModules as $module) {
|
||
if (!is_dir($module)) {
|
||
echo "⚠️ 应用模块 $module 不存在(可选)\n";
|
||
continue;
|
||
}
|
||
echo "✅ 应用模块 $module 存在\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查运行时目录权限
|
||
echo "📋 检查运行时目录权限...\n";
|
||
$runtimeDirs = ['runtime/logs', 'runtime/cache', 'runtime/temp', 'runtime/storage'];
|
||
foreach ($runtimeDirs as $dir) {
|
||
if (!is_dir($dir)) {
|
||
mkdir($dir, 0755, true);
|
||
echo "📁 创建目录: $dir\n";
|
||
}
|
||
|
||
if (!is_writable($dir)) {
|
||
echo "❌ 目录 $dir 不可写\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 目录 $dir 可写\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 尝试加载配置
|
||
echo "📋 测试配置加载...\n";
|
||
try {
|
||
$config = require 'config/config.php';
|
||
if (!is_array($config)) {
|
||
echo "❌ 配置文件格式错误\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 配置文件加载成功\n";
|
||
|
||
// 检查必需配置项
|
||
$requiredConfigKeys = ['app', 'database', 'cache'];
|
||
foreach ($requiredConfigKeys as $key) {
|
||
if (!isset($config[$key])) {
|
||
echo "❌ 缺少配置项: $key\n";
|
||
exit(1);
|
||
}
|
||
echo "✅ 配置项 $key 存在\n";
|
||
}
|
||
} catch (Exception $e) {
|
||
echo "❌ 配置加载失败: " . $e->getMessage() . "\n";
|
||
exit(1);
|
||
}
|
||
echo "\n";
|
||
|
||
// 测试数据库连接(可选)
|
||
echo "📋 测试数据库连接...\n";
|
||
try {
|
||
$dbConfig = require 'config/database.php';
|
||
$dsn = "mysql:host={$dbConfig['default']['host']};dbname={$dbConfig['default']['dbname']}";
|
||
$pdo = new PDO($dsn, $dbConfig['default']['username'], $dbConfig['default']['password']);
|
||
$pdo->query('SELECT 1');
|
||
echo "✅ 数据库连接成功\n";
|
||
} catch (Exception $e) {
|
||
echo "⚠️ 数据库连接失败: " . $e->getMessage() . "\n";
|
||
echo " 请检查数据库配置和服务状态\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 测试Redis连接(可选)
|
||
echo "📋 测试Redis连接...\n";
|
||
try {
|
||
$cacheConfig = require 'config/cache.php';
|
||
$redis = new Redis();
|
||
$redis->connect($cacheConfig['host'], $cacheConfig['port']);
|
||
if (!empty($cacheConfig['password'])) {
|
||
$redis->auth($cacheConfig['password']);
|
||
}
|
||
$redis->ping();
|
||
echo "✅ Redis连接成功\n";
|
||
} catch (Exception $e) {
|
||
echo "⚠️ Redis连接失败: " . $e->getMessage() . "\n";
|
||
echo " 请检查Redis配置和服务状态\n";
|
||
}
|
||
echo "\n";
|
||
|
||
// 检查语法错误
|
||
echo "📋 检查PHP语法...\n";
|
||
$phpFiles = [];
|
||
$iterator = new RecursiveIteratorIterator(
|
||
new RecursiveDirectoryIterator('.', RecursiveDirectoryIterator::SKIP_DOTS)
|
||
);
|
||
|
||
foreach ($iterator as $file) {
|
||
if ($file->isFile() && $file->getExtension() === 'php') {
|
||
$phpFiles[] = $file->getPathname();
|
||
}
|
||
}
|
||
|
||
$syntaxErrors = 0;
|
||
foreach ($phpFiles as $file) {
|
||
$output = [];
|
||
$returnCode = 0;
|
||
exec("php -l \"$file\" 2>&1", $output, $returnCode);
|
||
|
||
if ($returnCode !== 0) {
|
||
echo "❌ 语法错误: $file\n";
|
||
echo " " . implode("\n ", $output) . "\n";
|
||
$syntaxErrors++;
|
||
}
|
||
}
|
||
|
||
if ($syntaxErrors === 0) {
|
||
echo "✅ 所有PHP文件语法正确\n";
|
||
} else {
|
||
echo "❌ 发现 $syntaxErrors 个语法错误\n";
|
||
exit(1);
|
||
}
|
||
echo "\n";
|
||
|
||
// 生成测试报告
|
||
echo "📊 生成测试报告...\n";
|
||
$report = [
|
||
'test_time' => date('Y-m-d H:i:s'),
|
||
'php_version' => PHP_VERSION,
|
||
'extensions' => get_loaded_extensions(),
|
||
'memory_limit' => ini_get('memory_limit'),
|
||
'max_execution_time' => ini_get('max_execution_time'),
|
||
'file_count' => count($phpFiles),
|
||
'directory_structure' => $requiredDirs,
|
||
'framework_modules' => $frameworkModules
|
||
];
|
||
|
||
file_put_contents('runtime/test_report.json', json_encode($report, JSON_PRETTY_PRINT));
|
||
echo "✅ 测试报告已保存到 runtime/test_report.json\n\n";
|
||
|
||
// 最终结果
|
||
echo "🎉 FendxPHP 冒烟测试完成!\n";
|
||
echo "✅ 所有检查通过,框架可以正常运行\n\n";
|
||
|
||
echo "📝 下一步操作:\n";
|
||
echo "1. 启动Web服务: php -S localhost:8000 -t public\n";
|
||
echo "2. 访问健康检查: curl http://localhost:8000/health\n";
|
||
echo "3. 测试API接口: curl http://localhost:8000/api/users\n";
|
||
echo "4. 查看详细文档: docs/冒烟测试指南.md\n\n";
|
||
|
||
echo "🚀 框架已准备就绪,开始开发吧!\n";
|