Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie zähle ich eindeutige Besucher meiner Website?

Hier ist ein nettes Tutorial, genau das, was Sie brauchen. (Quelle: courseweb.net/php-mysql )

Online-Benutzer und -Besucher registrieren und anzeigen

Zählen Sie Online-Benutzer und -Besucher mithilfe einer MySQL-Tabelle

In diesem Tutorial erfahren Sie, wie Sie die Anzahl der Online-Benutzer und -Besucher registrieren, zählen und auf Ihrer Webseite anzeigen. Das Prinzip ist folgendes:Jeder Benutzer / Besucher wird in einer Textdatei oder Datenbank registriert. Jedes Mal, wenn eine Seite der Website aufgerufen wird, löscht das PHP-Skript alle Datensätze, die älter sind als eine bestimmte Zeit (z. B. 2 Minuten), fügt den aktuellen Benutzer / Besucher hinzu und zeigt die Anzahl der verbleibenden Datensätze an.

Sie können die Online-Benutzer und -Besucher in einer Datei auf dem Server oder in einer MySQL-Tabelle speichern. In diesem Fall denke ich, dass die Verwendung einer Textdatei zum Hinzufügen und Lesen der Datensätze schneller ist als das Speichern in einer MySQL-Tabelle, was erforderlich ist weitere Anfragen.

Zuerst wird die Methode mit Aufzeichnung in einer Textdatei auf dem Server vorgestellt, dann die Methode mit MySQL-Tabelle.

Um die Dateien mit den in diesem Tutorial vorgestellten Skripten herunterzuladen, klicken Sie auf -> Count Online Benutzer und Besucher .

• Beide Skripte können in ".php"-Dateien eingebunden werden (mit include()). ) , oder in " .html"-Dateien (mit <script> ) , wie Sie in den Beispielen unten auf dieser Seite sehen können; aber auf dem Server muss PHP laufen.

Speichern von Online-Benutzern und -Besuchern in einer Textdatei

Um Datensätze in einer Datei auf dem Server mit PHP hinzuzufügen, müssen Sie CHMOD 0766 (oder CHMOD 0777) Berechtigungen für diese Datei setzen, damit PHP Daten darin schreiben kann.

  1. Erstellen Sie eine Textdatei auf Ihrem Server (z. B. mit dem Namen userson.txt ) und geben Sie CHMOD 0777 ein Berechtigungen (klicken Sie in Ihrer FTP-Anwendung mit der rechten Maustaste auf diese Datei, wählen Sie Eigenschaften und dann Read , Write , und Execute Optionen).
  2. Erstellen Sie eine PHP-Datei (mit dem Namen usersontxt.php ) mit dem unten stehenden Code, dann kopieren Sie diese PHP-Datei in dasselbe Verzeichnis wie userson.txt .

Der Code für 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. Wenn Sie das obige Skript in eine ".php"-Datei einfügen möchten, fügen Sie den folgenden Code an der Stelle ein, an der Sie die Anzahl der Online-Benutzer und -Besucher anzeigen möchten:

4.Um die Anzahl der Online-Besucher/Benutzer in einer ".html"-Datei anzuzeigen, verwenden Sie diesen Code:

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

Dieses Skript (und das andere unten vorgestellte) arbeitet mit $_SESSION. Am Anfang der PHP-Datei, in der Sie es verwenden, müssen Sie Folgendes hinzufügen:session_start();.Zählen Sie Online-Benutzer und -Besucher mithilfe einer MySQL-Tabelle

Um die Anzahl der Online-Besucher und Benutzer in einer MySQL-Tabelle zu registrieren, zu zählen und anzuzeigen, müssen drei SQL-Abfragen ausgeführt werden:Löschen Sie die Datensätze, die älter als eine bestimmte Zeit sind. Fügen Sie eine Zeile mit dem neuen Benutzer /Besucher ein, oder, falls dies bereits der Fall ist eingefügt, aktualisieren Sie den Zeitstempel in seiner Spalte. Wählen Sie die verbleibenden Zeilen aus. Hier ist der Code für ein Skript, das eine MySQL-Tabelle (mit dem Namen "userson") verwendet, um die Online-Benutzer und -Besucher zu speichern und anzuzeigen.

  1. Zuerst erstellen wir die "userson"-Tabelle mit 2 Spalten (uvon, dt). In der Spalte „uvon“ wird der Name des Benutzers (falls eingeloggt) oder die IP des Besuchers gespeichert. In der Spalte „dt“ wird eine Zahl mit dem Zeitstempel (Unix-Zeit) des Seitenaufrufs gespeichert.
  • Fügen Sie den folgenden Code in eine PHP-Datei ein (z. B. mit dem Namen "create_userson.php"):

Der Code für 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. Jetzt erstellen wir das Skript, das Daten im userson einfügt, löscht und auswählt table (Erläuterungen zum Code finden Sie in den Kommentaren im Skript).
  • Fügen Sie den unten stehenden Code in eine andere PHP-Datei ein (mit dem Namen usersmysql.php ):In beiden Dateien müssen Sie Ihre persönlichen Daten für die Verbindung zur MySQL-Datenbank in den Variablen hinzufügen:$host , $user , $pass , und $dbname .

Der Code für 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. Nachdem Sie diese beiden PHP-Dateien auf Ihrem Server erstellt haben, führen Sie „create_userson.php“ in Ihrem Browser aus, um die „userson“-Tabelle zu erstellen.

  2. Fügen Sie die usersmysql.php hinzu Datei in der PHP-Datei, in der Sie die Anzahl der Online-Benutzer und -Besucher anzeigen möchten.

  3. Oder, wenn Sie es in eine ".html"-Datei einfügen möchten, fügen Sie diesen Code hinzu:

Beispiele mit diesen Skripten

• Einbinden der „usersontxt.php“ in eine PHP-Datei:

Zähler für Online-Benutzer und -Besucher

• Einbinden der „usersmysql.php“ in eine HTML-Datei:

<!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>

Beide Skripte (mit Speichern von Daten in einer Textdatei auf dem Server oder in einer MySQL-Tabelle) zeigen ein Ergebnis wie dieses an:Online:5

Besucher:3Benutzer:2

  • MarPlo
  • Marius