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

PHP 文字檔計數器完整實作:多頁面支援與效能優化

     編輯:PHP 綜合知識

專案概述

本計數器採用文字檔儲存,無需資料庫,可實現以下功能:

  • 單一文字檔支援多頁面計數
  • 降低伺服器 I/O 佔用
  • 在需記錄的頁面只需加入極少程式碼

核心設計思路

伺服器程式從文字檔讀取該頁瀏覽次數(利用環境變數 REQUEST_URI 辨識頁面),將次數加一儲存,並顯示在使用者端。資料檔範例:

Counter.dat
/script/s2.php|3|/script/s1.php|11|/script/counter.php|5|/testhtml/s2.php|7|/testhtml/s3.php|6|

紅色數字為瀏覽次數,前面為對應的被瀏覽檔案路徑。

基礎版實作:counter.php

<?php
/* 定義儲存資料的文字檔 */
$counterFile = "counter.dat";

/* 定義標記,辨別目前需記錄的資料是否已存在 */
$sign = false;

/* 以陣列方式讀入資料備用 */
$counterData = file($counterFile);

/* 遍歷每一筆記錄 */
for ($i = 0; $i <= count($counterData) - 1; $i++) {
    /* 以 "|" 分割每行資料 */
    $varArray = explode("|", $counterData[$i]);
    
    /* 比對 REQUEST_URI */
    if ($varArray[0] == $GLOBALS["REQUEST_URI"]) {
        $varArray[1]++;           // 次數加一
        print($varArray[1]);      // 輸出次數
        $counterData[$i] = implode("|", $varArray); // 重組資料
        $sign = true;             // 找到記錄
        break;                    // 跳出迴圈
    }
}

/* 將整理後的資料一次寫入檔案,將 I/O 降至最低 */
$data = implode("", $counterData);
$fp = fopen($counterFile, "w");
fputs($fp, $data);

/* 若資料不存在於檔案中(新頁面),則新增記錄 */
if (!$sign) {
    fputs($fp, "\n" . $GLOBALS["REQUEST_URI"] . "|" . "1" . "|");
    print("1");
}
fclose($fp);
?>

進階版:函數化與模組化 (counter.inc)

為了方便重複使用,將計數器封裝成函數:

<?php
function Counter() {
    $counterFile = "/freespace/sucre/public_html/counter.dat";
    $counterData = file($counterFile);
    $sign = false;
    
    for ($i = 0; $i <= count($counterData) - 1; $i++) {
        $varArray = explode("|", $counterData[$i]);
        if ($varArray[0] == $GLOBALS["REQUEST_URI"]) {
            $varArray[1]++;
            print($varArray[1]);
            $counterData[$i] = implode("|", $varArray);
            $sign = true;
            break;
        }
    }
    
    $data = implode("", $counterData);
    $fp = fopen($counterFile, "w");
    fputs($fp, $data);
    
    if (!$sign) {
        fputs($fp, "\n" . $GLOBALS["REQUEST_URI"] . "|" . "1" . "|");
        print("1");
    }
    fclose($fp);
}
?>

使用方式:counterTest.php

<?php
require("counter.inc");
?>
<html>
<head>
<title> 網頁計數器 終結版 </title>
</head>
<body>
您是第<? Counter(); ?>位閱讀者
</body>
</html>

只需在欲計數的 HTML 檔案開頭加入 require(),在需要顯示處呼叫 <? Counter(); ?> 即可。

關鍵注意事項

  1. 檔案權限: 記錄資料的檔案必須有「寫入」權限,通常設為 666;若檔案在子目錄,該目錄也需有寫入權限。
  2. 跨目錄調用權限問題: 若將 counter.inc 和 counter.dat 放在子目錄 include,其他目錄用 require("../include/counter.inc") 調用時可能出現「權限不足」錯誤。解決方案:確保 Web 伺服器進程對整個路徑有讀寫權限,或使用絕對路徑。

效能優化建議

  • 使用 flock() 檔案鎖定防止並發寫入衝突
  • 考慮改用 SQLite 或資料庫應對高流量
  • 定期清理舊記錄避免檔案過大

總結

這個文字檔計數器方案無需資料庫,部署簡單,透過函數封裝實現模組化複用,適合中小型網站快速部署頁面計數功能。核心在於利用 REQUEST_URI 做為唯一鍵值,配合一次性讀寫最小化 I/O 開銷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved