php 怎么实现门禁
使用PHP实现门禁系统
PHP可以通过多种方式实现门禁功能,包括基于数据库验证、API接口验证或硬件设备交互。以下是几种常见的方法:
数据库验证方式
通过数据库存储用户权限信息,验证用户是否有权限进入特定区域。
<?php
session_start();
$user_id = $_SESSION['user_id'];
$door_id = $_POST['door_id'];
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=access_control', 'username', 'password');
// 检查用户权限
$stmt = $db->prepare("SELECT * FROM user_permissions WHERE user_id = ? AND door_id = ?");
$stmt->execute([$user_id, $door_id]);
$permission = $stmt->fetch();
if ($permission) {
// 有权限,开门
echo json_encode(['status' => 'success', 'message' => 'Access granted']);
} else {
// 无权限
echo json_encode(['status' => 'error', 'message' => 'Access denied']);
}
?>
RFID/NFC卡验证
与硬件读卡器集成,验证RFID或NFC卡的合法性。

<?php
$card_uid = $_POST['card_uid'];
// 验证卡片
$db = new PDO('mysql:host=localhost;dbname=access_control', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM registered_cards WHERE card_uid = ?");
$stmt->execute([$card_uid]);
$card = $stmt->fetch();
if ($card) {
// 合法卡片,开门
echo "ACCESS_GRANTED";
// 记录访问日志
$log_stmt = $db->prepare("INSERT INTO access_logs (card_id, access_time) VALUES (?, NOW())");
$log_stmt->execute([$card['id']]);
} else {
echo "ACCESS_DENIED";
}
?>
面部识别集成
与面部识别系统API集成,实现生物识别门禁。
<?php
$image_data = $_POST['image'];
$api_key = 'YOUR_FACE_API_KEY';
// 调用面部识别API
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.face-recognition.com/verify");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['image' => $image_data]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer '.$api_key, 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if ($result['verified']) {
echo "ACCESS_GRANTED";
} else {
echo "ACCESS_DENIED";
}
?>
时间限制访问
实现基于时间的访问控制,限制特定时段才能进入。

<?php
$user_id = $_POST['user_id'];
$current_time = date('H:i');
$db = new PDO('mysql:host=localhost;dbname=access_control', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM user_schedules WHERE user_id = ? AND start_time <= ? AND end_time >= ?");
$stmt->execute([$user_id, $current_time, $current_time]);
$schedule = $stmt->fetch();
if ($schedule) {
echo "ACCESS_GRANTED";
} else {
echo "ACCESS_DENIED: Outside allowed time";
}
?>
硬件接口控制
通过PHP与门禁控制器通信,实际控制门的开关。
<?php
// 通过GPIO控制门锁
function controlDoor($state) {
$gpio_pin = 17; // 根据实际接线调整
// 执行系统命令控制GPIO
if ($state === 'open') {
exec("gpio -g mode $gpio_pin out");
exec("gpio -g write $gpio_pin 1");
sleep(5); // 保持开门状态5秒
exec("gpio -g write $gpio_pin 0");
}
}
// 验证通过后开门
controlDoor('open');
?>
安全注意事项
实现门禁系统时需考虑以下安全因素:
- 所有敏感数据传输必须使用HTTPS加密
- 数据库查询使用预处理语句防止SQL注入
- 重要操作记录详细日志
- 实现防暴力破解机制
- 定期备份权限数据和访问日志
以上方法可根据实际需求组合使用,构建完整的门禁控制系统。






