使用 PHP 的線上群聊應用


線上群聊應用是一種基於 Web 的工具,使使用者能夠即時進行文字、語音或影片聊天。由於其簡單易用,許多人都在使用這些應用程式。PHP 是一種流行的伺服器端程式語言,可以建立諸如群聊應用程式之類的 Web 應用程式。PHP 提供了全面的功能來處理使用者輸入、與資料庫互動以及整合基於 Web 的服務。

使用 PHP 建立線上群聊應用對於有抱負的 Web 開發人員或希望為其員工或客戶提供線上溝通平臺的公司來說,是一個極好的專案創意。該應用程式的設計可以包含各種功能,例如群聊、私信、檔案共享等。建立此類應用程式涉及許多工,包括設定伺服器、建立使用者介面、編寫 PHP 程式碼、新增安全功能、測試和部署。開發人員可以使用這些步驟來構建一個可靠且安全的線上群聊應用程式,以滿足使用者的需求。

建立群聊應用程式的步驟

步驟 1:安裝伺服器

設定基於 PHP 的線上群聊應用程式的第一步是安裝伺服器。出於測試目的,使用者可以在雲伺服器(如 Amazon Web Services、DigitalOcean)或本地伺服器(如 XAMPP 或 WAMP)上託管其應用程式。伺服器需要配置為執行 PHP 並且安裝了資料庫(如 MySQL)。

步驟 2:建立資料庫

配置伺服器後,下一步是建立資料庫。資料庫將儲存使用者資訊、聊天訊息和其他相關資訊。可以使用 phpMyAdmin 等工具建立資料庫及其表。應將使用者資訊(例如使用者名稱、電子郵件地址、密碼和其他相關資訊)儲存在資料庫中。

步驟 3:建立使用者介面

使用者介面是任何應用程式(包括線上群聊)的重要組成部分。使用者介面應該直觀且使用者友好,以便使用者能夠輕鬆瀏覽應用程式。使用者介面應包括登入/註冊頁面、聊天室頁面和其他相關頁面。

步驟 4:編寫 PHP 程式碼

建立使用者介面後,需要編寫 PHP 程式碼。PHP 程式碼應處理使用者註冊、登入/登出和聊天訊息。該程式碼還應在伺服器端執行使用者輸入驗證,以儲存和檢索使用者資訊和聊天訊息。PHP 程式碼應具有模組化和良好的組織性,以確保易於維護和擴充套件。

步驟 5:實施安全措施

安全是任何基於 Web 的應用程式的重要組成部分,線上群聊應用程式也不例外。PHP 程式碼應包含安全功能(如密碼雜湊、CSRF 保護和使用者身份驗證)以防止未經授權訪問應用程式。應用程式還應使用 SSL 加密來確保伺服器和客戶端之間安全通訊。

步驟 6:測試

建立應用程式後,對其進行測試以確保其按預期工作非常重要。此過程將測試使用者註冊、登入/登出、聊天訊息和其他相關功能。應在與生產環境非常相似的暫存環境中進行測試,以確保應用程式在部署到生產環境時能夠完美執行。

步驟 7:部署

最後一步是將應用程式部署到生產環境,使其可供使用者使用。應用程式應部署在可靠、安全且可擴充套件的伺服器上。還需要定期監控應用程式以確保其以最佳效率執行,並識別和解決任何出現的問題。應用程式需要定期更新以保持與最新技術和安全性的同步。

構建線上群聊應用程式

我們將按照上述步驟開始構建我們的線上聊天應用程式。為了簡化程式碼和演示目的,我們不會在這裡關注安全和部署部分。

步驟 1. 我們將使用 xampp 和 MySQL 以及 PHP 的 pdo。確保您已在系統中安裝了 XAMPP 和 MySQL。我們還在使用者介面中添加了 Bootstrap CDN 連結,以獲得更好的視覺效果。

步驟 2. 下一步是建立資料庫。您可以手動導航到 phpMyAdmin 面板並構建您的資料庫和表,或者編寫指令碼來自動建立資料庫和表。以下是要執行的指令碼以建立資料庫和表:

CREATE DATABASE onlinechatapp DEFAULT CHARACTER SET utf8;

GRANT ALL ON onlinechatapp.* TO 'admin'@'localhost' IDENTIFIED BY 'admin';

CREATE TABLE message (
   id  INTEGER NOT NULL AUTO_INCREMENT,
   content       VARCHAR(1000),
   user_id         VARCHAR(10),
   PRIMARY KEY(id)
) ENGINE=InnoDB CHARACTER SET=utf8;

我們使用的資料庫名為“onlinechatapp”,我們為資料庫設定了憑據“admin”和密碼“admin”。我們建立的表名為“message”,它具有一個“id”欄位,該欄位是自動遞增的主鍵,一個“content”欄位,用於儲存訊息的內容,最後是“user_id”以標識使用者。

步驟 3. 完成資料庫後,並在進行實際使用者介面之前,我們需要在資料庫和使用者介面之間建立連線。我們建立了一個名為“pdo.php”的檔案,其中包含連線,我們將在為使用者介面構建的每個頁面中包含此檔案或連線。

pdo.php:連線檔案

<?php
$pdo = new PDO('mysql:host=localhost;port=3306;dbname=onlinechatapp', 'admin', 'admin');
// See the "errors" folder for details...
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

