1+ <?php
2+ /**
3+ * Created by PhpStorm.
4+ * User: zhao.binyan
5+ * Date: 2019/7/25
6+ * Time: 下午2:24
7+ */
8+
9+ /*
10+ 纯真数据库自动更新原理实现
11+ www.shuax.com 2014.03.27
12+ */
13+
14+ /**
15+ * 示例
16+ * `php ~/bin/update-ip.php`
17+ *
18+ * 更新到指定目录
19+ * `php ~/bin/update-ip.php -d=/tmp`
20+ */
21+
22+ date_default_timezone_set ("PRC " );
23+
24+ //可设置为服务器特定目录,单独,避免组件升级互相影响
25+ $ dir = dirname (__DIR__ ) . "/src " ;
26+ $ option = getopt ("d:: " );
27+ if (isset ($ option ['d ' ])) {
28+ if (!is_readable ($ option ['d ' ])) {
29+ die ("bad param, dir not readable " . $ option ['d ' ]);
30+ }
31+ $ dir = $ option ['d ' ];
32+ }
33+
34+ $ stime = microtime (true );
35+
36+ echo "开始准备更新数据库 " . date ("Y-m-d H:i:s " );
37+ echo "\n" ;
38+
39+ $ copywrite = file_get_contents ("http://update.cz88.net/ip/copywrite.rar " );
40+
41+ if (!$ copywrite ) {
42+ $ download_spend = $ qqwry_time - $ stime ;
43+ die ("copywrite.rar 下载失败 " . sprintf ("下载耗时%s " , $ download_spend ));
44+ }
45+
46+ $ qqwry = file_get_contents ("http://update.cz88.net/ip/qqwry.rar " );
47+ $ qqwry_time = microtime (true );
48+
49+ if (!$ qqwry ) {
50+ $ download_spend = $ qqwry_time - $ stime ;
51+ die ("qqwry.rar 下载失败 " . sprintf ("下载耗时%s " , $ download_spend ));
52+ }
53+
54+ $ key = unpack ("V6 " , $ copywrite )[6 ];
55+ for ($ i = 0 ; $ i < 0x200 ; $ i ++) {
56+ $ key *= 0x805 ;
57+ $ key ++;
58+ $ key = $ key & 0xFF ;
59+ $ qqwry [$ i ] = chr (ord ($ qqwry [$ i ]) ^ $ key );
60+ }
61+ $ qqwry = gzuncompress ($ qqwry );
62+ $ unzip_time = microtime (true );
63+
64+ $ download_spend = $ qqwry_time - $ stime ;
65+ $ unzip_spend = $ unzip_time - $ qqwry_time ;
66+
67+ if (!$ qqwry ) {
68+ die ("gzip 解压缩失败 " . sprintf ("下载耗时%s,解压耗时%s " , $ download_spend , $ unzip_spend ));
69+ }
70+
71+ $ tmp_file = $ dir . '/ ' . 'qqwry.dat.bak ' ;
72+ $ online_file = $ dir . '/ ' . 'qqwry.dat ' ;
73+
74+ if (file_put_contents ($ tmp_file , $ qqwry )) {
75+ $ put_time = microtime (true );
76+ $ put_spend = $ put_time - $ unzip_time ;
77+ copy ($ online_file , $ online_file .'.online.bak ' );
78+ copy ($ tmp_file , $ online_file );
79+
80+ $ copy_spend = microtime (true ) - $ put_time ;
81+ die ("更新成功 " . sprintf ("下载耗时%s,解压耗时%s,写入耗时%s,复制耗时%s " , $ download_spend , $ unzip_spend , $ put_spend , $ copy_spend ));
82+ } else {
83+ die ("更新失败 " . sprintf ("下载耗时%s,解压耗时%s " , $ download_spend , $ unzip_spend ));
84+ }
0 commit comments