2

我想写一个跟踪系统,现在我可以保存在我的 Mysql 数据库中。但是保存有关访问的每个 ip 的信息对于 mysql 来说是一项巨大的工作

所以我想如果我可以将信息保存在一个文件中,那么就没有关于数据库及其问题的讨论。

但要开始这个:我真的不知道如何以一种我可以毫无问题地阅读并显示详细信息的方式保存在文件中

保存在文件中后,我需要在行中显示有关所有 ips 的信息

我应该怎么做才能按行顺序(表格)保存和显示

php/mysql

4

5 回答 5

4

你用的是什么网络服务器?那不是您可以使用的内置日志记录吗?

于 2010-03-21T11:54:24.263 回答
3

我不明白为什么您认为自己将这些数据读取和写入文件会比数据库更快?

您本质上是说,对,您可以编写代码来完全执行数据库将要执行的操作,但更好吗?

我想大多数人都会同意我的观点:如果你不使用这个数据库,你会发现速度方面的主要问题。

于 2010-03-21T11:31:22.397 回答
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

于 2010-03-21T13:04:23.283 回答
0

您是否有任何特殊原因不能将服务器自己的日志用作数据存储?拆开 IIS 或 Apache access_log 并解析出您想要的信息非常简单。

如果您只对访问日志的某个子集感兴趣(即:实际页面上的点击,而忽略图像/javascript/css/flash/whatever 文件),您可以只解析那些特定的点击。然后将缩减后的数据集填充到另一台服务器上的 MySQL 中。

在那之后,数据库是存储相关命中数据的好地方,因为它可以为您进行数据挖掘,并毫不费力地处理所有分组/计数。想想当您加载几亿次点击并尝试跟踪每个 IP 数据时会发生什么 - 您的内存中数据集将快速增长并可能超过可用内存。在数据库中进行求和/计数/平均/等...将为您处理所有这些问题;您只需要担心事后解释结果。

并且作为优化提示:将您的 IP 地址存储为无符号整数字段,而不是 varchar(15)。它们实际上只是 32 位数字。当您尝试应用子网掩码等时,在分析阶段的重复命中旁边,一次性初始 ascii->numeric 转换的开销将是微不足道的:

INSERT INTO log (ip) VALUES (INET_ATON('10.0.0.1'));
于 2010-03-22T03:32:32.007 回答
0

我总是将有关用户的所有数据存储在数据库中。而且它工作得很快,而且不贵。有很多方法可以将数据写入文件中,但是您需要它们吗?我想不是。

于 2010-03-21T13:38:35.343 回答