我想写一个跟踪系统,现在我可以保存在我的Mysql数据库中。但保存每次访问ip的信息对于mysql来说是一项巨大的工作
所以我认为如果我可以将信息保存在文件中,那么就不会讨论数据库及其问题。
但要开始这个:我真的不知道如何以一种我可以毫无问题地阅读它的方式保存在文件中并显示详细信息
我需要在保存到文件
后显示有关行中所有ips的信息我该怎么做才能按行顺序(表格)保存和显示
php / mysql
答案 0 :(得分:4)
您使用的是哪个网络服务器?那些内置日志记录是否可以使用?
答案 1 :(得分:3)
我不明白为什么你认为自己读取和写入这些数据会比数据库更快?
你基本上说的是,你可以编写完全符合数据库要求的代码,但更好吗?
我想大多数人会同意我的意见:如果你不使用数据库,你会看到速度方面的主要问题。
答案 2 :(得分:1)
我不知道你是否正确理解了你想要创建日志文件的问题
如果你真的需要将数据保存到文件
,你总是可以这样做要将数据写入文件,请执行以下操作
$file = 'logfile.txt';
if(file_exist($file)){
$fh = fopen($file, 'w');
}else{
$fh = fopen($file, 'a');
}
$data = $dt."\t\t".$ipaddr."\t\t".$hostnm."\t\t".$referer."\t\t".$pg."\t\t".$pagetitle."\t\t".$dbi."\n";
fwrite($fh,$data);
fclose($fh);
要从文件中读取数据,请使用PHP 文件功能将数据保存到阵列。然后,您可以在数组中搜索相关数据,在此处阅读更多信息http://php.net/manual/en/function.file.php
答案 3 :(得分:0)
我总是将有关用户的所有数据存储在数据库中。它工作得很快,而且价格不贵。 有很多方法可以在文件中写入数据,但是你需要它们吗?我想不。
答案 4 :(得分:0)
您是否有任何特殊原因无法将服务器自己的日志用作数据存储?撕掉IIS或Apache access_log并解析出你想要的信息是非常简单的。
如果您只对访问日志的某个子集感兴趣(即:在实际页面上点击,并忽略images / javascript / css / flash /任何文件),您可以解析这些特定的匹配。然后把这个简化的数据集放到另一台服务器上的MySQL中。
之后,数据库是存储相关命中数据的更好的地方,因为它可以为您进行数据挖掘,并且可以轻松处理所有分组/计数。想想当您加载几亿次点击并尝试跟踪每个IP数据时会发生什么 - 您的内存数据集会快速增长并可能超过可用内存。在数据库中进行求和/计数/平均/等...将为您处理所有这些问题;你只需要担心之后解释结果。
就像优化提示一样:将您的IP地址存储为无符号整数字段,而不是varchar(15)。它们实际上只是32位数。当您尝试应用子网掩码时,一次性初始ascii->数字转换的开销将在分析阶段的重复命中旁边完全无关紧要:
INSERT INTO log (ip) VALUES (INET_ATON('10.0.0.1'));