PHP サンプル分析: カウンタ
作者: Sucre_tiger
このカウンタは、データベースを使用せずにテキストカウントを使用し、次の機能を実現できます:
レコードが必要なときにサーバーの I/O 占有率を減らすために、テキストファイルを使用して複数のページをカウントします。ファイルに追加する必要があるのは数行のコードだけです。どこから来たのでしょうか...したがって、どのページが表示されているかを識別するには、リクエスト ファイルの環境変数 REQUEST_URI を使用して、この番号をユーザーのコンピュータに保存します。
まず、私のデータテキストに記録されているデータサンプルをご覧ください。(赤色はビュー数、前は対応する閲覧ファイルです)
Counter.dat/script/s2.php|3|/script/s1.php | 11| /script/counter.php|7|/testhtml/s3.php|6| では、コードをコピーします
コードは次のとおりです:
$sign=False;
/* データを変数 $ に読み込みます配列の形式の sounterData Spare、*/
$counterData=file($counterFile);
/* count() 関数を使用して、レコード数を計算します */
/* $counterData を区切るには、explode() 関数を使用します[$i] を記号 "|" で囲み、配列の形式で変数 $varArray に送り返します */
/* 関数 implode() は、explode() の逆で、配列 $ を接続しますvarArray に記号「|」を付けて $counterData に送り返す */
/* 環境変数 $PATH_INFO も使用
for($i=0;$i {
$varArray=explode("|",$counterData[$i]);
if ($varArray[0]==$GLOBALS["REQUEST_URI"])
{
$varArray[1] ++; ($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>
このプログラムの動作は誰でも知っていますが、すべてのファイルにこのように記述すると、非常に面倒ではありませんか?
パニックにならないでください! PHP が提供する強力な require() 関数もあります! counter.php を関数として記述します。それで、何を待っているのですか、ここに必要な関数があります:
counter.inc
コードをコピーします
コードは次のとおりです:
function Counter()
{
$counterFile ="/freespace/sucre /public_html/counter.dat";
$counterData=file($counterFile)
$sign=False
for($i=0;$i<=count($counterData); $i++) { $varArray=explode("|",$counterData[$i]); if ($varArray[0]==$GLOBALS["REQUEST_URI"]) {
$varArray[1]+ +; print($ varArray[1]);
$counterData[$i]=implode("|", $varArray);
$sign=True
}
$data=implode("" ,$counterData); $fp=fopen($counterFile,"w");
fputs($fp,$data)
{
fputs($fp,"\n".$GLOBALS) ["REQUEST_URI"] ."|"."1"."|");
print("1")
}
fclose($fp)
?>練習」、わかりました。どのように呼び出すかを見てみましょう。まず例を見てみましょう:
counterTest.php
require("counter.inc");
?>