在動態網頁技術剛興起的年代,PHP 憑藉其易學、跨平台、免費開源的特性,迅速成為個人站長與中小型項目的首選。本系列將以實戰角度出發,手把手帶你完成一個功能完整的 PHP 個人網站——從本地調試環境搭建、核心模組開發,到後台管理與部署上線。無論你是初學者還是想重溫經典架構的開發者,都能從中汲取實用經驗。
雖然現在 Docker、Laravel Valet、PHPStudy 等一鍵安裝包已大行其道,但回顧當年在 Windows 98 上搭建環境的過程,依然有助於理解 Web 伺服器、PHP 解析器、資料庫三者的協作關係。
OmniHTTPd Professional 2.06,內建 PHP 4 Beta 3,安裝即用;現代環境建議使用 Nginx 或 Apache。EditPlus(輕量、語法高亮、支援 FTP 直傳);偏好視覺化操作則可用 Dreamweaver(現已停更,可改用 VS Code + Live Server)。小貼士:開發階段請務必開啟 display_errors = On 並設定 error_reporting = E_ALL,讓錯誤在瀏覽器直接顯示,大幅縮短除錯時間。
<?php
$countfile = "count.txt";
if (file_exists($countfile)) {
$fp = fopen($countfile, "r+");
$count = (int)fgets($fp, 10);
$count++;
rewind($fp);
fputs($fp, $count);
fclose($fp);
} else {
$fp = fopen($countfile, "w");
fputs($fp, "1");
fclose($fp);
}
echo $count;
?>
這段程式碼邏輯單純:讀檔 → +1 → 寫回。但缺點明顯——每次重新整理都會計數,無法區分同一訪客的重複請求,統計數據嚴重失真。
PHP 4 引入 $_SESSION 超全域變數,可在伺服器端保存訪客狀態。核心邏輯:
$_SESSION['counted'] 是否存在且為真;$_SESSION['counted'] = true;session_start();
if (!isset($_SESSION['counted'])) {
// 執行計數邏輯(同上檔案讀寫或資料庫 UPDATE)
$_SESSION['counted'] = true;
}
此法解決了「同一瀏覽器、同一會話」的重複計數問題,但無法跨裝置、跨瀏覽器識別同一用戶。
若環境不支援 Session,可採用 Cookie 記錄「上次訪問時間戳」,設定 15 分鐘冷卻期:
$cookiename = 'last_visit';
$cooldown = 15 * 60; // 15 分鐘
$last = isset($_COOKIE[$cookiename]) ? (int)$_COOKIE[$cookiename] : 0;
$now = time();
if ($now - $last > $cooldown) {
// 執行計數遞增
setcookie($cookiename, $now, $now + 86400 * 30, '/'); // 30 天有效
}
這種「時間窗去重」策略至今仍被輕量級統計系統採用,簡單卻有效。
準備 0.jpg ~ 9.jpg 十張數字圖片,輸出邏輯如下:
$count_str = str_pad((string)$count, 5, '0', STR_PAD_LEFT); // 補齊 5 位
foreach (str_split($count_str) as $digit) {
echo "<img src='{$digit}.jpg' alt='{$digit}'>";
}
現代開發建議改用 CSS Sprite 或 Web Font(如 Font Awesome 數字圖示),減少 HTTP 請求並支援 Retina 螢幕。
完成本章,你已具備:
下一章將深入「首頁新聞動態發布系統」,實現遠端管理、自動摘要、模組化複用——敬請期待!