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

PHP + TXT 文本文件留言本極簡實現

     編輯:PHP 綜合知識

適用場景

免費空間不支援 MySQL,或極簡項目無需資料庫開銷時,文本文件存儲是零配置、零依賴的備選方案。

兩文件架構

  • note.php:顯示表單 + 讀取留言
  • result.php:接收提交 + 寫入文件
  • note.txt:留言數據文件(需可寫權限)

核心代碼

note.php(表單與顯示)

<?php
// 讀取留言
$f = fopen('note.txt', 'r');
$msg = fread($f, filesize('note.txt'));
fclose($f);
?>
<html>
<head><title>小小留言本</title></head>
<body bgcolor="#cccccc">
<center><font size="4">小小留言本</font></center>
<form method="POST" action="result.php">
<table border="0" width="80%" align="center">
<tr><td width="20%">您的大名:</td>
    <td><input type="text" name="nickname" style="width:100%"></td></tr>
<tr><td>電子郵件:</td>
    <td><input type="text" name="email" style="width:100%"></td></tr>
<tr><td>留言:</td>
    <td><textarea name="note" style="width:100%"></textarea></td></tr>
<tr><td></td><td align="center">
    <input type="submit" value="確定"> <input type="reset" value="重寫">
</td></tr>
</table>
<hr>
<?php echo $msg; ?>
<p align="right"><small>作者:<a href="mailto:greenchn@163.net">東方一蛇</a><br>
主頁:<a href="https://bianceng.cn">編程入門</a></small></p>
</body>
</html>

result.php(寫入處理)

<?php
$nickname = trim($_POST['nickname']);
$email    = trim($_POST['email']);
$note     = trim($_POST['note']);

if ($nickname && $note) {
    $entry = "<b>$nickname</b> ($email) <br>$note<br><hr>\n";
    $f = fopen('note.txt', 'a'); // 追加模式
    fwrite($f, $entry);
    fclose($f);
}
header('Location: note.php');
exit();
?>

關鍵技術點

  1. 文件鎖定:併發寫入需 flock($f, LOCK_EX) 獨佔鎖,寫入後 flock($f, LOCK_UN) 釋放,防止數據損壞
  2. 輸入過濾:htmlspecialchars() 轉義 HTML 標籤,防 XSS
  3. 換行統一:存儲時統一 \n,顯示時 nl2br() 轉 <br>
  4. 大小控制:定期歸檔或限制總行數,避免文件過大導致讀取緩慢
  5. 編碼一致:文件存儲與頁面輸出同為 UTF-8,避免亂碼

改進版寫入邏輯(含鎖與過濾)

<?php
$nickname = htmlspecialchars(trim($_POST['nickname']));
$email    = htmlspecialchars(trim($_POST['email']));
$note     = htmlspecialchars(trim($_POST['note']));

if ($nickname && $note) {
    $entry = "<b>$nickname</b> ($email) <br>$note<br><hr>\n";
    $f = fopen('note.txt', 'a');
    if (flock($f, LOCK_EX)) {
        fwrite($f, $entry);
        flock($f, LOCK_UN);
    }
    fclose($f);
}
header('Location: note.php');
?>

局限性與遷移建議

  • 無索引、無查詢、無事務、併發性能差
  • 數據量超過 1 萬條建議遷移 SQLite(文件型資料庫,零配置)或 MySQL
  • 遷移策略:編寫一次性腳本解析 note.txt 導入資料表,保留原 ID、時間戳
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved