ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHPチュートリアルでのアクセスカウンター生成の主な実装方法

PHP_PHPチュートリアルでのアクセスカウンター生成の主な実装方法

WBOY
リリース: 2016-07-15 13:31:20
オリジナル
962 人が閲覧しました

今使っています 友達の中には難しいと思っていて、あえて挑戦しない人もいるかもしれません。実際、PHPというツールを使えば、それは難しいことではなく、簡単であるとも言えます。 まず、訪問者カウンターのアイデアについて説明します。訪問者がこのページを閲覧すると、サーバー (Apache など) がそのページが閲覧された回数をドキュメントから読み取ります (num.txt は、以下の例)、1 を加えて num.txt に保存し、その回数に 1 を加えた値をブラウザに表示します。

別の訪問者がこのページを閲覧すると、サーバーは上記のプロセスを繰り返すことで、PHP によるアクセスカウンターの生成が実現されます。 PHP には直接のカウンタ関数はありませんが、その強力な機能を使用すると、自分で簡単にカウンタを作成できます。

次に、プログラムで使用する必要がある関数について説明します。

1. ファイルを開く操作: int fopen(string filename, string mode); ここで、string filename は、開かれるファイルの名前です。文字列形式。たとえば、「num.txt」です。文字列モードはファイルを開く方法であり、文字形式である必要があります。

「r」、読み取り専用形式、ファイル ポインターはファイルの先頭を指します。 「r+」、読み取りおよび書き込み可能、​​ファイル ポインターはファイルの先頭を指します。 'w'、書き込み専用形式。ファイル ポインタはファイルの先頭を指します。ファイルの長さは 0 に切り捨てられます。ファイルが存在しない場合は、ファイルの作成が試行されます。 「w+」、読み取りおよび書き込み可能。ファイル ポインターはファイルの先頭を指し、ファイルの長さは 0 に切り捨てられます。ファイルが存在しない場合は、ファイルの作成が試行されます。

'a'、追加フォーム (書き込み専用)、ファイル ポインターはファイルの末尾を指します。ファイルが存在しない場合は、ファイルの作成が試行されます。 「a+」、読み取りおよび書き込み可能。ファイル ポインターはファイルの末尾を指します。ファイルが存在しない場合は、ファイルの作成が試行されます。

2. ファイル読み取り操作: string fgets(int fp, int length); ここで、int fp はデータを読み取るファイル ストリーム ポインターであり、fopen 関数は値を返します。 int length は読み取られる文字数で、実際に読み取られる文字数は length-1 です。

3. ファイル書き込み操作: int fputs(int fp, string str, int [length]); ここで、int fp は情報が書き込まれるファイル ストリーム ポインターであり、その値は fopen 関数によって返されます。 string str は、ファイルに書き込まれる文字列です。 int length は書き込まれる長さです (オプション)。 length が選択されていない場合は、文字列全体が書き込まれます。それ以外の場合は、長さの文字を書き込みます。

4. ファイルを閉じる操作: int fclose(int fp); ここで、int fp は fopen 関数によって返されるファイル ストリーム ポインターです。 次に、PHP によって生成されたアクセス カウンターのプロトタイプを見てみましょう: (num.txt ファイルが存在すると仮定します)

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?php $</span><span class="attribute">fp</span><span> = </span><span class="attribute-value">fopen</span><span>("num.txt", "r");   </span></span></li><li><span>//只读方式打开num.txt文件   </span></li><li class="alt"><span>$</span><span class="attribute">num</span><span> = </span><span class="attribute-value">fgets</span><span>($fp,5);   </span></li><li><span>//读取4位数字   </span></li><li class="alt"><span>$num++;   </span></li><li><span>//浏览次数加一   </span></li><li class="alt"><span>fclose($fp);   </span></li><li><span>//关闭文件   </span></li><li class="alt"><span>$</span><span class="attribute">fp</span><span> = </span><span class="attribute-value">fopen</span><span>("num.txt", "w");   </span></li><li><span>//只写方式打开num.txt文件   </span></li><li class="alt"><span>fputs($fp, $str1);   </span></li><li><span>//写入加一后结果   </span></li><li class="alt"><span>fclose($fp);   </span></li><li><span>//关闭文件   </span></li><li class="alt"><span>echo "$num";   </span></li><li><span>//浏览器输出浏览次数  </span></li><li class="alt"><span class="tag">?></span><span> </span></span></li></ol>
ログイン後にコピー

これはカウンターのプロトタイプにすぎず、表示できるだけであることに注意してください。 PHP は非常に強力な画像処理能力を備えており、簡単かつ動的に WEB 画像を生成できます。

上記のプロトタイプを以下に修正して、本当に実用的なカウンターにします。 PHP でアクセスカウンターを生成する考え方は、プロトタイプのメソッドを使用してアクセス数を取得し、標準形式に変換し、画像処理を行って画像に出力して表示します。 カウント画像を生成したい場合は、次の関数が必要です:

1. 文字列長関数: int strlen(string str); ここで、string str は長さを計算する文字列です。

2. 文字列の追加: たとえば、$string1 と $string2 を追加します: $string = $string2

3. 新しい画像関数を作成します: int imagecreate(int x_size, int y_size); ここで、x_size、y_size は新しい画像の幅と高さ (ピクセル単位) です。

4. カラー関数: int imagecolorallocate(int im, int red, int green, int blue); ここで、int im は画像の識別番号です。 int red、green、blue はそれぞれ赤、緑、青の色の成分で、値の範囲は 0 ~ 255、つまり対応する色の RGB です。

5. 画像を色で塗りつぶす関数: int imagefill(int im, int x, int y, int col); ここで、int x、int y は、色の塗りつぶしが開始される画像の座標です。画像は (0, 0) です。 int col は色の識別番号です。

6. 画像内に横書きテキストを書き込む関数: int imagestring(int im, int font, int x, int y, string s, int col); ここで、int im は画像の識別番号です。 int font はフォントの識別番号です。 int x、int y はフォントの書き込みを開始する座標で、(0,0) は左上隅です。 string s は書き込まれる文字列です。 int col はフォントの色の識別番号です。

7. 画像内に直線を描く関数: int imageline(int im, int x1, int y1, int x2, int y2, int col); ここで、int im は画像の識別番号です。 int x1、int y1、int x2、int y2 は描画された線の開始座標と終了座標です。 int col は、線の色の識別番号です。

8. 画像を GIF 形式に出力する関数: int imagegif(int im, string filename); ここで、int im は画像の識別番号です。文字列 filename は生成されたイメージの名前です (オプション)。 filename が空の場合は、直接出力されます。

9. イメージを解放します: int imagedestroy(int im); ここで、int im は解放されるイメージの識別番号です。 この関数は、識別番号 im のイメージとそのイメージによって占有されているシステム リソースを解放します。 次のようにホームページでこのカウンターを呼び出して PHP を実装し、アクセスカウンターを生成できます: 以下は counter.php3 のプログラムリストです:

