当前位置:首页 > PHP

php实现消息通知

2026-02-16 07:43:02PHP

PHP 实现消息通知的方法

使用数据库存储通知

在数据库中创建通知表,包含字段如 iduser_idmessageis_readcreated_at。通过 SQL 插入新通知,用户登录时查询未读通知。

CREATE TABLE notifications (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    message TEXT NOT NULL,
    is_read BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

PHP 插入通知示例:

$message = "您有一条新消息";
$userId = 1;
$stmt = $pdo->prepare("INSERT INTO notifications (user_id, message) VALUES (?, ?)");
$stmt->execute([$userId, $message]);

使用 Session 或 Cookie 存储临时通知

对于一次性通知如操作成功提示,可使用 Session 存储并在页面显示后清除。

session_start();
$_SESSION['notification'] = "操作成功";
// 在页面显示后
unset($_SESSION['notification']);

使用 WebSocket 实现实时通知

结合前端技术如 WebSocket,实现服务器主动推送。需要 Ratchet 等 PHP WebSocket 库。

安装 Ratchet:

composer require cboden/ratchet

创建 WebSocket 服务器:

use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\NotificationHandler;

require dirname(__DIR__) . '/vendor/autoload.php';

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new NotificationHandler()
        )
    ),
    8080
);
$server->run();

使用第三方服务

集成第三方通知服务如 Firebase Cloud Messaging (FCM) 或 Pusher,实现跨平台推送。

Pusher 示例:

require __DIR__ . '/vendor/autoload.php';
$pusher = new Pusher\Pusher(
    "APP_KEY", 
    "APP_SECRET", 
    "APP_ID", 
    ['cluster' => 'APP_CLUSTER']
);
$pusher->trigger('notifications', 'new_message', [
    'message' => 'Hello World'
]);

邮件通知

通过 PHP 内置 mail() 函数或 PHPMailer 库发送邮件通知。

PHPMailer 示例:

use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer;
$mail->setFrom('from@example.com');
$mail->addAddress('to@example.com');
$mail->Subject = '通知标题';
$mail->Body = '通知内容';
$mail->send();

浏览器推送通知

使用 Service Worker 和 Push API 实现浏览器推送,PHP 后端处理订阅和触发。

保存订阅信息到数据库:

$subscription = json_decode(file_get_contents('php://input'), true);
$stmt = $pdo->prepare("INSERT INTO push_subscriptions (endpoint, public_key, auth_token) VALUES (?, ?, ?)");
$stmt->execute([$subscription['endpoint'], $subscription['keys']['p256dh'], $subscription['keys']['auth']]);

综合方案示例

结合数据库和实时推送的完整流程:

  1. 用户操作触发 PHP 生成通知并存入数据库
  2. 通过 WebSocket 或 Pusher 实时推送给在线用户
  3. 离线用户下次登录时从数据库拉取未读通知
  4. 重要通知通过邮件或浏览器推送补充送达
// 生成通知
function createNotification($userId, $message) {
    global $pdo;
    $stmt = $pdo->prepare("INSERT INTO notifications (user_id, message) VALUES (?, ?)");
    $stmt->execute([$userId, $message]);

    // 实时推送
    $pusher->trigger('user_' . $userId, 'new_notification', [
        'message' => $message
    ]);
}

以上方法可根据项目需求单独或组合使用,实现灵活的消息通知系统。

php实现消息通知

标签: 消息通知
分享给朋友:

相关文章

uniapp 消息推送

uniapp 消息推送

uniapp 消息推送实现方法 使用uniPush服务 uniapp官方提供了uniPush服务,支持iOS、Android及小程序平台的消息推送。需要在manifest.json中配置推送模块,并按…

vue实现队列消息

vue实现队列消息

Vue 实现队列消息 在 Vue 中实现队列消息功能,可以通过以下方法实现一个简单的消息队列系统,用于显示和管理临时通知(如成功、错误提示)。 使用 Vuex 管理消息队列 创建一个 Vuex st…

vue实现广播通知

vue实现广播通知

vue实现广播通知的方法 使用 Vue 的全局事件总线(Event Bus)实现广播通知是一种常见方案。以下为具体实现步骤: 创建全局事件总线 在 Vue 项目中新建一个 event-bus.js…

vue实现消息滚动

vue实现消息滚动

Vue 实现消息滚动的方法 使用 CSS 动画实现滚动 通过 CSS 的 animation 和 @keyframes 实现消息的平滑滚动效果。适用于简单的文字滚动需求。 <template…

vue实现单行消息滚动

vue实现单行消息滚动

实现单行消息滚动效果 在Vue中实现单行消息滚动效果可以通过CSS动画或JavaScript动态控制样式实现。以下是两种常用方法: 方法一:使用CSS动画实现无缝滚动 <templa…

vue框架实现消息提醒

vue框架实现消息提醒

Vue 框架实现消息提醒的方法 使用 Vue 的组件化特性创建消息提醒组件 创建一个独立的 Notification 组件,通过 props 接收消息内容、类型和显示时间等参数。组件内部使用 v-if…