早期國內免費 MySQL 資源稀少,國外主機或太慢、或不開放給國內用戶。為了在無資料庫環境下仍能提供留言功能,設計了一個以純文字檔儲存資料的簡易留言本 gbook.php。
$message 變數是否存在:不存在則讀取檔案顯示留言;存在則處理新留言並寫入檔案。basename($PHP_SELF) . ".comment",即「目前腳本檔名 + .comment」,例如 gbook.php.comment。<?php
if (isset($_POST['message'])) {
$message = $_POST['message'];
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
$subject = htmlspecialchars($_POST['subject']);
// 換行轉 <p> 標籤
$message = preg_replace("/\r\n|\r|\n/", "<p>", $message);
$date = date("l, F j Y, h:i a");
$ip = $_SERVER['REMOTE_ADDR'];
$entry = "<table border='0' cellspacing='0' width='640' cellpadding='0'>
<tr>
<td width='25%'><b>$name</b></td>
<td width='25%'>$email</td>
<td width='25%'>寫於--$date</td>
<td width='25%'>來自>>$ip</td>
</tr>
<tr>
<td width='100%' colspan='4'>$subject</td>
</tr>
<tr>
<td width='100%' colspan='4'>$message</td>
</tr>
</table><hr>";
$filename = basename(__FILE__) . ".comment";
$fp = fopen($filename, "a");
fwrite($fp, $entry);
fclose($fp);
}
// 讀取並輸出所有留言
$filename = basename(__FILE__) . ".comment";
if (file_exists($filename)) {
readfile($filename);
}
?>
<form method="POST">
<p>姓名:<input type="text" name="name" size="20">
E-mail:<input type="text" name="email" size="24"><hr></p>
主題:<input type="text" name="subject" size="55"><p></p>
您想說的話:<br>
<textarea name="message" rows="10" cols="60" wrap="virtual"></textarea><br><br>
<input type="submit" name="submit" value="發表!">
<input type="reset" value="重寫?" name="B2">
</form>
flock() 或改用 SQLite。htmlspecialchars(),避免惡意腳本注入。同樣架構可擴充為:訪客留言板、簡易公告欄、靜態部落格評論系統。若需分頁、搜尋、後台管理,建議改用 SQLite 或資料庫。