php怎么实现门禁
使用PHP实现门禁系统
门禁系统通常涉及身份验证、权限管理和访问控制。PHP可以结合数据库和前端技术实现这些功能。
数据库设计
创建用户表和权限表存储相关信息:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL
);
CREATE TABLE access_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
access_time DATETIME NOT NULL,
access_point VARCHAR(50) NOT NULL,
status VARCHAR(20) NOT NULL
);
用户认证功能
实现基本的登录验证功能:
session_start();
function authenticateUser($username, $password) {
$db = new PDO('mysql:host=localhost;dbname=access_control', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute([':username' => $username]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user && password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
$_SESSION['user_role'] = $user['role'];
logAccess($user['id'], 'login', 'success');
return true;
}
logAccess(0, 'login', 'failed');
return false;
}
访问控制功能
实现基于角色的访问控制:
function checkAccess($requiredRole) {
if (!isset($_SESSION['user_role']) || $_SESSION['user_role'] != $requiredRole) {
header('HTTP/1.0 403 Forbidden');
exit('Access denied');
}
}
function logAccess($userId, $accessPoint, $status) {
$db = new PDO('mysql:host=localhost;dbname=access_control', 'username', 'password');
$stmt = $db->prepare("INSERT INTO access_logs (user_id, access_time, access_point, status)
VALUES (:user_id, NOW(), :access_point, :status)");
$stmt->execute([
':user_id' => $userId,
':access_point' => $accessPoint,
':status' => $status
]);
}
门禁点验证
实现具体门禁点的访问验证:
function verifyAccess($accessPointId) {
$db = new PDO('mysql:host=localhost;dbname=access_control', 'username', 'password');
// 检查用户是否有权限访问该门禁点
$stmt = $db->prepare("SELECT * FROM access_points
WHERE id = :point_id AND required_role = :user_role");
$stmt->execute([
':point_id' => $accessPointId,
':user_role' => $_SESSION['user_role']
]);
if ($stmt->rowCount() > 0) {
logAccess($_SESSION['user_id'], 'point_'.$accessPointId, 'granted');
return true;
}
logAccess($_SESSION['user_id'], 'point_'.$accessPointId, 'denied');
return false;
}
硬件接口集成
与门禁硬件设备通信的示例代码:
function triggerDoorUnlock($doorId) {
// 实际应用中这里会调用硬件API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://door-controller/unlock");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['door_id' => $doorId]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
安全注意事项
密码存储应使用PHP的password_hash函数:
$hashedPassword = password_hash($plainPassword, PASSWORD_BCRYPT);
所有数据库查询应使用预处理语句防止SQL注入。敏感操作应记录详细日志。门禁控制接口应进行二次验证。