步驟 4. 完成資料庫後,並在進行實際使用者介面之前,我們需要在資料庫和使用者介面之間建立連線。我們建立了一個名為“pdo.php”的檔案,其中包含連線,我們將在為使用者介面構建的每個頁面中包含此檔案或連線。

login.php:設定使用者 ID 檔案

<?php 
   include 'pdo.php';
   session_start();

   // If user submit the user id
   if(isset($_POST['user_id'])){
      $_SESSION['user_id'] = $_POST['user_id'];
         header('location: index.php');
      return;
   }
?>
<!doctype html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Login</title>
      <link rel="stylesheet" href="styles.css">
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
   </head>
   <body>
      <div class="container-fluid">
         <div class="row p-2 bg-color-green">
            <h2 class="col-12">Online Chat App</h2>
         </div>
         <div class="row p-2 bg-color-gray max-height-90">
            <div class="col-12 d-flex">
               <form class="" action="login.php" method="POST">
                  <h3>Enter your User Id:</h3>
                  <input type="text" name="user_id" class="form-control">
                  <button type="submit" class="btn btn-light form-control mt-2">Submit</button>
               </form>
            </div>
         </div>
      </div>
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
   </body>
</html>

我們建立了“index.php”檔案來設定實際的應用程式。在這裡,我們首先檢查當前使用者是否具有使用者 ID。如果他們沒有使用者 ID,我們將他們重定向到“login.php”頁面。然後我們檢索所有訊息並相應地顯示它們。如果當前使用者傳送了訊息,我們將其顯示為綠色;如果是其他使用者,則顯示為淺色。此外,提交表單後,我們在資料庫表中插入一條新訊息。

index.php:線上聊天應用程式檔案

<?php include 'pdo.php';
   session_start();
   if (!isset($_SESSION['user_id'])) {
      header('location: login.php');
      return;
   }

   if (isset($_POST['message'])) {
      $sql = "INSERT INTO message (content, user_id) VALUES (:content, :user_id)";
      $stmt = $pdo->prepare($sql);
      $stmt->execute(array(
         ':content' => $_POST['message'],
         ':user_id' => $_SESSION['user_id']
      );
      header('location: index.php');
      return;
   }
   $sql = "SELECT * FROM message ORDER BY id";
   $stmt = $pdo->query($sql);
?>
<!doctype html>
<html lang="en">
   <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Online Chat App</title>
      <link rel="stylesheet" href="styles.css">
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
   </head>
   <body>
      <div class="container-fluid">
         <div class="row p-2 bg-color-green">
            <h2 class="col-12">Online Chat App</h2>
         </div>
         <div class="row p-2 bg-color-gray">
            <?php
               while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
               if($row['user_id'] == $_SESSION['user_id']){
            ?>
            <div class="col-12">
               <div class="d-flex">
                  <div class="message my-message">
                     <b class="message-header">Me:</b>  
                     <div><?=$row['content']?></div>
                  </div>
               </div>
            </div>
            <?php
               }else{
            ?>
            <div class="col-12">
               <div class="d-flex">
                  <div class="message others-message">
                     <b class="message-header"><?=$row['user_id']?>:</b>  
                     <div><?=$row['content']?></div>
                  </div>
               </div>
            </div>
            <?php
               }
               }
            ?>
         </div>
         <form class="row p-2 bg-color-green send-message" action="index.php" method="POST">
            <div class="col-9 col-md-10">
               <input type="text" name="message" class="form-control" placeholder="Write your message" >
            </div>
            <div class="col-3 col-md-2">
               <button type="submit" class="btn btn-light form-control">Send</button>
            </div>
         </form>
      </div>
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
   </body>
</html>

為了設定元件樣式,我們使用樣式表和 Bootstrap。我們的樣式表名為“styles.css”。

styles.css:樣式表文件

.container-fluid {
   min-height: 90vh;
   max-height: 100vh;
}

.bg-color-green {
   background-color: rgb(76 175 80);
   color: rgb(255 255 255);
   text-align: center;
}
.bg-color-gray {
   background-color: rgb(231, 231, 231);
   min-height: 84vh;
   overflow-y: scroll;
}

.message {
   padding: 3px 10px;
   border: 1px solid gray;
   border-radius: 5px;
   text-align: left;
   max-width: 70%;
}

.message-header {
   font-size: small;
   text-align: left;
}

.my-message {
   margin-left: auto;
   background-color: rgb(175 255 176);
}
.others-message {
   background-color: rgb(250 235 215);
   margin-right: auto;
}
.send-message {
   min-height: 5vh;
}

.max-height-90 {
   max-height: 90vh;
   display: flex;
}

.d-flex {
   display: flex;
   flex-direction: column;
   align-content: center;
   justify-content: center;
}

因此,這就是我們開發線上群聊應用程式的方式。以下是應用程式在使用條件下顯示的輸出。

輸出

登入頁面

填寫使用者 ID

傳送訊息

使用另一個使用者登入

由 ABC 使用者傳送的訊息

Test 使用者應用程式上顯示的訊息

這是一個很棒的應用程式,可以用來開始學習 Web 應用程式並完成這樣的出色專案。

更新時間: 2023 年 7 月 14 日

4K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告