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

純文字檔打造留言板(上):資料寫入與最新優先顯示技巧

     編輯:PHP 相關知識

為何選擇文字檔儲存?

虛擬主機常限制資料庫使用權限或額度,純文字檔方案零配置、零授權、備份即複製檔案,適合流量較小的個人站點或受限環境。本系列分上、下兩篇完整說明實作細節。

資料格式設計:欄位分隔符策略

採用單一字元 & 作為欄位分隔,每筆留言以換行符結束。寫入前必須處理使用者輸入中可能包含的分隔符,建議轉換為 HTML 實體或自定義跳脫序列(如 #AMP#),讀出時再還原。

<?php
// 表單送出後處理
$nickname = str_replace('&', '#AMP#', $_POST['nickname']);
$email    = str_replace('&', '#AMP#', $_POST['email']);
$content  = str_replace('&', '#AMP#', $_POST['content']);
$content  = str_replace("\n", '#BR#', $content); // 換行符同理處理

$record = "$nickname&$email&$content&" . date('Y-m-d H:i:s') . "\n";

// 附加寫入(最新留言在檔案末尾)
$fp = fopen('data/guestbook.txt', 'a');
fwrite($fp, $record);
fclose($fp);
?>

最新留言優先顯示:反向讀取陣列

file() 將整檔讀入陣列,每行為一元素,索引 0 為最舊留言。利用 for 迴圈從陣列尾端遞減至 0,即可由新至舊輸出。

<?php
$lines = file('data/guestbook.txt');
$total = count($lines);

for ($i = $total - 1; $i >= 0; $i--) {
    list($nick, $email, $content, $time) = explode('&', $lines[$i]);
    // 還原跳脫字元
    $nick   = str_replace('#AMP#', '&', $nick);
    $content = str_replace('#BR#', "<br>", $content);
    $content = str_replace('#AMP#', '&', $content);

    echo "<div class='msg'>";
    echo "<strong>" . htmlspecialchars($nick) . "</strong> ";
    echo "<span class='time'>$time</span><br>";
    echo nl2br(htmlspecialchars($content));
    echo "</div><hr>";
}
?>

安全性補強提醒

  • 輸出時務必使用 htmlspecialchars() 防止 XSS 攻擊。
  • 檔案權限設為 644,目錄 755,避免任意寫入風險。
  • 定期備份文字檔,或啟用版本控制(Git)追蹤變更。

下一篇將深入探討「編輯、刪除、管理回覆」等進階管理功能的文字檔實作細節。

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