这是一个很好的教程,它就是你需要的。
(来源:coursesweb.net/php-mysql)
注册并显示在线用户和访客
使用MySQL表计算在线用户和访客数量
在本教程中,您可以学习如何注册、计数和在网页中显示在线用户和访客数量。
原理是这样的:每个用户/访客都在文本文件或数据库中注册。每次访问网站的页面时,php脚本会删除所有早于某个时间(例如2分钟)的记录,添加当前用户/访客,并获取剩余记录数以显示。
您可以将在线用户和访客存储在服务器上的文件中,也可以存储在MySQL表中。
在这种情况下,我认为使用文本文件来添加和读取记录比将它们存储到需要更多请求的MySQL表中更快。
首先介绍在服务器上记录文本文件的方法,然后介绍使用MySQL表的方法。
要下载本教程中提供的脚本文件,请单击 -> 计算在线用户和访客。
• 这两个脚本都可以包含在“ .php”文件中(使用include()
)或“ .html”文件中(使用<script>
),正如您可以在本页底部的示例中看到的; 但是服务器必须运行PHP。
将在线用户和访客存储在文本文件中
要使用PHP在服务器上的文件中添加记录,必须将CHMOD 0766(或CHMOD 0777)权限设置为该文件,以便PHP可以在其中写入数据。
- 在服务器上创建一个文本文件(例如,命名为
userson.txt
),并给它CHMOD 0777
权限(在FTP应用程序中,右键单击该文件,选择属性,然后选择读取
、写入
和执行
选项)。
- 创建一个PHP文件(命名为
usersontxt.php
),具有以下代码,然后将此php文件复制到与userson.txt
相同的目录中。
usersontxt.php
的代码:
<?php
if(!isset($_SESSION)) session_start();
$filetxt = 'userson.txt';
$timeon = 120;
$sep = '^^';
$vst_id = '-vst-';
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;
$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';
$nrvst = 0;
$addrow[] = $uvon. $sep. time();
if(is_writable($filetxt)) {
$ar_rows = file($filetxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$nrrows = count($ar_rows);
if($nrrows>0) {
for($i=0; $i<$nrrows; $i++) {
$ar_line = explode($sep, $ar_rows[$i]);
if($ar_line[0]!=$uvon && (intval($ar_line[1])+$timeon)>=time()) {
$addrow[] = $ar_rows[$i];
}
}
}
}
$nruvon = count($addrow);
$usron = '';
for($i=0; $i<$nruvon; $i++) {
if(preg_match($rgxvst, $addrow[$i])) $nrvst++;
else {
$ar_usron = explode($sep, $addrow[$i]);
$usron .= '<br/> - <i>'. $ar_usron[0]. '</i>';
}
}
$nrusr = $nruvon - $nrvst;
$reout = '<div id="uvon"><h4>Online: '. $nruvon. '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';
if(!file_put_contents($filetxt, implode("\n", $addrow))) $reout = 'Error: Recording file not exists, or is not writable';
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";
echo $reout;
?>
- 如果您想在“.php”文件中包含上述脚本,请在要显示在线用户和访问者数量的位置添加以下代码:
4. 要在“.html”文件中显示在线访问者/用户数量,请使用此代码:
<script type="text/javascript" src="usersontxt.php?uvon=showon"></script>
这个脚本(和下面呈现的其他脚本)使用 $_SESSION。在使用它的 PHP 文件开头,您必须添加: session_start();。
计算在线用户和访客数量并将其存储到 MySQL 表中
要注册、计算和显示 MySQL 表中在线访问者和用户的数量,需要执行三个 SQL 查询:
1. 删除早于某个时间的记录。
2. 插入具有新用户/访问者或更新其列中的时间戳的行(如果已插入)。
3. 选择其余行。
以下是使用 MySQL 表(名为“userson”)存储和显示在线用户和访客的脚本的代码:
- 首先,我们创建“userson”表,其中包含 2 个列(uvon、dt)。在“uvon”列中,存储用户的名称(如果已登录)或访问者的 IP。在“dt”列中,存储页面访问时的时间戳(Unix 时间)。
- 在 PHP 文件中添加以下代码(例如,命名为“create_userson.php”):
create_userson.php
的代码:
<?php
header('Content-type: text/html; charset=utf-8');
$host = 'localhost';
$user = 'root';
$pass = 'password';
$dbname = 'database';
$conn = new mysqli($host, $user, $pass, $dbname);
if (mysqli_connect_errno()) exit('Connect failed: '. mysqli_connect_error());
$sql = "CREATE TABLE `userson` (
`uvon` VARCHAR(32) PRIMARY KEY,
`dt` INT(10) UNSIGNED NOT NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci";
if ($conn->query($sql) === TRUE) echo 'Table "userson" successfully created';
else echo 'Error: '. $conn->error;
$conn->close();
?>
- 现在我们创建一个脚本,可以在
userson
表中插入、删除和选择数据(有关代码的解释,请参见脚本中的注释)。
- 将以下代码添加到另一个名为
usersmysql.php
的php文件中:
在两个文件中,您必须添加用于连接到MySQL数据库的个人数据,在变量$host
、$user
、$pass
和$dbname
中。
usersmysql.php的代码:
<?php
if(!isset($_SESSION)) session_start();
$host = 'localhost';
$user = 'root';
$pass = 'password';
$dbname = 'database';
$vst_id = '-vst-';
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;
$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';
$dt = time();
$timeon = 120;
$nrvst = 0;
$nrusr = 0;
$usron = '';
$conn = new mysqli($host, $user, $pass, $dbname);
$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`";
if(!$conn->query($sqldel)) echo 'Error: '. $conn->error;
if(!$conn->query($sqliu)) echo 'Error: '. $conn->error;
$result = $conn->query($sqlsel);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if(preg_match($rgxvst, $row['uvon'])) $nrvst++;
else {
$nrusr++;
$usron .= '<br/> - <i>'.$row['uvon']. '</i>';
}
}
}
$conn->close();
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";
echo $reout;
?>
在您的服务器上创建这两个php文件后,在浏览器上运行"create_userson.php"以创建"userson"表格。
将usersmysql.php
文件包含在要显示在线用户和访问者数量的php文件中。
或者,如果您想要在".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>
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>
</body>
</html>
无论是将数据存储到服务器的文本文件中还是存储到MySQL表中,两个脚本都会显示如下结果:
在线人数:5
访客数量:3
用户数量:2