7 способов отправки уведомлений с PHP на ПК: подробное руководство

В эпоху цифровых технологий уведомления в режиме реального времени играют решающую роль в обеспечении вовлеченности и информированности пользователей. Если вы веб-разработчик, работающий с PHP, вам может быть интересно, как отправлять уведомления из серверного PHP-кода на компьютер пользователя. В этой статье мы рассмотрим семь различных методов достижения этой цели, приведя попутно примеры кода. Давайте погрузимся!

Метод 1: Push-уведомления браузера
Push-уведомления браузера — отличный способ доставлять уведомления непосредственно на рабочий стол пользователя, даже если он не просматривает ваш веб-сайт активно. Чтобы реализовать это, вы можете использовать Push API в JavaScript вместе с PHP на стороне сервера для запуска уведомлений. Вот пример:

// JavaScript code
Notification.requestPermission().then(permission => {
  if (permission === 'granted') {
    navigator.serviceWorker.register('service-worker.js').then(registration => {
      // Send a push notification request to the server
      fetch('send_notification.php', {
        method: 'POST',
        body: JSON.stringify({ title: 'New Notification', message: 'Hello, world!' })
      });
    });
  }
});
// PHP code (send_notification.php)
<?php
  // Handle the push notification request and send the notification to the user's PC
  $notificationData = json_decode(file_get_contents('php://input'), true);
  // Send the notification using the appropriate method (e.g., Firebase Cloud Messaging, OneSignal, etc.)
  // ...
?>

Метод 2: события, отправленные сервером (SSE)
События, отправленные сервером, позволяют серверу отправлять обновления клиенту в реальном времени через одно HTTP-соединение. С помощью PHP вы можете легко реализовать SSE, используя API EventSourceв JavaScript и функцию flush()в PHP для отправки данных клиенту. Вот пример:

// JavaScript code
const eventSource = new EventSource('sse.php');
eventSource.onmessage = event => {
  // Handle the received notification
  const notification = JSON.parse(event.data);
  // ...
};
// PHP code (sse.php)
<?php
  // Enable output buffering
  ob_start();
  // Set content type as SSE
  header('Content-Type: text/event-stream');
  header('Cache-Control: no-cache');
  header('Connection: keep-alive');

  while (true) {
    // Check for new notifications and send them to the client
    $notification = getNotification(); // Your implementation to fetch notifications
    echo "data: " . json_encode($notification) . "\n\n";
    ob_flush();
    flush();
    sleep(1); // Delay between notifications
  }
?>

Метод 3: WebSocket
WebSocket — это протокол связи, обеспечивающий полнодуплексную связь между клиентом и сервером. Он обеспечивает двунаправленную передачу данных в реальном времени, что делает его пригодным для отправки уведомлений. Чтобы использовать WebSocket с PHP, вы можете использовать такие библиотеки, как Ratchet или Swoole. Вот простой пример:

// JavaScript code
const socket = new WebSocket('ws://your-server.com:8080');
socket.onmessage = event => {
  // Handle the received notification
  const notification = JSON.parse(event.data);
  // ...
};
// PHP code (websocket_server.php using Ratchet library)
<?php
  require 'vendor/autoload.php';
  use Ratchet\MessageComponentInterface;
  use Ratchet\ConnectionInterface;
  class NotificationServer implements MessageComponentInterface {
    protected $clients;
    public function __construct() {
      $this->clients = new \SplObjectStorage;
    }
    public function onOpen(ConnectionInterface $conn) {
      $this->clients->attach($conn);
    }
    public function onMessage(ConnectionInterface $from, $msg) {
      // Handle the received message/notification
      // ...
    }
    public function onClose(ConnectionInterface $conn) {
      $this->clients->detach($conn);
    }
    public function onError(ConnectionInterface $conn, \Exception $e) {
      $conn->close();
    }
  }
  $server = IoServer::factory(
    new HttpServer(
      new WsServer(
        new NotificationServer()
      )
    ),
    8080
  );
  $server->run();
?>

Метод 4: уведомления по электронной почте с помощью IMAP
Если вы хотите отправлять уведомления на компьютер по электронной почте, вы можете использовать расширение PHP IMAP для получения электронных писем с почтового сервера и обработки их как уведомлений. Вот пример:

// PHP code
$server = '{imap.example.com:993/ssl}INBOX';
$username = 'your-email@example.com';
$password = 'your-password';
$inbox = imap_open($server, $username, $password);
// Search for new notifications
$emails = imap_search($inbox, 'UNSEEN');
if ($emails) {
  foreach ($emails as $emailNumber) {
    // Fetch the email data
    $emailData = imap_fetch_overview($inbox, $emailNumber, FT_UID);
    // Process the email as a notification
    $notification = [
      'subject' => $emailData[0]->subject,
      'message' => imap_body($inbox, $emailNumber)
    ];
    // Handle the notification
    // ...
  }
}
imap_close($inbox);

Метод 5: Опрос базы данных
Если вы храните уведомления в базе данных, вы можете реализовать механизм опроса в PHP, чтобы периодически проверять наличие новых уведомлений и доставлять их на компьютер пользователя. Вот пример использования MySQL:

// PHP code
// Connect to the database
$connection = mysqli_connect('localhost', 'username', 'password', 'database');
while (true) {
  // Query the database for new notifications
  $result = mysqli_query($connection, 'SELECT * FROM notifications WHERE status = "new"');
  while ($notification = mysqli_fetch_assoc($result)) {
    // Process the notification and send it to the user's PC
    // ...
    // Update the notification status to mark it as delivered
    mysqli_query($connection, 'UPDATE notifications SET status = "delivered" WHERE id = ' . $notification['id']);
  }
// Wait for a certain period before polling again
  sleep(5); // 5 seconds delay
}
// Close the database connection
mysqli_close($connection);

Метод 6: настольное приложение с PHP-GTK
Если вы хотите создать настольное приложение с использованием PHP, вы можете использовать PHP-GTK, расширение PHP, которое обеспечивает привязку к набору инструментов GTK+. С помощью PHP-GTK вы можете создать приложение с графическим интерфейсом, которое сможет отображать уведомления непосредственно на ПК пользователя. Вот простой пример:

// PHP code
$window = new GtkWindow();
$window->set_title('Notification');
$window->set_default_size(400, 200);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$label = new GtkLabel('New notification!');
$window->add($label);
$window->show_all();
Gtk::main();

Метод 7: сторонние службы уведомлений.
Наконец, вы можете использовать сторонние службы уведомлений, такие как Pusher, Firebase Cloud Messaging (FCM) или OneSignal. Эти службы предоставляют API и SDK, которые позволяют легко отправлять уведомления с PHP на компьютер пользователя. Вот пример использования OneSignal:

// PHP code
require 'vendor/autoload.php';
use OneSignal\OneSignal;
$oneSignal = new OneSignal('YOUR_APP_ID', 'YOUR_REST_API_KEY');
$result = $oneSignal->notifications->add([
  'contents' => [
    'en' => 'New notification!',
  ],
  'included_segments' => ['Subscribed Users'],
]);
// Handle the response
// ...

В этой статье мы рассмотрели семь различных способов отправки уведомлений с PHP на ПК. Каждый метод имеет свои преимущества и может подойти в зависимости от ваших конкретных требований. Независимо от того, выбираете ли вы push-уведомления браузера, события, отправляемые сервером, веб-сокеты, уведомления по электронной почте, опрос базы данных, настольные приложения или сторонние службы, теперь в вашем распоряжении множество вариантов, чтобы держать пользователей в курсе и вовлекать их. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует потребностям вашего приложения.