当前位置:首页 > PHP

php实现消息

2026-01-29 18:15:31PHP

PHP实现消息功能的方法

数据库设计

创建消息表存储消息数据,基本字段包括:

  • id:消息唯一标识
  • sender_id:发送者ID
  • receiver_id:接收者ID
  • content:消息内容
  • created_at:发送时间
  • status:消息状态(已读/未读)
CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    sender_id INT NOT NULL,
    receiver_id INT NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status TINYINT DEFAULT 0 COMMENT '0未读 1已读'
);

发送消息功能

使用PHP处理表单提交并将消息存入数据库:

<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $senderId = $_POST['sender_id'];
    $receiverId = $_POST['receiver_id'];
    $content = htmlspecialchars($_POST['content']);

    $stmt = $db->prepare("INSERT INTO messages (sender_id, receiver_id, content) VALUES (?, ?, ?)");
    $stmt->execute([$senderId, $receiverId, $content]);

    echo "消息发送成功";
}
?>

接收消息功能

查询特定用户的未读消息:

<?php
$userId = $_GET['user_id']; // 当前用户ID
$stmt = $db->prepare("SELECT * FROM messages WHERE receiver_id = ? AND status = 0 ORDER BY created_at DESC");
$stmt->execute([$userId]);
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($messages as $message) {
    echo "<div class='message'>";
    echo "<p>" . htmlspecialchars($message['content']) . "</p>";
    echo "<small>" . $message['created_at'] . "</small>";
    echo "</div>";

    // 标记为已读
    $update = $db->prepare("UPDATE messages SET status = 1 WHERE id = ?");
    $update->execute([$message['id']]);
}
?>

实时消息推送

使用WebSocket或长轮询实现实时消息通知:

// 长轮询示例
while (true) {
    $stmt = $db->prepare("SELECT COUNT(*) FROM messages WHERE receiver_id = ? AND status = 0");
    $stmt->execute([$userId]);
    $count = $stmt->fetchColumn();

    if ($count > 0) {
        echo json_encode(['has_new' => true]);
        break;
    }

    sleep(1); // 每秒检查一次
}

消息队列处理

对于高并发场景,可以使用Redis队列:

// 发送消息时存入Redis队列
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->rPush('message_queue', json_encode([
    'sender_id' => $senderId,
    'receiver_id' => $receiverId,
    'content' => $content
]));

安全性考虑

  • 使用预处理语句防止SQL注入
  • 对输出内容使用htmlspecialchars()过滤
  • 验证用户身份和权限
  • 敏感内容加密存储

php实现消息

标签: 消息php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…