php计数器代码数字超过十几位就显示结果为1.2345678912346E+25,怎么才能全部显示出来?

代码一:
<?php
function counter(){
$file='counter.txt';
if(!file_exists($file)){
$num=0;
$cf=fopen($file,"w");
fwrite($cf,$num);
fclose($cf);
}
else{
$cf=fopen($file,"rw");
$num=fgets($cf);
fclose($cf);
}

$num++;
$cf=fopen($file,"w");
fwrite($cf,$num);
fclose($cf);
return $num;
}
?>

代码二:
<?php
require("function.php");
?>
<html>
<head>
<title>访客计数器</title>
</head>
<body>
您是第<?php echo counter();?>位访客!!!
</body>
</html>

文本:
我是直接在文本里写的数字,超过17为数字就会显示这样数字的格式。

求解!!!

创建一个数据库表
表名:table_counter

字段:number int(10)

1.显示统计数据

$sql = "SELECT * FROM table_counter";

2.每次刷新页面 执行sql

$sql = "UPDATE table_counter SET number= number+ 1";

如果要做的精确一点

在加一个表

table_visit

字段:ip

1更次刷新取得游客$ip;

2.取得$ip后.查询 table_vist .

如果存在则不更新table_counter.

如果不存在,则更新table_vist ,更新语句同上.并把$ip插入table_visit

如果还需要做的更人性化一点.设置一个时间间隔,比如说10分钟.$diff = 600;

在table_visit再加上一个字段

datetime :int(10)(时间戳).记录游客访问时间.

1更次刷新取得游客$ip 和 时间$date = time();

2.查询 table_vist .

$sql = "SELECT * FROM table_vist WHERE ip = '$ip'";

3.如果不存在.则把$ip和$date插入表table_vist.

$sql = "INSERT INTO table_vist SET ip = '$ip',timedate=$date";

并更新table_counter;

4.如果存在,则判断该条查询结果的timedate 和 现在时间$date,的差值.和 $diff比较

少于则不做任何操作.

大于则更新table_vist 。$sql = "UPDATE table_vist SET timedate = $date WHERE ip = '$ip'";
并更新table_visit;追问

怎么像没有关联。。。能说具体些吗?我是写到文本里的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-15

PHP处理大数字的时候,会自动转换为科学计数法,不过,你可以使用下面方法还原它。

<?php echo number_format(counter(),0,'','');?>

希望可以帮到你。

追问

如果不用科学记数法就不准确了,自己在建立好的counter.txt中写入16位数以上的数字显示的不准确。难道你们设计计数器没有考虑过这方面内容?能不能int转化成double?但是超过32位不是又出现这类型问题了?求解。

第2个回答  2013-10-15
$a = 123456789012345678;
$b = 1
echo bcadd($a, $b);

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网