首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 百行代碼快速構建簡易聊天室實戰教程

     編輯:PHP 相關知識

項目概覽

本教程展示如何用約 100 行 PHP 代碼構建一個功能完整的簡易聊天室,包含用戶登錄、實時聊天、在線用戶統計、字體顏色自定義、URL 自動轉鏈接、公告跑馬燈等實用功能。採用文本文件作為存儲介質,適合學習 PHP 基礎、Session 處理、文件操作及前端交互。

核心功能模塊

1. 配置常量與初始化

<?php
error_reporting(E_ALL ^ E_NOTICE);
session_start();
header("Content-Type: text/html; charset=utf-8");

define("SCRIPT", $_SERVER['SCRIPT_NAME']);
define("CHAT_NOTE", "./chat.txt");      // 聊天記錄文件
define("ONLINE_LIST", "./online.txt");  // 在線用戶文件
define("REF_TIME", 5);                  // 刷新間隔(秒)
define("CHAT_NAME", "PHP 簡易聊天室");
define("AD_MSG", "歡迎來到聊天室!");    // 公告信息
?>

2. 動作路由控制器

通過 $_GET['action'] 分發不同邏輯:

  • login:處理用戶登錄,寫入 Session 與在線列表
  • chat:主聊天界面,嵌入顯示框與發送框
  • show:輪詢讀取聊天記錄並渲染
  • say:發送消息表單,含顏色選擇器
  • save:保存消息到文件,處理 URL 自動鏈接化
  • logout:清理 Session 與在線列表

3. 關鍵輔助函數

// 獲取客戶端真實 IP
function get_client_ip() {
    foreach (['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'] as $key) {
        if (!empty($_SERVER[$key])) return $_SERVER[$key];
    }
    return 'unknown';
}

// 保存在線用戶
function save_online($username, $ip) {
    $line = "$username|$ip|" . time() . "\n";
    file_put_contents(ONLINE_LIST, $line, FILE_APPEND | LOCK_EX);
}

// 獲取在線人數(清理超時用戶)
function get_online_sum() {
    $data = file(ONLINE_LIST, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $now = time();
    $valid = [];
    foreach ($data as $line) {
        [$user, $ip, $time] = explode('|', $line);
        if ($now - $time < REF_TIME * 3) $valid[] = $line;
    }
    file_put_contents(ONLINE_LIST, implode("\n", $valid) . "\n", LOCK_EX);
    return count($valid);
}

// URL 自動轉超鏈接
function auto_link($text) {
    return preg_replace(
        '/(https?:\/\/[^\s]+)/i',
        '$1',
        $text
    );
}

4. 前端界面結構

採用 <iframe> 分離顯示區與輸入區,配合 meta refresh 或 JS 定時器實現準實時刷新:

<!-- chat 界面主框架 -->
<div style="border:1px solid #999; width:800px; height:450px;">
    <iframe src="?action=show" name="show_win" width="100%" height="100%" frameborder="0"></iframe>
</div>
<marquee width="70%"></marquee>
<span>當前在線:</span>
<iframe src="?action=say" name="say_win" width="800" height="60" frameborder="0"></iframe>

部署與運行

  1. 確保 PHP 環境支持 Session、文件讀寫權限
  2. 創建 chat.txt、online.txt 並設置可寫(如 0666)
  3. 瀏覽器訪問腳本入口,輸入暱稱即可進入聊天

擴展建議

  • 引入 MySQL/SQLite 替代文本存儲,提升並發性能
  • 使用 WebSocket (Swoole/Workerman) 實現真正推送,降低延遲
  • 添加 XSS 過濾(htmlspecialchars)、CSRF 保護、敏感詞過濾
  • 支持表情包、圖片發送、私聊、房間分組等進階功能

註:本示例為教學演示,生產環境請務必加強安全防護,建議使用成熟框架(Laravel、ThinkPHP)配合 Redis + WebSocket 重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved