'127.0.0.1', 'port' => 3306, 'user' => 'root', 'pass' => '1Qq@1Qq@190*', ]; echo "=== 1) TCP 3306 握手耗时 ===\n"; $start = microtime(true); $fp = @fsockopen($creds['host'], $creds['port'], $errno, $errstr, 5); $elapsed = round((microtime(true) - $start) * 1000); if ($fp) { echo " TCP connect OK in {$elapsed}ms\n"; fclose($fp); } else { echo " TCP connect FAILED: $errstr ($errno) in {$elapsed}ms\n"; exit(1); } echo "\n=== 2) MySQL PDO 握手 ===\n"; $start = microtime(true); try { $dsn = "mysql:host={$creds['host']};port={$creds['port']};charset=utf8mb4"; $pdo = new PDO($dsn, $creds['user'], $creds['pass'], [ PDO::ATTR_TIMEOUT => 10, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); $elapsed = round((microtime(true) - $start) * 1000); echo " PDO connect OK in {$elapsed}ms\n"; $ver = $pdo->query('SELECT VERSION()')->fetchColumn(); echo " MySQL version: $ver\n"; echo "\n=== 3) Nextcloud 相关 db ===\n"; $dbs = $pdo->query('SHOW DATABASES')->fetchAll(PDO::FETCH_COLUMN); foreach ($dbs as $d) { $l = strtolower($d); if (strpos($l, 'nextcloud') !== false || strpos($l, 'nc_') !== false) { echo " - $d\n"; } } echo "\n=== 4) nextcloud db 表数(如果存在)===\n"; foreach ($dbs as $d) { $l = strtolower($d); if (strpos($l, 'nextcloud') !== false) { $pdo->exec("USE `$d`"); $tables = $pdo->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN); echo " $d: " . count($tables) . " tables\n"; if (count($tables) > 0 && count($tables) < 20) { foreach ($tables as $t) echo " - $t\n"; } } } } catch (Throwable $e) { $elapsed = round((microtime(true) - $start) * 1000); echo " PDO connect FAILED in {$elapsed}ms: " . $e->getMessage() . "\n"; }