天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

用PHP來寫記數器(詳細介紹)

php實例剖析:計數器
作者:Sucre_tiger
本款計數器用文本計數,沒有用到數據庫,可以實現如下功能:
利用一個文本文件實現多個頁的計數減少服務器的I/O占用率在需要紀錄的文件里,只需加入很少的幾行代碼                                    
基本思路如下:
服務器程序從文本文件中讀取該頁被瀏覽的次數,(因為所有文件向服務器提出請求時,他們的環境變量REQUEST_URI都代表他來自于何處... ...,所以,以請求文件的環境變量REQUEST_URI來辨別到底是那一頁正被瀏覽。),將這個次數加一儲存,并在調用這頁的用戶的計算機上顯示出來。
請先看我的數據文本中紀錄的數據樣本,(紅色為瀏覽次數,其前面為相應的被瀏覽的文件)
Counter.dat/script/s2.php|3|/script/s1.php|11| /script/counter.php|5| /testhtml/s2.php|7|/testhtml/s3.php|6|
Now,Let's go!
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,/"http://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,/"http://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技術用PHP來寫記數器(詳細介紹),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜毛片在线观看 | 妖精视频一区二区免费 | 欧美高清vivoesosexo10 | 在线亚洲精品福利网址导航 | 成人中文字幕在线观看 | 老太婆性BBWBBW | 精品99久久久久成人网站 | 成人在线视频免费 | 免费人成在线观看网站视频 | 高干紧射H后入 | 三级黄色视屏 | 全球真实小U女视频合集 | 521人成a天堂v| 国产特级毛片AAAAAAA高清 | 奶头从情趣内衣下露了出来AV | 俄罗斯黄色大片 | 久久免费精品国产72精品剧情 | 人妻免费久久久久久久了 | 日韩精品熟女一区二区三区中文 | 99久久精品国产一区二区三区 | 久久99久久成人免费播放 | 性色香蕉AV久久久天天网 | 日本邪恶少女漫画大全 | 阿v天堂2017在无码 | 浪荡受自我调教纯肉BL | 成年视频国产免费观看 | 国产69精品久久久久APP下载 | 寂寞夜晚免费观看视频 | 久久精品免费看网站 | 色呦呦人人视频 | 亚洲高清在线天堂精品 | 国产色婷婷亚洲99麻豆 | 美女视频黄色的 | 最新在线黄色网址 | 久草青青在线 | 美女不要啊 | 亚洲高清视频在线 | 国产成人啪精视频精东传媒网站 | 亚洲精品久久久无码 | OLDMAN老头456 TUBE| 精品一卡2卡三卡4卡乱码精品视频 |