php实现cmdb
PHP实现CMDB系统
CMDB(配置管理数据库)用于集中管理IT基础设施的配置项信息。以下是基于PHP实现CMDB系统的关键要点:
数据库设计
创建核心表结构存储配置项信息:
CREATE TABLE ci (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
type_id INT NOT NULL,
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE ci_types (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT
);
CREATE TABLE ci_attributes (
ci_id INT NOT NULL,
attr_name VARCHAR(100) NOT NULL,
attr_value TEXT,
PRIMARY KEY (ci_id, attr_name)
);
核心功能实现
配置项管理类示例:

class ConfigurationItem {
private $db;
public function __construct($dbConnection) {
$this->db = $dbConnection;
}
public function addCI($name, $typeId, $attributes = []) {
$stmt = $this->db->prepare("INSERT INTO ci (name, type_id) VALUES (?, ?)");
$stmt->execute([$name, $typeId]);
$ciId = $this->db->lastInsertId();
foreach($attributes as $name => $value) {
$this->addAttribute($ciId, $name, $value);
}
return $ciId;
}
private function addAttribute($ciId, $name, $value) {
$stmt = $this->db->prepare("INSERT INTO ci_attributes VALUES (?, ?, ?)");
$stmt->execute([$ciId, $name, $value]);
}
}
关系建模
实现配置项之间的关系管理:
class CIRelationship {
private $db;
public function __construct($dbConnection) {
$this->db = $dbConnection;
}
public function addRelationship($sourceId, $targetId, $relationType) {
$stmt = $this->db->prepare("INSERT INTO ci_relationships VALUES (?, ?, ?)");
return $stmt->execute([$sourceId, $targetId, $relationType]);
}
}
前端界面
使用Bootstrap构建管理界面:

<div class="ci-form">
<form method="post" action="save_ci.php">
<div class="form-group">
<label>CI名称</label>
<input type="text" name="name" class="form-control" required>
</div>
<div class="form-group">
<label>CI类型</label>
<select name="type_id" class="form-control">
<?php foreach($ciTypes as $type): ?>
<option value="<?= $type['id'] ?>"><?= htmlspecialchars($type['name']) ?></option>
<?php endforeach ?>
</select>
</div>
</form>
</div>
扩展功能
实现自动发现功能示例:
class AutoDiscovery {
public function scanNetwork($subnet) {
// 实现网络扫描逻辑
$devices = [];
// ...
return $devices;
}
public function importToCMDB($discoveredDevices) {
foreach($discoveredDevices as $device) {
$this->ciModel->addCI($device['name'], $device['type'], $device['attrs']);
}
}
}
安全考虑
实现基本的访问控制:
class AccessControl {
public function checkPermission($userId, $action) {
$stmt = $this->db->prepare("SELECT COUNT(*) FROM user_permissions WHERE user_id = ? AND permission = ?");
$stmt->execute([$userId, $action]);
return $stmt->fetchColumn() > 0;
}
}
以上代码示例展示了PHP实现CMDB系统的核心组件,实际开发中需要根据具体需求进行扩展和完善。建议采用MVC架构组织代码,并使用Composer管理依赖。






