php实现可视化管理Mongodb数据库管理ui代码
代码语言:php
所属分类:其他
代码描述:php实现可视化管理Mongo数据库管理ui代码,可浏览Mongodb数据库集合,增删改查。
代码标签: php 可视化 管理 Mongo 数据库 管理 ui 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<?php // ################################################################## // # 单文件 MongoDB 可视化 UI 管理器 // # 版本: 1.0.0 // # 依赖: PHP >= 7.2, PHP MongoDB 驱动 (mongodb.so) // ################################################################## // --- 安全设置 --- // 建议设置一个复杂的密码,或者留空以在每次访问时输入连接信息。 // 如果设置了密码,访问时需要 ?password=你的密码 define('LOGIN_PASSWORD', ''); // 例如: 'MySuperSecretPassword123' // --- PHP 后端 API --- @session_start(); // API 路由 if (isset($_REQUEST['action'])) { handle_api_request(); } function handle_api_request() { // 检查登录密码(如果已设置) if (LOGIN_PASSWORD && (!isset($_GET['password']) || $_GET['password'] !== LOGIN_PASSWORD)) { if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { json_response(['success' => false, 'message' => '身份验证失败: 密码错误'], 403); } } else { $_SESSION['logged_in'] = true; } // 如果是通过密码登录,后续请求无需密码 if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) { // pass } else { json_response(['success' => false, 'message' => '需要身份验证'], 401); } $action = $_REQUEST['action']; $allowed_actions = [ 'connect', 'disconnect', 'check_status', 'get_server_stats', 'get_databases', 'get_collections', 'get_documents', 'get_document', 'save_document', 'delete_document' ]; if (!in_array($action, $allowed_actions)) { json_response(['success' => false, 'message' => '无效的操作'], 400); } try { call_user_func("api_{$action}"); } catch (Exception $e) { json_response(['success' => false, 'message' => get_class($e) . ': ' . $e->getMessage()], 500); } } function json_response($data, $status_code = 200) { http_response_code($status_code); header('Content-Type: application/json; charset=utf-8'); // 将 MongoDB 特殊类型转换为可读字符串 $json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); $json = preg_replace_callback('/{\s*"\$oid":\s*"([a-f0-9]{24})"\s*}/', function($m) { return '{"$oid": "' . $m[1] . '"}'; // 保持oid格式 }, $json); echo $json; exit; } function get_manager() { if (!isset($_SESSION['mongo_config'])) { throw new Exception("未连接到 MongoDB. 请先在主页连接."); } $dbConfig = $_SESSION['mongo_config']; $dsn = 'mongodb://'; if (!empty($dbConfig['user'])) { $user = urlencode($dbConfig['user']); $pass = urlencode($dbConfig['password']); $dsn .= "{$user}:{$pass}@"; } $dsn .= "{$dbConfig['host']}:" . $dbConfig['port']."/".$dbConfig['user']; $options = []; // 增加连接超时设置 return new MongoDB\Driver\Manager($dsn, $options); } function to_php_value($value) { if ($value instanceof MongoDB\BSON\ObjectId) { return (string) $value; } if ($value instanceof MongoDB\BSON\UTCDateTime) { return $value->toDateTime()->format('Y-m-d H:i:s.u'); } if (is_array($value)) { foreach ($value as $k => $v) { $value[$k] = to_php_value($v); } } if (is_object($value)) { $props = get_object_vars($value); foreach ($props as $k => $v) { $props[$k] = to_php_value($v); } return $props; } return $value; } function bson_to_array($bson) { $arr = MongoDB\BSON\toJSON($bson); return json_decode($arr, true); } function string_to_bson_value($val) { if (is_string($val)) { if (preg_match('/^ObjectId\("([a-f0-9]{24})"\)$/i', trim($val), $matches)) { return new MongoDB\BSON\ObjectId($matches[1]); } // 可扩展支持其他BSON类型,如日期 } return $val; } function prepare_document_for_save($doc) { array_walk_recursive($doc, function (&$value, $key) { $value = string_to_bson_value($value); }); if (isset($doc['_id']) && is_string($doc['_id']) && strlen($doc['_id']) === 24 && ctype_xdigit($doc['_id'])) { $doc['_id'] = new MongoDB\BSON\ObjectId($doc['_id']); } return $doc; } // --- API 函数实现 --- function api_connect() { $config = json_decode(file_get_contents('php://input'), true); $_SESSION['mongo_config'] = $config; try { $manager = get_manager(); $command = new MongoDB\Driver\Command(['ping' => 1]); $manager->executeCommand('admin', $command); $_SESSION['connected'] = true; json_response(['success' => true, 'message' => '连接成功!']); } catch (Exception $e) { unset($_SESSION['mongo_config']); unset($_SESSION['connected']); throw new Exception("连接失败: " . $e->getMessage()); } } function api_disconnect() { unset($_SESSION['mongo_config']); unset($_SESSION['connected']); session_destroy(); json_response(['success' => true, 'message' => '已断开连接']); } function api_check_status() { if (isset($_SESSION['connected']) && $_SESSION['connected']) { json_response(['success' => true, 'connected' => true, 'config' => $_SESSION['mongo_config']]); } else { json_response(['success' => true, 'connected' => false]); } } function api_get_server_stats() { $manager = get_manager(); try { $command = new MongoDB\Driver\Command(['serverStatus' => 1]); $cursor = $manager->executeCommand('admin', $command); $stats = $cursor->toArray()[0]; json_response(['success' => true, 'data' => [ 'host' => $stats->host ?? 'N/A', 'version' => $stats->version ?? 'N/A', 'process' => $stats->process ?? 'N/A', 'pid' => $stats->pid ?? 0, 'uptime' => $stats->uptime ?? 0, 'connections' => $stats->connections ?? (object)['current' => 0, 'available' => 0], ]]); } catch (Exception $e) { // 权限不足时返回空数据,避免 UI 崩溃 json_response(['success' => true, 'data' => [ 'host' => 'N/A', 'version' => 'N/A', 'process' => 'N/A', 'pid' => 0, 'uptime' => 0, 'connections' => (object)['current' => 0, 'available' => 0], ]]); } } function api_get_databases() { $manager = get_manager(); $command = new MongoDB\Driver\Command(['listDatabases' => 1]); $cursor = $manager->executeCommand('admin', $command); $databases = $cursor->toArray()[0]->databases; json_response(['success' => true, 'data' => $databases]); } function api_get_collections() { $dbName = $_GET['db']; $manager = get_manager(); $command = new MongoDB\Driver\Command(['listCollections' => 1]); $cursor = $manager->executeCommand($dbName, $command); $collections = $cursor->toArray(); json_response(['success' => true, .........完整代码请登录后点击上方下载按钮下载查看
网友评论0