| 檔案 | 類型 | 特性 |
|---|---|---|
| index.php | 基本版 | 每請求 +1,不防刷 |
| index1.php | 防刷版 (5秒) | 同 IP+User 5 秒內只算 1 次 |
| index2.php | 防刷版 (2秒) | 同 IP+User 2 秒內只算 1 次 |
| indexa.php | 綜合版 | 基本+防刷+圖形顯示 |
CREATE TABLE `counter_1` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user` VARCHAR(50) NOT NULL,
`ip` VARCHAR(15) NOT NULL,
`time` DATETIME NOT NULL
);
$sql = "SELECT COUNT(*) FROM `counter_1`
WHERE user='$user'
AND TIME_TO_SEC(NOW() - `time`) < 5
AND ip='$REMOTE_ADDR'";
若查詢結果 > 0 表示在冷卻期內,不重複計數。
$count = $row[0]; // 總計數
$pic = '';
for ($i = 0; $i < strlen($count); $i++) {
$digit = substr($count, $i, 1);
$pic .= "<img src=\"timex/$digit.gif\" width=\"15\" height=\"20\">";
}
echo $pic;
需準備 timex/0.gif ~ 9.gif 十張數字圖片。
<?php
//---[ 資料庫設定 ]---
$mysql_server = "localhost";
$mysql_user = "root";
$mysql_pass = "512783";
$mysql_db = "jishuqi";
//---[ 連線 ]---
$conn = mysql_connect($mysql_server, $mysql_user, $mysql_pass);
mysql_select_db($mysql_db, $conn);
//---[ 寫入訪問記錄 ]---
$sql = "INSERT INTO `counter_1` (`user`, `ip`, `time`) VALUES ('$user', '$ip', NOW())";
mysql_query($sql, $conn);
//---[ 查詢總計數 ]---
$sql = "SELECT COUNT(*) FROM `counter_1`";
$result = mysql_db_query($mysql_db, $sql, $conn);
$row1 = mysql_fetch_row($result);
mysql_free_result($result);
//---[ 查詢當前用戶計數 ]---
$sql = "SELECT COUNT(*) FROM `counter_1` WHERE user='$user'";
$result = mysql_db_query($mysql_db, $sql, $conn);
$row2 = mysql_fetch_row($result);
mysql_free_result($result);
mysql_close($conn);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>綜合計數器</title>
<style>
.counter {font-size:24px; color:#00FF99;}
.num {font-size:36px; color:#996633;}
</style>
</head>
<body>
<div align="center" class="counter">楓樹林下</div>
<div align="center">
<p class="counter"><span style="color:#CC0033">總共有</span>
<span class="num"><?=$row1[0]?></span>
<span style="color:#FF0000">人</span>
<span style="color:#0000FF">來過</span>
<span style="color:#FF00FF">這個網站</span></p>
<p class="counter"><span style="color:#CC0033">您</span>
<span class="num"><?=$row2[0]?></span>
<span style="color:#FF0000">次造訪</span></p>
</div>
</body>
</html>
PDO 或 mysqli(支援預處理語句,防 SQL 注入)INCR + 定期持久化GD 動態生成圖片或 CSS Sprite,而非大量 <img> 標籤$pdo = new PDO("mysql:host=localhost;dbname=jishuqi;charset=utf8", "root", "512783");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("INSERT INTO counter_1 (user, ip, time) VALUES (?, ?, NOW())");
$stmt->execute([$user, $_SERVER['REMOTE_ADDR']]);
$total = $pdo->query("SELECT COUNT(*) FROM counter_1")->fetchColumn();
$userCount = $pdo->prepare("SELECT COUNT(*) FROM counter_1 WHERE user=?");
$userCount->execute([$user]);
$userTotal = $userCount->fetchColumn();
採用現代寫法可大幅提升安全性與效能。