sql >> データベース >  >> RDS >> Mysql

サイトへのユニークな訪問者をカウントするにはどうすればよいですか?

    これは素晴らしいチュートリアルです。必要なものです。(出典:コースweb.net/php-mysql

    オンラインユーザーと訪問者を登録して表示する

    MySQLテーブルを使用してオンラインユーザーと訪問者をカウントする

    このチュートリアルでは、オンラインユーザーと訪問者の数を登録し、カウントし、Webページに表示する方法を学習できます。原則は次のとおりです。各ユーザー/訪問者はテキストファイルまたはデータベースに登録されます。 Webサイトのページにアクセスするたびに、phpスクリプトは特定の時間(たとえば2分)より古いすべてのレコードを削除し、現在のユーザー/訪問者を追加し、表示するために残っているレコードの数を取得します。

    オンラインユーザーと訪問者は、サーバー上のファイルまたはMySQLテーブルに保存できます。この場合、テキストファイルを使用してレコードを追加および読み取る方が、MySQLテーブルに保存するよりも高速であると思います。その他のリクエスト。

    最初に、MySQLテーブルを使用する方法よりも、サーバー上のテキストファイルに記録する方法を示します。

    このチュートリアルで紹介するスクリプトを含むファイルをダウンロードするには、-> Count Onlineユーザーと訪問者

    •両方のスクリプトを「.php」ファイルに含めることができますinclude()を使用) ) 、または「 .html "ファイル<script> 、このページの下部に示されている例でわかるように、ただし、サーバーはPHPを実行する必要があります。

    オンラインユーザーと訪問者をテキストファイルに保存する

    PHPを使用してサーバー上のファイルにレコードを追加するには、そのファイルにCHMOD 0766(またはCHMOD 0777)権限を設定して、PHPがそのファイルにデータを書き込めるようにする必要があります。

    1. サーバー上にテキストファイルを作成します(たとえば、userson.txtという名前) )そしてそれにCHMOD 0777を与えます アクセス許可(FTPアプリケーションで、そのファイルを右クリックし、[プロパティ]を選択して、[Readを選択します。 、Write 、およびExecute オプション)。
    2. PHPファイル(usersontxt.phpという名前)を作成します )以下のコードを使用して、このphpファイルをuserson.txtと同じディレクトリにコピーします。 。

    usersontxt.phpのコード ;

    <?php
    // Script Online Users and Visitors - http://coursesweb.net/php-mysql/
    if(!isset($_SESSION)) session_start();        // start Session, if not already started
    
    $filetxt = 'userson.txt';  // the file in which the online users /visitors are stored
    $timeon = 120;             // number of secconds to keep a user online
    $sep = '^^';               // characters used to separate the user name and date-time
    $vst_id = '-vst-';        // an identifier to know that it is a visitor, not logged user
    
    /*
     If you have an user registration script,
     replace $_SESSION['nume'] with the variable in which the user name is stored.
     You can get a free registration script from:  http://coursesweb.net/php-mysql/register-login-script-users-online_s2
    */
    
    // get the user name if it is logged, or the visitors IP (and add the identifier)
    
        $uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;
    
    $rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp to recognize the line with visitors
    $nrvst = 0;                                       // to store the number of visitors
    
    // sets the row with the current user /visitor that must be added in $filetxt (and current timestamp)
    
        $addrow[] = $uvon. $sep. time();
    
    // check if the file from $filetxt exists and is writable
    
        if(is_writable($filetxt)) {
          // get into an array the lines added in $filetxt
          $ar_rows = file($filetxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
          $nrrows = count($ar_rows);
    
                // number of rows
    
      // if there is at least one line, parse the $ar_rows array
    
          if($nrrows>0) {
            for($i=0; $i<$nrrows; $i++) {
              // get each line and separate the user /visitor and the timestamp
              $ar_line = explode($sep, $ar_rows[$i]);
          // add in $addrow array the records in last $timeon seconds
              if($ar_line[0]!=$uvon && (intval($ar_line[1])+$timeon)>=time()) {
                $addrow[] = $ar_rows[$i];
              }
            }
          }
        }
    
    $nruvon = count($addrow);                   // total online
    $usron = '';                                    // to store the name of logged users
    // traverse $addrow to get the number of visitors and users
    for($i=0; $i<$nruvon; $i++) {
     if(preg_match($rgxvst, $addrow[$i])) $nrvst++;       // increment the visitors
     else {
       // gets and stores the user's name
       $ar_usron = explode($sep, $addrow[$i]);
       $usron .= '<br/> - <i>'. $ar_usron[0]. '</i>';
     }
    }
    $nrusr = $nruvon - $nrvst;              // gets the users (total - visitors)
    
    // the HTML code with data to be displayed
    $reout = '<div id="uvon"><h4>Online: '. $nruvon. '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';
    
    // write data in $filetxt
    if(!file_put_contents($filetxt, implode("\n", $addrow))) $reout = 'Error: Recording file not exists, or is not writable';
    
    // if access from <script>, with GET 'uvon=showon', adds the string to return into a JS statement
    // in this way the script can also be included in .html files
    if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";
    
    echo $reout;             // output /display the result
    ?>
    
    1. 上記のスクリプトを「.php」ファイルに含める場合は、オンラインユーザーと訪問者の数を表示する場所に次のコードを追加します。

    4.「。html」ファイル内のオンライン訪問者/ユーザーの数を表示するには、次のコードを使用します:

    <script type="text/javascript" src="usersontxt.php?uvon=showon"></script>
    

    このスクリプト(および以下に示す他のスクリプト)は$_SESSIONで機能します。それを使用するPHPファイルの先頭に、次を追加する必要があります。session_start();.MySQLテーブルを使用してオンラインユーザーと訪問者をカウントする

    MySQLテーブルにオンライン訪問者とユーザーの数を登録、カウント、表示するには、次の3つのSQLクエリを実行する必要があります:特定の時間より古いレコードを削除する新しいユーザー/ visitorで行を挿入するか、すでにある場合は挿入され、その列のタイムスタンプを更新します。残りの行を選択します。これは、MySQLテーブル(「userson」という名前)を使用してオンラインユーザーと訪問者を保存および表示するスクリプトのコードです。

    1. 最初に、2つの列(uvon、dt)を持つ「userson」テーブルを作成します。 「uvon」列には、ユーザーの名前(ログインしている場合)または訪問者のIPが保存されます。 「dt」列には、ページにアクセスしたときのタイムスタンプ(Unix時間)が記載された数値が格納されます。
    • 次のコードをphpファイルに追加します(たとえば、「create_userson.php」という名前):

    create_userson.phpのコード :

    <?php
    header('Content-type: text/html; charset=utf-8');
    
    // HERE add your data for connecting to MySQ database
    $host = 'localhost';           // MySQL server address
    $user = 'root';                // User name
    $pass = 'password';            // User`s password
    $dbname = 'database';          // Database name
    
    // connect to the MySQL server
    $conn = new mysqli($host, $user, $pass, $dbname);
    
    // check connection
    if (mysqli_connect_errno()) exit('Connect failed: '. mysqli_connect_error());
    
    // sql query for CREATE "userson" TABLE
    $sql = "CREATE TABLE `userson` (
     `uvon` VARCHAR(32) PRIMARY KEY,
     `dt` INT(10) UNSIGNED NOT NULL
     ) CHARACTER SET utf8 COLLATE utf8_general_ci"; 
    
    // Performs the $sql query on the server to create the table
    if ($conn->query($sql) === TRUE) echo 'Table "userson" successfully created';
    else echo 'Error: '. $conn->error;
    
    $conn->close();
    ?>
    
    1. 次に、usersonでデータを挿入、削除、および選択するスクリプトを作成します。 表(コードの説明については、スクリプトのコメントを参照してください)。
    • 以下のコードを別のphpファイル(usersmysql.phpという名前)に追加します ):両方のファイルで、MySQLデータベースに接続するための個人データを変数$hostに追加する必要があります。 、$user$pass 、および$dbname

    usersmysql.phpのコード:

    <?php
    // Script Online Users and Visitors - coursesweb.net/php-mysql/
    if(!isset($_SESSION)) session_start();         // start Session, if not already started
    
    // HERE add your data for connecting to MySQ database
    $host = 'localhost';           // MySQL server address
    $user = 'root';                // User name
    $pass = 'password';            // User`s password
    $dbname = 'database';          // Database name
    
    /*
     If you have an user registration script,
     replace $_SESSION['nume'] with the variable in which the user name is stored.
     You can get a free registration script from:  http://coursesweb.net/php-mysql/register-login-script-users-online_s2
    */
    
    // get the user name if it is logged, or the visitors IP (and add the identifier)
    $vst_id = '-vst-';         // an identifier to know that it is a visitor, not logged user
    $uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;
    
    $rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp to recognize the rows with visitors
    $dt = time();                                    // current timestamp
    $timeon = 120;             // number of secconds to keep a user online
    $nrvst = 0;                                     // to store the number of visitors
    $nrusr = 0;                                     // to store the number of usersrs
    $usron = '';                                    // to store the name of logged users
    
    // connect to the MySQL server
    $conn = new mysqli($host, $user, $pass, $dbname);
    
    // Define and execute the Delete, Insert/Update, and Select queries
    $sqldel = "DELETE FROM `userson` WHERE `dt`<". ($dt - $timeon);
    $sqliu = "INSERT INTO `userson` (`uvon`, `dt`) VALUES ('$uvon', $dt) ON DUPLICATE KEY UPDATE `dt`=$dt";
    $sqlsel = "SELECT * FROM `userson`";
    
    // Execute each query
    if(!$conn->query($sqldel)) echo 'Error: '. $conn->error;
    if(!$conn->query($sqliu)) echo 'Error: '. $conn->error;
    $result = $conn->query($sqlsel);
    
    // if the $result contains at least one row
    if ($result->num_rows > 0) {
      // traverse the sets of results and set the number of online visitors and users ($nrvst, $nrusr)
      while($row = $result->fetch_assoc()) {
        if(preg_match($rgxvst, $row['uvon'])) $nrvst++;       // increment the visitors
        else {
          $nrusr++;                   // increment the users
          $usron .= '<br/> - <i>'.$row['uvon']. '</i>';          // stores the user's name
        }
      }
    }
    
    $conn->close();                  // close the MySQL connection
    
    // the HTML code with data to be displayed
    $reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';
    
    // if access from <script>, with GET 'uvon=showon', adds the string to return into a JS statement
    // in this way the script can also be included in .html files
    if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";
    
    echo $reout;             // output /display the result
    ?>
    
    1. サーバー上でこれら2つのphpファイルを作成したら、ブラウザで「create_userson.php」を実行して「userson」テーブルを作成します。

    2. usersmysql.phpを含めます オンラインユーザーと訪問者の数を表示するphpファイル内のファイル。

    3. または、「。html」ファイルに挿入する場合は、次のコードを追加します。

    これらのスクリプトを使用した例

    •phpファイルに「usersontxt.php」を含める:

    <!doctype html>

    オンラインユーザーと訪問者に対抗する

    •htmlファイルに「usersmysql.php」を含める:

    <!doctype html>
    <html>
    <head>
     <meta charset="utf-8" />
     <title>Counter Online Users and Visitors</title>
     <meta name="description" content="PHP script to count and show the number of online users and visitors" />
     <meta name="keywords" content="online users, online visitors" />
    </head>
    <body>
    
    <!-- Includes the script ("usersontxt.php", or "usersmysql.php") -->
    <script type="text/javascript" src="usersmysql.php?uvon=showon"></script>
    
    </body>
    </html>
    

    両方のスクリプト(サーバー上のテキストファイルまたはMySQLテーブルにデータを保存する)は、次のような結果を表示します:オンライン:5

    訪問者:3ユーザー:2

    • MarPlo
    • マリウス


    1. MySQLデータベースのクローン化

    2. SQLServer2008でのPIVOTの使用

    3. MySQL1対多からJSON形式

    4. Oracle11gR2のWM_CONCAT関数のセパレータを変更します