= $face ?> = nl2br($content) ?>
project/ ├── index.php # 主頁:列表、分頁、發布表單 ├── reply.php # 管理員回復 ├── del.php # 刪除留言 ├── search.php # 關鍵字搜索 ├── gb.dat # 數據文件 (自動創建) └── common.php # 共用函數 (可選)
gb.dat 每行一條,| 分隔 10 字段:
$fields = ['ip', 'datetime', 'name', 'email', 'home', 'face', 'qq', 'avatar', 'content', 'reply'];
alert('留言成功'); location.href='index.php';";
} else {
die('文件打開失敗');
}
1) echo "首頁 上一頁"; if ($page < $totalPages) echo "下一頁 尾頁"; echo " 第 $page/$totalPages 頁,共 $total 條";
4. 刪除留言 (del.php)
5. 關鍵字搜索 (search.php)
安全加固 (必須!)
| 風險 | 對策 |
|---|---|
| XSS 跨站腳本 | 所有輸出經 htmlspecialchars() 轉義 |
| CSRF 跨站請求偽造 | 表單添加 token 隱藏域,驗證 Session |
| 文件併發損壞 | flock(LOCK_EX) 獨佔鎖寫入 |
| 目錄遍歷/文件包含 | 不直接使用用戶輸入作路徑 |
| 大文件性能 | 超 10 萬行遷移 SQLite/MySQL |
PHP 文本留言本 留言本
sqlite3 messages.db "CREATE TABLE messages (id INTEGER PRIMARY KEY, ip TEXT, datetime TEXT, name TEXT, email TEXT, home TEXT, face TEXT, qq TEXT, avatar TEXT, content TEXT, reply TEXT);"gb.dat 批量 INSERTfile/fopen 替換為 PDO 操作文本數據庫是理解「持久化、併發、索引、事務」核心概念的最佳教具。掌握其 CRUD 邏輯,遷移到任何數據庫都將得心應手。