網頁實例:詳細介紹用PHP來編寫網頁記數器_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:動態網頁中直接不讓訪問PHP程序文件
      由于我們有需要用到某些php文件,而又不希望別人直接訪問這個文件,我們可以在其他包含文件比如global.php中定義一個參數,在被訪問頁面data.php前面判斷是否定義了該參數,沒有定義則禁止訪問。

      本款計數器用文本計數。沒有用到數據庫,可以實現如下功能:

      利用一個文本文件實現多個頁的計數減少服務器的I/O占用率在需要紀錄的文件里,只需加入很少的幾行代碼

      基本思路如下:

      服務器程序從文本文件中讀取該頁被瀏覽的次數,(因為所有文件向服務器提出請求時,他們的環境變量REQUEST_URI都代表他來自于何處... ...,所以,以請求文件的環境變量REQUEST_URI來辨別到底是那一頁正被瀏覽。),將這個次數加一儲存,并在調用這頁的用戶的計算機上顯示出來。

      請先看我的數據文本中紀錄的數據樣本,(紅色為瀏覽次數,其前面為相應的被瀏覽的文件)

      counter.php

      以下為引用的內容:

      <html>
      <head>
      <title>計數器</title>
      <head>
      <body>
      <?php
      /* 定義儲存數據的文本文件 */
      $counterFile="counter.dat\";
      /* 定義一個標記,用來辨別現在需紀錄的數據是否已經文本數據中 */
      $sign=False;
      /* 將數據以數組的方式讀入變量 $sounterData 備用, */
      $counterData=file($counterFile);
      /* 用count()函數計算共有多少個紀錄 */
      /* 用explode()函數把$counterData[$i]按符號\"|\"分開,并以數組的方式送回到變量$varArray里 */
      /* 函數implode()與explode()剛剛相反,把數組$varArray以符號\"|\"連接起來送回到$counterData */
      /* 還利用了環境變量$PATH_INFO
      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 退出循環 */ 
          break;
         }
       }
      /* 在這里,利用implode()這個函數的功能,將數據整理好了,一起寫入文本文件中 */
      /* 這樣,對服務器的I/O占用就降到了最低點
      $data=implode(\"\",$counterData);
      /* 打開文本文件,將數據寫入 */
      $fp=fopen($counterFile,\"w\");
      fputs($fp,$data);
      /* 如果需要紀錄的數據不在文本里,標志$sign= Flase, 那么就往文本里添加數據 */
      if (!$sign) {fputs($fp,\"\\n\".$GLOBALS[\"REQUEST_URI\"].\"|\".\"1\".\"|\");
      print(\"1\");
      /* 關閉數據文件 */
      fclose($fp);
      ?>
      </body>
      </html>

      我們已經看到了這段程序的工作過程,也都知道了思路,但如果,每個文件里都這樣寫,豈不是太麻煩。
      別慌!我們還有PHP提供的強大的require()功能呢! 我們把counter.php寫成函數,使用就方便許多了。那還等什么,下面就是你所要的函數:

      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()函數為homepage的一部分。在需要的地方加入<? counter();?>就可以了。

      還有幾點要注意的問題:

      1、記錄數據的文件一定要有“寫”的權限,一般設成“666”即可,如果該文件存放在一個子目錄下,則對這個“目錄”也要有“寫”的權限;

      2、我在調試過程中遇到這樣一個問題,我將counter.inc和counter.dat放在一個子目錄include下面,然后在不同的子目錄下面用require()函數進行調用,格式如下:

      以下為引用的內容:

      <?php
      require(“../include/counter.inc”)
      ?>

      可是總是出現“權限不夠”的錯誤,如有高手請指教。

      分享:小結:PHP動態網頁程序兩個有用的小技巧
      主要是在開發或學習中的一些經驗技巧進行總結,主要就是把解決某種事情更好的方法告訴大家。 1、假如你使用echo輸出一個簡單的語句,類似與: 以下為

      來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
      相關PHP教程