アクセスカウンターはSQLiteとPHP言語で出来ています.

20251219

文字数[2698文字] この記事は3分22秒で読めます.

Logging

おはようございます、このサイトのアクセスカウンターはSQLiteとPHP言語で出来ています.ボット訪問者はカウントしないなどは別のプログラムで制御しています.そういう訳もあって結構シンプルなコードで出来上がっていると思います.この頃は海外からの訪問者も増えてきています.とくに中国とシンガポール経由の訪問者です.恐らくボットだという事は分かっているのですが、ボットと判定しづらい方法でアクセスしているので、アナリティクス(アクセス解析)にもカウントされます.

それが少々困っています.毎分でアクセスしてくるので非常にサーバーに負荷がかかっているのは分かっているのですが、どうしようもない.国ごとアクセスを遮断するプログラムをそのうち入れようと思っています.

一番簡単な遮断方法はMaxMindのPHPライブラリを使えば良いらしい.これを使用するとIPから何処の国からアクセスしてきたか判別可能になります.だけど使用するにはライブラリの他にデータベース(IP)をダウンロード必要があり、ダウンロードするにはMaxMindでアカウントを登録しないデータベースがダウンロード出来ないようになっているので自分はそこで止まっています.規約がなぁ….。

<?php

require 'vendor/autoload.php';//絶対パスが宜しいかと

use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Database\Capsule\Manager as DB;
use Illuminate\Database\Schema\Blueprint;

class counter
{
    public $targetId = 1;
    public $cnt = 0;
    public $dbPath = 'counter/cnt.db';//絶対パスが宜しいかと

    public function __construct($dbPath = null,$targetId=null)
    {
        $dbPath = $dbPath ?? $this->dbPath;
        $this->targetId = $targetId??$this->targetId;

        // DBファイルが無ければ作成(空ファイル)
        if (!file_exists($dbPath)) {
            touch($dbPath);
        }

        // Capsuleインスタンス
        $capsule = new Capsule();

        // SQLite接続
        $capsule->addConnection([
            'driver'   => 'sqlite',
            'database' => $dbPath,
            'prefix'   => '',
        ]);

        $capsule->setAsGlobal();
        $capsule->bootEloquent();

        /**
         * zcnt テーブルが無ければ作成
         */
        if (!DB::schema()->hasTable('cnt_tbl')) {
            DB::schema()->create('cnt_tbl', function (Blueprint $table) {
                $table->integer('id')->primary();
                $table->integer('cnt');
            });

            // 初期データ投入
            DB::table('cnt_tbl')->insert([
                'id'  => $this->targetId,
                'cnt' => 1,
            ]);
        }

        return $this;
    }

    public function getCounter()
    {
        $zcnt = DB::table('cnt_tbl')->where('id', $this->targetId)->first();
        $this->cnt = $zcnt?->cnt;
        return $this;
    }

    public function setCounter()
    {
        if (!is_null($this->cnt)) {
            $this->cnt++;
            DB::table('cnt_tbl')->where('id', $this->targetId)->update([
                'cnt' => $this->cnt
            ]);
        }
    }

    public function output()
    {
        print json_encode([
            'cnt' => $this->cnt
        ]);
    }
}

明日へ続く




3600番目の投稿です/45 回表示されています.

中の人🏠️

AIによるおすすめ記事

著者名  @taoka_toshiaki

※この記事は著者が40代後半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


タグ

IP, MaxMind, php, Sqlite, アカウント, アクセス, アナリティクス, カウンター, カウント, コード, こと, これ, サーバー, サイト, しょう, シンガポール, シンプル, そこ, それ, ダウンロード, データベース, プログラム, ボット, よう, ライブラリ, 一番, 中国, 何処, 使用, 判別, 判定, 制御, 可能, 必要, 方法, 明日, 海外, 登録, 簡単, 経由, 自分, 規約, 解析, 言語, 訪問, 負荷, 遮断, 非常,