国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

用PHP來寫記數(shù)器(詳細(xì)介紹)

瀏覽:6日期:2024-01-04 13:09:07
PHP實(shí)例剖析:計(jì)數(shù)器 作者:Sucre_tiger 本款計(jì)數(shù)器用文本計(jì)數(shù),沒有用到數(shù)據(jù)庫,可以實(shí)現(xiàn)如下功能: 利用一個(gè)文本文件實(shí)現(xiàn)多個(gè)頁的計(jì)數(shù)減少服務(wù)器的I/O占用率在需要紀(jì)錄的文件里,只需加入很少的幾行代碼;;;;基本思路如下: 服務(wù)器程序從文本文件中讀取該頁被瀏覽的次數(shù),(因?yàn)樗形募蚍?wù)器提出請(qǐng)求時(shí),他們的環(huán)境變量REQUEST_URI都代表他來自于何處... ...,所以,以請(qǐng)求文件的環(huán)境變量REQUEST_URI來辨別到底是那一頁正被瀏覽。),將這個(gè)次數(shù)加一儲(chǔ)存,并在調(diào)用這頁的用戶的計(jì)算機(jī)上顯示出來。 請(qǐng)先看我的數(shù)據(jù)文本中紀(jì)錄的數(shù)據(jù)樣本,(紅色為瀏覽次數(shù),其前面為相應(yīng)的被瀏覽的文件) 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>計(jì)數(shù)器</title> <head>;;<body> <?php /* 定義儲(chǔ)存數(shù)據(jù)的文本文件 */ $counterFile="counter.dat"/* 定義一個(gè)標(biāo)記,用來辨別現(xiàn)在需紀(jì)錄的數(shù)據(jù)是否已經(jīng)文本數(shù)據(jù)中 */ $sign=False; /* 將數(shù)據(jù)以數(shù)組的方式讀入變量 $sounterData 備用, */ $counterData=file($counterFile);;;/* 用count()函數(shù)計(jì)算共有多少個(gè)紀(jì)錄 */ /* 用explode()函數(shù)把$counterData[$i]按符號(hào)"|"分開,并以數(shù)組的方式送回到變量$varArray里 */ /* 函數(shù)implode()與explode()剛剛相反,把數(shù)組$varArray以符號(hào)"|"連接起來送回到$counterData */ /* 還利用了環(huán)境變量$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; /* 找到本紀(jì)錄所在的位置后, 用break 退出循環(huán) */ ;;break;  };; } /* 在這里,利用implode()這個(gè)函數(shù)的功能,將數(shù)據(jù)整理好了,一起寫入文本文件中 */ /* 這樣,對(duì)服務(wù)器的I/O占用就降到了最低點(diǎn) $data=implode("",$counterData); /* 打開文本文件,將數(shù)據(jù)寫入 */ $fp=fopen($counterFile,"w"); fputs($fp,$data);;;/* 如果需要紀(jì)錄的數(shù)據(jù)不在文本里,標(biāo)志$sign= Flase, 那么就往文本里添加數(shù)據(jù) */;;if (!$sign) {fputs($fp,"n".$GLOBALS["REQUEST_URI"]."|"."1"."|"); print("1"); /* 關(guān)閉數(shù)據(jù)文件 */ fclose($fp); ?> </body> </html>;;我們已經(jīng)看到了這段程序的工作過程,也都知道了思路,但如果,每個(gè)文件里都這樣寫,豈不是太麻煩. 別慌! 我們還有PHP提供的強(qiáng)大的require()功能呢! 我們把counter.php寫成函數(shù),使用就方便許多了。那還等什么,下面就是你所要的函數(shù): 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); };;?>;;最好的檢驗(yàn)方法就是“實(shí)踐”,好了來看我們?cè)鯓诱{(diào)用它,先看一個(gè)例子: counterTest.php <?php require("counter.inc"); ?> <html>;;<head>;;<title> 網(wǎng)頁計(jì)數(shù)器 終結(jié)版 </title> </head> <body> 您是第<? counter();?>位閱讀者 </body> </html> 您只需在要計(jì)數(shù)的HTML文件的文件頭加入require()函數(shù),引入counter()函數(shù)為homepage的一部分。在需要的地方加入<? counter();?>就可以了。 還有幾點(diǎn)要注意的問題: 1、;;;;記錄數(shù)據(jù)的文件一定要有“寫”的權(quán)限,一般設(shè)成“666”即可,如果該文件存放在一個(gè)子目錄下,則對(duì)這個(gè)“目錄”也要有“寫”的權(quán)限; 2、;;;;我在調(diào)試過程中遇到這樣一個(gè)問題,我將counter.inc和counter.dat放在一個(gè)子目錄include下面,然后在不同的子目錄下面用require()函數(shù)進(jìn)行調(diào)用,格式如下:<?php;;;;;;;;require(“../include/counter.inc”) ;;;;?> 可是總是出現(xiàn)“權(quán)限不夠”的錯(cuò)誤,如有高手請(qǐng)指教。
標(biāo)簽: PHP
主站蜘蛛池模板: 大连市| 改则县| 漳浦县| 鹿邑县| 阿巴嘎旗| 长兴县| 灵丘县| 兴宁市| 青冈县| 宾阳县| 宝坻区| 蒙城县| 双鸭山市| 汶上县| 绥阳县| 延长县| 博野县| 盐山县| 兰溪市| 广德县| 兰溪市| 安溪县| 兰溪市| 会东县| 德阳市| 多伦县| 刚察县| 威海市| 富川| 林芝县| 右玉县| 嵩明县| 原平市| 德兴市| 昌都县| 犍为县| 昂仁县| 巴南区| 孝感市| 宁海县| 栾城县|