<ol class="dp-xml"><li class="alt"><span><span class="tag"><</span><span> ?   </span></span></li><li><span>Header("Content-type: image/gif");   </span></li><li class="alt"><span>//定义输出为图像类型   </span></li><li><span>$</span><span class="attribute">n</span><span>=</span><span class="attribute-value">10</span><span>;   </span></li><li class="alt"><span>//变量$n是显示位数   </span></li><li><span>$</span><span class="attribute">fp</span><span> = </span><span class="attribute-value">fopen</span><span>("num.txt", "r");   </span></li><li class="alt"><span>$</span><span class="attribute">str1</span><span> = </span><span class="attribute-value">fgets</span><span>($fp,$n+1);   </span></li><li><span>$str1++; fclose($fp);   </span></li><li class="alt"><span>$</span><span class="attribute">fp</span><span> = </span><span class="attribute-value">fopen</span><span>("num.txt", "w");   </span></li><li><span>fputs($fp, $str1);   </span></li><li class="alt"><span>fclose($fp);   </span></li><li><span>//同原型   </span></li><li class="alt"><span>$</span><span class="attribute">str2</span><span> = "";   </span></li><li><span>$</span><span class="attribute">len1</span><span> = </span><span class="attribute-value">strlen</span><span>($str1);   </span></li><li class="alt"><span>for ($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">1</span><span>;$i</span><span class="tag"><</span><span>=$n;$i++)   </span></li><li><span>{ $</span><span class="attribute">str2</span><span> = "0".$str2; };   </span></li><li class="alt"><span>//得到$n位0   </span></li><li><span>$</span><span class="attribute">len2</span><span> = </span><span class="attribute-value">strlen</span><span>($str2);   </span></li><li class="alt"><span>//计算访问人数的位数   </span></li><li><span>$</span><span class="attribute">dif</span><span> = $len2 - $len1;   </span></li><li class="alt"><span>$</span><span class="attribute">rest</span><span> = </span><span class="attribute-value">substr</span><span>($str2, 0, $dif);   </span></li><li><span>$</span><span class="attribute">string</span><span> = $rest.$str1;   </span></li><li class="alt"><span>//位数如果不够$n位,在前面补0   </span></li><li><span>for ($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">0</span><span>;$i</span><span class="tag"><</span><span>=$n-1;$i++)   </span></li><li class="alt"><span>{ $str[$i]=substr($string,$i,1); };   </span></li><li><span>//以数组存储每位  </span></li><li class="alt"><span> $</span><span class="attribute">font</span><span> = </span><span class="attribute-value">4</span><span>;  </span></li><li><span> //定义字号  </span></li><li class="alt"><span> $</span><span class="attribute">im</span><span> = </span><span class="attribute-value">imagecreate</span><span>($n*11-1,16);   </span></li><li><span>//新建图象  </span></li><li class="alt"><span> $</span><span class="attribute">black</span><span> = </span><span class="attribute-value">ImageColorAllocate</span><span>($im, 0,0,0);   </span></li><li><span>$</span><span class="attribute">white</span><span> = </span><span class="attribute-value">ImageColorAllocate</span><span>($im, 255,255,255);   </span></li><li class="alt"><span>//定义颜色   </span></li><li><span>imagefill($im, 0,0,$black);   </span></li><li class="alt"><span>//把计数器的底色设置成黑色   </span></li><li><span>ImageString($im,$font,1,0,$str[0],$white);  </span></li><li class="alt"><span> for ($</span><span class="attribute">i</span><span>=</span><span class="attribute-value">1</span><span>;$i</span><span class="tag"><</span><span>=$n-1;$i++)   </span></li><li><span>{ imageline($im, $i*11-1,0,$i*11-1,16, $white); ImageString($im,$font,$i*11+1,0,$str[$i],$white); };   </span></li><li class="alt"><span>//将每位写入图象,并以竖线分隔   </span></li><li><span>ImageGif($im);  </span></li><li class="alt"><span> //图象输出   </span></li><li><span>ImageDestroy($im);   </span></li><li class="alt"><span>//释放图象   </span></li><li><span class="tag">?></span><span>  </span></span></li></ol>
ログイン後にコピー

另外,为了方便,还可以用将计数器作为一个函数MyCounter(),这样只许需在主页开头加入require(“filename”);使MyCounter()成为此主页的一部分,需要的时候,将加在需要计数器的地方就可以完成PHP生成访问计数器。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446219.htmlTechArticle现在用 有的朋友可能认为它很难,不敢去尝试,其实有了PHP这个工具,它并不难,甚至可以说它很容易。 首先,让我来谈一谈访客计数器...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート