Board logo

標題: [教學] (PHP+IIS+MsSQL教學第22篇) 資料儲存與檔案管理 下篇(實作範例) [打印本頁]

作者: 小誌    時間: 2010-5-16 14:32     標題: (PHP+IIS+MsSQL教學第22篇) 資料儲存與檔案管理 下篇(實作範例)

網頁計數器
Session物件的生命週期起始於PWS/IIS 開始運作且有人開始連線時。終止於 PWS/IIS 關閉,或客戶端瀏覽器未於特定時間內再向伺服器要求資訊,所以Session物件物件並不是永遠存在的!況且,對於所有的連線瀏覽者而言,都個別擁有一個『私用』的 Session 物件,所以,Session物件並不適合用於建立計數器。


Cookie物件將資訊建立於客戶端瀏覽器的,更不適合於計數器;反觀檔案式的計數器乃利用檔案的存取來記錄計數資料,也就是說:我們的計數器計次資料將會被儲存在一個特定的資料檔案中,計數資料的保存並不會因時間的改變而消失,或是因為伺服器進行維護而使計數器計次資料被歸零。


為了使我們辛苦累積的瀏覽人次計數器資料不至於人間蒸發,所以我們必須利用檔案資料處理函數的優勢與特點,統合運用來設計我們的計數器,下例即為統合檔案資料處理函數來製作計數器的程式網頁內容:
txtcount.php
  1. <?
  2. $countfile="count.txt";
  3. global $num;
  4. if (file_exists($countfile))
  5.    {
  6.     $file=fopen($countfile,"r");
  7.     $num=fgets($file,filesize($countfile)+1);
  8.     $num++;
  9.     fclose($file);
  10.    }
  11. else
  12.    {
  13.     $num="1";
  14.    }
  15. $file=fopen($countfile,"w");
  16. fwrite($file,$num);
  17. fclose($file);
  18. ?>

  19. <html>
  20. <head>
  21. <meta http-equiv="Content-Language" content="zh-tw">
  22. <meta http-equiv="Content-Type" content="text/html; charset=big5">
  23. <title>簡單實用的文字計數器</title>
  24. </head>
  25. <body>
  26. <p align="center"><font size="5">簡單實用的文字計數器</font></p>
  27. <hr>
  28. <p align="center"><b><font color="#FF0000">
  29. 參觀人次:<?=$num?></font></b></p>
  30. </body>
  31. </html>
複製代碼

[attach]476[/attach]


補充:
filesize()函數:取得檔案的大小。
filesize()函數格式
  1. int filesize ( string filename)
複製代碼
若有錯誤發生回傳False,否則回傳檔案大小(bytes)。


is_readable()函數:判斷檔案能否讀取。
is_readable()函數格式
  1. bool is_readable ( string filename)
複製代碼
若檔案可讀取資料(非唯寫),則回傳Trrue,否則False。

is_readable()函數:判斷檔案能否讀取。
is_writeable()函數格式
  1. bool is_writeable ( string filename)
複製代碼
若檔案可寫入資料(非唯讀),則回傳Trrue,否則False。
作者: 小誌    時間: 2010-5-16 14:40

圖形計數器
文字型計數器看起來好像單調了一點,我們何不將它改成圖片式的圖形計數器,日後如果想換換口味的話,直接將圖檔換掉就行了!
[attach]478[/attach]

在撰寫程式之前,請先準備好代表0~9的數字圖片,檔名跟圖片的內容數字必須相符:
[attach]479[/attach]                  
為了將計數檔案內的資料取出來並轉換為圖片,我們必須將數字的每一個「字」拆解出來,並以圖片檔名替代:
  1. <?
  2. function picout($num)
  3. {
  4. $strlen=strlen($num);
  5. for ($x=0;$x<$strlen;$x++)
  6. {
  7. $picnum=substr($num,$x,1);
  8. echo "<img src=$picnum.gif>";
  9. }
  10. }
  11. ?>
複製代碼

為了不變動原始的文字計數器功能,所以小誌把文字轉換成圖片HTML標籤敘述的程式區塊用函數包起來,所以我們只要將本來輸出文字資料的地方改成呼叫副程式即可。
piccount.php
  1. <?
  2. $countfile="piccount.txt";
  3. global $num;
  4. if (file_exists($countfile))
  5.    {
  6.     $file=fopen($countfile,"r");
  7.     $num=fgets($file,filesize($countfile)+1);
  8.     $num++;
  9.     fclose($file);
  10.    }
  11. else
  12.    {
  13.     $num="1";
  14.    }
  15. $file=fopen($countfile,"w");
  16. fwrite($file,$num);
  17. fclose($file);
  18. ?>

  19. <html>
  20. <head>
  21. <meta http-equiv="Content-Language" content="zh-tw">
  22. <meta http-equiv="Content-Type" content="text/html; charset=big5">
  23. <title>實用的圖片計數器</title>
  24. </head>
  25. <body>
  26. <p align="center"><font size="5">實用的圖片字計數器</font></p>
  27. <hr>
  28. <p align="center"><b><font color="#FF0000">
  29. 參觀人次:<?=picout($num)?></font></b></p>
  30. </body>
  31. </html>

  32. <?
  33. function picout($num)
  34. {
  35. $strlen=strlen($num);
  36. for ($x=0;$x<$strlen;$x++)
  37.   {
  38.    $picnum=substr($num,$x,1);
  39.     echo "<img src=$picnum.gif>";
  40.   }
  41. }
  42. ?>
複製代碼
另解:Piccount_2.php
  1. <?
  2. $countfile="piccount.txt";
  3. if (file_exists($countfile))
  4.    {
  5.     $file=fopen($countfile,"r");
  6.     $num=fread($file,filesize($countfile));
  7.     $num++;
  8.     fclose($file);
  9.     $file=fopen($countfile,"w");
  10.     fwrite($file,$num);
  11.     fclose($file);
  12.    }
  13. else
  14.    {
  15.     $num=1;
  16.     $file=fopen($countfile,"w");
  17.     fwrite($file,$num);
  18.     fclose($file);
  19.    }
  20. ?>

  21. <html>
  22. <head>
  23. <meta http-equiv="Content-Language" content="zh-tw">
  24. <meta http-equiv="Content-Type" content="text/html; charset=big5">
  25. <title>實用的圖片計數器</title>
  26. </head>
  27. <body>
  28. <p align="center"><font size="5">實用的圖片字計數器</font></p>
  29. <hr>
  30. <p align="center"><b><font color="#FF0000">
  31. 參觀人次:<?=picout()?></font></b></p>
  32. </body>
  33. </html>

  34. <?
  35. function picout()
  36. {
  37. global $countfile;
  38. $file=fopen($countfile,"r");
  39. while (false != ($char = fgetc($file)))
  40.   {
  41.      echo "<img src=" . $char . ".gif>";
  42.   }
  43. fclose($file);
  44. }
  45. ?>
複製代碼
圖形計數器完整原始碼下載:
[attach]480[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)