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| では、コードをコピーします
コードは次のとおりです:
counter /* */ $ counterFile="counter.dat";
/* 記録するデータがテキストデータに既に存在するかどうかを識別するためのマークを定義します*/
$sign=False;
/* データを変数 $ に読み込みます配列の形式の sounterData Spare, */
$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 を使用してloop*/
break;
}
}
/* ここでは、implode()関数を使ってデータを整理してテキストファイルにまとめて書き込みます*/
/* このように、サーバーは最低点まで削減されます
$data=implode("",$counterData);
/* テキスト ファイルを開き、データを書き込みます */
$fp=fopen($counterFile,"w"); ,$data);
/* 記録するデータがテキスト内にない場合は、 $sign= Flase をマークし、テキストにデータを追加します*/
if (!$sign) {fputs($fp,"\n ".$GLOBALS["REQUEST_URI"]."|"."1"."|");
print("1");
/* データ ファイルを閉じる*/
fclose($fp);
?>
このプログラムの動作は誰もが知っていますが、すべてのファイルでこのように記述すると、次のようになります。面倒ですか?
パニックにならないでください! PHP が提供する強力な require() 関数も用意されています。これを関数として作成すると、より便利になります。それで、何を待っているのでしょうか? ここに必要な関数があります:
counter.inc
コードをコピーします
コードは次のとおりです:
function Counter()
{ $counterFile="/freespace/sucre/public_html/counter.dat";
$counterData=file($counterFile)
for($ i=0;$i<=count($counterData)-1;$i++)
{
$varArray=explode("|",$counterData[$i])
if ($varArray[0]==$); GLOBALS["REQUEST_URI"])
{
$varArray[1]++;
break($varArray[1])
$data=implode("",$counterData); $fp=fopen($counterFile,"w");
fputs($fp,$data);
if (!$ 記号)
{
fputs($fp,"\n".$GLOBALS["REQUEST_URI"] ."|"."1"."|");
print("1"); }
fclose($ fp)
?> では、「練習」を見てみましょう。まずは例を見てみましょう:
counterTest.php
require("counter.inc ");
/html>
カウントしたいHTMLファイルのファイルヘッダーにrequire()関数を追加し、ホームページ部分にcounter()関数を導入するだけです。必要に応じて counter();?> を追加します。
他にも注意すべき問題がいくつかあります:
1. データを記録するファイルには「書き込み」権限が必要です。ファイルがサブディレクトリに保存されている場合、「ディレクトリ」も「666」に設定されます。 「書き込み」権限が必要です。
2. デバッグプロセス中にこのような問題が発生しました。counter.inc と counter.dat をサブディレクトリに配置し、別のサブディレクトリで require () 関数を使用しました。 ?>
ただし、必ず「権限が足りません」というエラーが発生します 専門家がいらっしゃいましたら教えて下さい。アドバイス。
http://www.bkjia.com/PHPjc/316123.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/316123.html
技術記事
PHP 分析例: カウンタ 作成者: Sucre_tiger このカウンタはデータベースを使用せずにテキストカウントを使用し、次の機能を実現できます: テキストファイルを使用して複数ページのカウント削減サービスを実現します...
。