php统计在线人数的方法,我们之前介绍过一篇:
一个比较精确的统计在线人数的php代码,有兴趣的朋友,可以研究下。
今天,我们介绍的这个,可以详细记录在线访问者的IP地址,最后访问时间,请求的url等信息。供大家参考。
首先,创建数据表 ccol:
id integer not null auto_increment, #记录的ID
ip char(15) not null, #访问者的IP地址
dtstamp datetime not null, #最后访问时间
uri char(255), #访问者请求的URI
primary key (id)
);
然后,编写统计用的php代码
<?
/*
文件:ccol.php
目的:统计同时在线浏览的人数
edit: www.
*/
$duration=1800;
require "db.php"; //自行准备,数据库访问类
//包含DBSQL
$ccol=new dbSQL;
$ccol->connect();
$ccol->query("DELETE FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))>$duration");
//删除超过半小时的记录
$ccol->query("SELECT * FROM ccol WHERE ip='$REMOTE_ADDR'");
//判断当前的IP是否在该表中存在
if ($ccol->nf())//有?
{
$ccol->next_record();//下移找到的记录数组的指针
$id=$ccol->f('id');
$ccol->query("UPDATE ccol SET dtstamp=now(), uri='$REQUEST_URI' WHERE id=$id");
//设置最后访问时间和访问页面
}
else//没有
{
$ccol->query("INSERT INTO ccol VALUES (0, '$REMOTE_ADDR', now(), '$REQUEST_URI')");
}
$ccol->query("SELECT COUNT(*) AS ccol FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))<=$duration");
//找出在半个小时内的记录,后面的WHERE子句可有可无--超出时间的已经被删除了
$ccol->next_record()
echo "在线人数:", $ccol->f('ccol');
$ccol->free_result();
?>
调用方法,在站点的每个页面的上面调用这个程序。
例如:
...
<!--显示在线人数->
<?require ../stats/ccol.php?>
...
总结,以上代码仅供初学者参考。
有兴趣的朋友,可以加以改进与扩展,有好的统计在线人数的代码,也欢迎大家分享交流。
PHP中有个内置函数array_unique,可以去除数组中的重复项,不过此函数只适用于一维数组,对多维数组并不适用。
以下是自己实现的php二维数组去重的array_unique函数,供大家参考。
<?php
//函数1,二维数组去掉重复值
function array_unique_fb($array2D){
foreach ($array2D as $v){
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k] = explode()(",",$v); //再将拆开的数组重新组装
}
return $temp;
}
//函数2,二维数组去掉重复值 并保留键值
function array_unique_fb($array2D){
foreach ($array2D as $k=>$v){
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[$k] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$array=explode(",",$v); //再将拆开的数组重新组装
$temp2[$k]["id"] =$array[0];
$temp2[$k]["litpic"] =$array[1];
$temp2[$k]["title"] =$array[2];
$temp2[$k]["address"] =$array[3];
$temp2[$k]["starttime"] =$array[4];
$temp2[$k]["endtime"] =$array[5];
$temp2[$k]["classid"] =$array[6];
$temp2[$k]["ename"] =$array[7];
}
return $temp2;
}
?>
调用示例:
$arr = array("a"=>array("a"=>"welcome","b"=>"to","c"=>"www."),
"b"=>array("a"=>"","b"=>"","c"=>"beijing")
);
$arr2 = array_unique_fb($arr)
?>
通过具体的例子,深入理解php中0,null,empty,空,false,字符串间的关系。
代码如下:
<?php
//判断 0 和 '' 以及 empty null false的关系 start//
if('safdasefasefasf'==0){
echo "该字符串转换为数字 等于 0 <br/>";
}//output:该字符串转换为数字 等于零。
这是关键的一个例子
手册上有解释:该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。
也就是说 '3asfdf'==3 ; 'adsfasdf'==0 相当要注意
$a=0;
if($a==''){
echo "0 等于 '' <br/>";
} //output:0 等于''
if(trim($a)==''){
echo "trim(0)等于'' <br/>";
} //no output
if($a===''){
echo "0==='' <br/>";
} //no output
if(empty($a)){
echo "'' is empty <br/>";
} //output:'' is empty
if(is_null($a)){
echo "0 is null <br/>";
} //no output
if(is_numeric($a)){
echo "0 is numeric <br/>";
} //output:0 is numeric
if(is_string($a)){
echo "0 is string <br/>";
} //no output
if(strval($a)==''){
echo "转换成字符串的0 is '' <br/>";
} //no output
// 判断 0 和 '' 以及 empty null false的关系 end //
// 判断 '' 和 0 以及 empty null false的关系 start //
$b = '';
if($b==0){
echo "'' 等于 0 <br/>";
} //output:'' 等于 0
if(!''){
echo "'' 就是false <br/>";
} //output:'' 就是false
if(!0){
echo "0 就是false <br/>";
} //output:0 就是false www.
// 判断 '' 和 0 以及 empty null false的关系 end //
echo "在判断空('')的时候一定要小心,0 也相当于'' ,0 和 '' 都相当于空字符和false,判断为空最好用===";
?>
输出结果:
0 等于 ” ” is empty 0 is numeric ” 等于 0 ” 就是false 0 就是false 在判断空(”)的时候一定要小心,0 也相当于” ,0 和 ” 都相当于空字符和false,判断为空最好用=== 只能这样解释:0 也相当于 ” ,0 和 ” 都相当于空字符和false。
在判断空(”)的时候一定要小心,0 也相当于 ” ,0 和 ” 都相当于空字符和false,判断为空最好用===;
echo 0 === null; echo '**<br/>' ; //false
echo (string)0 != null; echo '**<br/>' ; //true
echo 0 != null; echo '**<br/>' ; //false
echo 0 !== null; echo '**<br/>' ; //true