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

PHP 文字版訪客簽到簿:無資料庫輕量實作

     編輯:PHP 綜合知識

簡介

本範例展示一個極簡的訪客簽到簿,僅需 sign.txt 文字檔與 sign.php 單一程式檔即可運作,無需 MySQL 資料庫,適合虛擬主機或快速原型。

功能特色

  • 簽到資訊包含:稱呼、網址、時間戳記。
  • 自動分頁,每頁顯示 6 筆。
  • 支援超連結自動偵測(以 http 開頭)。
  • 交替列顏色增強可讀性。
  • 不足 6 筆時自動補空白列保持版面。

核心程式碼解析

寫入簽到資料

<?php
if (isset($name) && isset($msg)) {
    $name = ltrim($name);
    $t = date("y年m月d日");
    $dat = "[$t]";
    $msg = ltrim($msg);
    $name = trim($name);
    $msg = trim($msg);
    $pristr = $name . "  " . $dat . " " . $msg . "\n";
    $f = fopen("sign.txt", "a");
    fwrite($f, $pristr);
    fclose($f);
}
?>

讀取與分頁顯示

<?php
$file = file("sign.txt");
if (!isset($pagenum)) $pagenum = 1;
$lesssign = 0;
$num = count($file);
$dispnumed = 6 * ($pagenum - 1);
$dispnumbeg = $num - $dispnumed;
$artnumeof1 = 6 * $pagenum;
$isdispnum = $num - $artnumeof1;
if ($isdispnum <= 0) {
    $dispnumeof = 1;
    $lesssign = 1;
} else {
    $dispnumeof = $isdispnum + 1;
}
// 計算總頁數
$sign = 0; $pagec = 0;
for ($icount=0; ($icount<$num) && ($sign==0); $icount+=6) {
    for ($i=0; $i<=6; $i++) {
        if (($icount*6+$i) == $num) $sign = 1;
    }
    $pagec++;
}
$pagecount = $pagec;

// 輸出表格
echo "<table width=100% cellspacing=3>";
echo "<tr><td bgcolor=00ff00 align=center>斑竹園簽到簿</td></tr>";
$fuhao = "◇  ";
$color = "e9eae9";
$iscolor = 0;
$lessnum = 5;
for ($i=$dispnumbeg; $i>=$dispnumeof; $i--) {
    $linknum = $num - $i;
    $lessnum--;
    $stringmsg1 = $file[($i-1)];
    $stringmsg2 = strrev($stringmsg1);
    $stringmsg3 = strstr($stringmsg2, "psbn"); // 反向找 "nbsp"
    $stringmsg = strrev($stringmsg3);
    $stringlink = strstr($file[($i-1)], "http");
    $dispvar = $fuhao . $stringmsg;
    echo "<tr><td bgcolor=$color>";
    echo $dispvar;
    echo "<img src=gif/home3.gif>";
    echo "<a href=$stringlink>$stringlink</a>";
    echo "</td></tr>";
    // 交替顏色
    if ($iscolor==0) { $color="ffffff"; $iscolor=1; }
    else { $color="e9eae9"; $iscolor=0; }
}
// 補空白列
if ($lesssign==1) {
    for ($iless=$lessnum; $iless>0; $iless--) {
        echo "<tr bgcolor=$color><td>".$fuhao."<br>\n</td></tr>";
        if ($iscolor==0) { $color="ffffff"; $iscolor=1; }
        else { $color="e9eae9"; $iscolor=0; }
    }
}
// 簽到表單
echo "<tr><form action=index.php method=post><td>";
echo "稱呼:<input name=name size=10 maxlength=20>";
echo "地址:<input name=msg size=20 maxlength=60 value=https://>";
echo "<input type=submit name=submit value=簽到>";
echo "</td></form></tr>";
echo "</table>";
?>

部署說明

  1. 建立空白 sign.txt,設定可寫入權限(666 或 777)。
  2. 將 sign.php 上傳至支援 PHP 的主機。
  3. 確保 gif/home3.gif 圖片存在,或移除該行。
  4. 表單 action=index.php 若檔名非 index.php 請修正。

安全性與改進建議

  • XSS 風險:直接輸出使用者輸入的 $msg 與 $name,應使用 htmlspecialchars() 轉義。
  • 資料完整性:文字檔並發寫入可能導致資料遺失,建議改用 flock() 檔案鎖定或改用 SQLite/MySQL。
  • 分頁邏輯:原碼分頁計算較複雜,可簡化為 ceil($num/6) 並用 array_slice 切片。
  • 超連結偵測:strstr($line, "http") 只能偵測第一個連結,建議用 preg_replace 全域替換。
  • 編碼:原碼使用 Big5/GB2312,現代建議統一 UTF-8。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved