Files
2026-11-11 14:22:02 +08:00

23 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
$originalRoot = 'C:/zyt/server';
try {
$environment = parse_ini_file($originalRoot . '/.env', true, INI_SCANNER_RAW);
if (!is_array($environment)) { throw new RuntimeException('Unable to load project configuration'); }
$database = array_change_key_case($environment['database'] ?? [], CASE_LOWER);
$prefix = (string) ($database['prefix'] ?? '');
if (!preg_match('/^[a-zA-Z0-9_]*$/D', $prefix)) { throw new RuntimeException('Invalid prefix'); }
$pdo = new PDO('mysql:host=' . $database['hostname'] . ';port=' . ($database['hostport'] ?? '3306') . ';dbname=' . $database['database'] . ';charset=utf8mb4', $database['username'], $database['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => 5]);
$result = ['connected' => true, 'read_only_probe' => true];
foreach (['admin', 'system_role', 'system_menu', 'dept', 'admin_role', 'admin_dept', 'admin_jobs', 'admin_session'] as $table) {
$columns = $pdo->query('SHOW COLUMNS FROM `' . $prefix . $table . '`')->fetchAll(PDO::FETCH_COLUMN);
$where = in_array('delete_time', $columns, true) ? ' WHERE delete_time IS NULL' : '';
$result['tables'][$table] = ['count' => (int) $pdo->query('SELECT COUNT(*) FROM `' . $prefix . $table . '`' . $where)->fetchColumn(), 'columns' => $columns];
}
$result['navigation_candidates'] = $pdo->query("SELECT id,type,name,perms,paths,component,is_disable FROM `{$prefix}system_menu` WHERE component IN ('permission/admin/index','permission/role/index','permission/menu/index','organization/department/index') OR perms IN ('auth.admin/lists','auth.role/lists','auth.menu/lists','dept.dept/lists')")->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
} catch (Throwable $error) {
echo json_encode(['connected' => false, 'error_code' => (string) $error->getCode(), 'message' => 'Project database probe failed; credentials were not printed.']) . PHP_EOL;
exit(1);
}