600多万用户密码使用次数统计分析程序

我已经将600多万用户入库,所以从数据库获取原始数据。
如果没有导入,也可以从文本直接分析出数据。
每1万条数据保存一份序列化文件,然后再将这些文件合并成最终的文件。
再将这些数据保存成sql语句。
最后采用mysql命令,将这些数据导入到数据库中。

 1 <?php 
 2 header("content-type:text/html; charset=utf-8");
 3 $path = dirname(realpath(__FILE__));
 4 $conn = mysql_connect('localhost', 'root', 'password') or die("Could not connect: " . mysql_error());
 5 mysql_select_db("database");
 6 mysql_query("set names utf8");
 7 
 8 set_time_limit(0);
 9 $limit = 10000;
10 for($i=0; $i<643; $i++){
11     $file = $path . '/data/' . $i . '.ini';
12     if(is_file($file)){
13         continue;
14     }
15 
16     $start = $limit * $i;
17     $sql = "SELECT * FROM table limit {$start}, {$limit}";
18     $rs  = mysql_query($sql);
19     $password = array();
20     while($row = mysql_fetch_array($rs, MYSQL_ASSOC)){
21         $pass = $row["password"];
22         if(!isset($password[$pass])){
23             $password[$pass] = 0;
24         }
25         $password[$pass]++;
26     }
27     echo $i, chr(10);
28     file_put_contents($file, serialize($password));
29 }
30 
31 ini_set('memory_limit', '1024M');
32 $passes = array();
33 for($i=0; $i<643; $i++){
34     $file = $path . '/data/' . $i . '.ini';
35     if(!is_file($file)){
36         continue;
37     }
38     $pass = unserialize(file_get_contents($file));
39     foreach($pass as $pwd => $num){
40         if(!isset($passes[$pwd])){
41             $passes[$pwd] = $num;
42         }
43         else{
44             $passes[$pwd] += $num;
45         }
46     }
47     echo $i;
48     echo chr(10);
49 }
50 
51 $fw = fopen($path . "/pass.sql", "w");
52 $i  = 0;
53 foreach($passes as $pwd => $num){
54     $str = '';
55     $pwd = str_replace('\'', '\'\'', $pwd);
56     $pwd = str_replace('\\', '\\\\', $pwd);
57     if($i % 2000 == 0){
58         if($i !== 0)$str = ';'.chr(10);
59         $str .= 'INSERT INTO `pwd`(`p`,`n`) VALUES(\''.$pwd.'\',\''.$num.'\')';
60     }
61     else{
62         $str .= ',(\''.$pwd.'\',\''.$num.'\')';
63     }
64     fwrite($fw, $str);
65     if($i % 10000 == 0) echo $i.chr(10);
66     $i++;
67 }
68 fclose($fw);
69 echo "create insert sql success\n"; 
70 ?>

 



posted on 2012-08-17 21:31  Jacky Yu  阅读(193)  评论(0编辑  收藏  举报