├── AndroidAPK ├── LingDong.apk └── LingDong_PC_V2.1.zip ├── AndroidDownloadAction.php ├── AndroidUploadAction.php ├── DataVisualization ├── APP_Holding_Time.php ├── APP_Start_Time.php ├── Android_Screen_Resolution.php ├── Android_Version.php ├── DataVisualization_index.html ├── Files_Trans_Size.php ├── Files_Trans_Type.php ├── Modules_Using_Times.php └── MyJavaScript │ ├── APP_Holding_Time.js │ ├── APP_Start_Time.js │ ├── Android_Screen_Resolution.js │ ├── Android_Version.js │ ├── Files_Trans_Size.js │ ├── Files_Trans_Type.js │ └── Modules_Using_Times.js ├── DatabaseScript ├── User_Info_Android.php ├── User_Using_Files_Trans_Android.php ├── User_Using_Modules_Times_Android.php └── User_Using_Time_Android.php ├── README.md ├── WebDownloadAction.php ├── WebUploadAction.php ├── Web端后台MySQL数据库设计.docx ├── config.php ├── connect.php ├── css ├── amazeui.min.css ├── bootstrap.min.css ├── dongtai │ ├── jsdaima.css │ └── jsdaima.js └── landing-page.css ├── favicon.ico ├── feedback.php ├── github-images-folder ├── 001.jpg ├── 002.jpg ├── 003.jpg ├── 004.jpg ├── 005.jpg ├── 006.jpg ├── 007.jpg └── filesUPandDOWN.jpg ├── img ├── APP_ErWeiMa.jpg ├── banner-bg.jpg ├── dog.jpg ├── images │ ├── 1.jpg │ ├── 2.jpg │ └── 3.jpg ├── intro-bg.jpg ├── ipad.jpg ├── phones.jpg └── website_icon.ico ├── index.php ├── phpinfo.php └── tanzhen.php /AndroidAPK/LingDong.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhoubowen-sky/LingDongWeb/fb5952464bb7595fc3773ae014173551d61a44e5/AndroidAPK/LingDong.apk -------------------------------------------------------------------------------- /AndroidAPK/LingDong_PC_V2.1.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhoubowen-sky/LingDongWeb/fb5952464bb7595fc3773ae014173551d61a44e5/AndroidAPK/LingDong_PC_V2.1.zip -------------------------------------------------------------------------------- /AndroidDownloadAction.php: -------------------------------------------------------------------------------- 1 | path; 26 | 27 | //echo $downloadpath; 28 | //echo ""; 29 | 30 | 31 | /********************以下是将下载相关的记录写入数据库filedownloadrecords********************/ 32 | //获取下载的时间 33 | $date_tmp = time();//获取Linux时间戳 34 | $dateline2 = date("Y-m-d H:i:s", $date_tmp+8*60*60);//将时间戳转换为标准时间 35 | 36 | $name2 = $arr1 -> name; 37 | $path2 = $arr1 -> path; 38 | $md5name2 = $arr1 -> md5name; 39 | $type2 = $arr1 -> type; 40 | $size2 = $arr1 -> size; 41 | $downloadnumber2 = $arr1 -> downloadnumber; 42 | 43 | //下载者的IP 44 | $requestIP = $_SERVER["REMOTE_ADDR"]; 45 | 46 | //echo $requestIP; 47 | 48 | 49 | //在用户下载数据库里面重找是否有下载的记录 50 | //$downloadtimes = 0; 51 | 52 | $sql2 = "select * from filedownloadrecords where downloadnumber = $downloadnumber"; 53 | 54 | $query2 = mysql_query($sql2); 55 | 56 | $arr2 = mysql_fetch_object($query2); 57 | 58 | /**如果下载记录表中没有这条记录,那么久插入这条记录*/ 59 | // if ($arr2 == NULL){ 60 | 61 | $downloadtimes=1; 62 | 63 | $insertsql = "insert into filedownloadrecords(name,path,md5name,type,size,downloadnumber,requestIP,downloadtimes,dateline) values ('$name2','$path2','$md5name2','$type2','$size2','$downloadnumber2','$requestIP','$downloadtimes','$dateline2')"; 64 | //echo $insertsql; 65 | mysql_query($insertsql); 66 | 67 | 68 | 69 | /**如果有这条记录就判断是否为同一IP,如果是就增加下载次数,如果不是就重新插入一条数据*/ 70 | // }else 71 | // { 72 | 73 | // if ($requestIP == $arr2 -> requestIP){ 74 | // //获取下载记录表中存储的下载次数的数据downloadtimes 75 | 76 | // $downloadtimes = $arr2 -> downloadtimes + 1; 77 | 78 | // $sql3 = "update filedownloadrecords set downloadtimes = $downloadtimes where downloadnumber = $downloadnumber"; 79 | 80 | // mysql_query($sql3); 81 | // }else { 82 | // /**不是同一条IP,那个就需要再插入一条数据*/ 83 | // $downloadtimes=1; 84 | 85 | // $insertsql2 = "insert into filedownloadrecords(name,path,md5name,type,size,downloadnumber,requestIP,downloadtimes,dateline) values ('$name2','$path2','$md5name2','$type2','$size2','$downloadnumber2','$requestIP','$downloadtimes','$dateline2')";; 86 | // //echo $insertsql2; 87 | // mysql_query($insertsql2); 88 | 89 | // } 90 | 91 | // } 92 | 93 | 94 | /***********强制让用户下载文件的代码,用Header实现************/ 95 | /* $file_dir = 'FilesUpload/'; 96 | $file_name = $arr1 -> md5name; 97 | 98 | $file = fopen($file_dir . $file_name,"r"); // 打开文件 99 | //输入文件标签 100 | Header("Content-type: application/octet-stream"); 101 | Header("Accept-Ranges: bytes"); 102 | Header("Accept-Length: ".filesize($file_dir . $file_name)); 103 | Header("Content-Disposition: attachment; filename=" . $file_name);//最终保存在磁盘上的文件名 104 | // 输出文件内容 105 | echo fread($file,filesize($file_dir . $file_name)); 106 | fclose($file); 107 | exit(); */ 108 | //返回文件路径,然后在安卓端下载此文件 109 | echo("$path2"); 110 | 111 | 112 | //echo ""; 113 | } 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /AndroidUploadAction.php: -------------------------------------------------------------------------------- 1 | alert('文件上传成功!');window.location.href='index.php'"; 40 | }else{ 41 | //echo ""; 42 | exit; 43 | } 44 | }else{ 45 | //匹配错误信息 46 | switch($fileInfo['error']){ 47 | case 1: 48 | echo '上传文件超过了PHP配置文件中upload_max_filesize选项的值'; 49 | break; 50 | case 2: 51 | echo '超过了表单MAX_FILE_SIZE限制的大小'; 52 | break; 53 | case 3: 54 | echo '文件部分被上传'; 55 | break; 56 | case 4: 57 | echo ""; 58 | break; 59 | case 6: 60 | echo '没有找到临时目录'; 61 | break; 62 | case 7: 63 | case 8: 64 | echo '系统错误'; 65 | break; 66 | } 67 | exit; 68 | } 69 | 70 | //向数据库中添加文件的信息 71 | //mysql_query("set names utf8"); 72 | $downloadpath = "http://115.28.101.196/".$destination; 73 | //echo $downloadpath; 74 | 75 | $downloadnumber = rand(100,999999);//生成随机的四位提取码 76 | 77 | //判断系统数据库中是否已经有这个提取码 78 | 79 | 80 | /* while (($sql_downloadnumber = "select * from fileinfo where downloadnumber = $downloadnumber")) { 81 | $downloadnumber = rand(100,999999); 82 | } 83 | */ 84 | 85 | $date_tmp = time();//获取Linux时间戳 86 | $dateline = date("Y-m-d H:i:s", $date_tmp+8*60*60);//将时间戳转换为标准时间 87 | 88 | $insertsql = "insert into fileinfo(name,path,md5name,type,size,downloadnumber,uploaderIP,dateline) values ('$filename','$downloadpath','$uniName','$ext','$size','$downloadnumber','$uploaderIP','$dateline')"; 89 | //echo $insertsql; 90 | mysql_query($insertsql); 91 | 92 | echo "文件上传成功!文件提取码为:$downloadnumber"; 93 | 94 | 95 | -------------------------------------------------------------------------------- /DataVisualization/APP_Holding_Time.php: -------------------------------------------------------------------------------- 1 | "; 30 | $num = $row[0]; 31 | //echo ($num)."
"; 32 | 33 | if (0 <= $num && $num < 60){ 34 | $num_0_1m++; 35 | }elseif (60 <= $num && $num < 120){ 36 | $num_1m_2m++; 37 | }elseif (120 <= $num && $num < 180){ 38 | $num_2m_3m++; 39 | }elseif (180 <= $num && $num < 240){ 40 | $num_3m_4m++; 41 | }elseif (240 <= $num && $num < 300){ 42 | $num_4m_5m++; 43 | }elseif (300 <= $num && $num < 360){ 44 | $num_5m_6m++; 45 | }elseif (360 <= $num && $num < 420){ 46 | $num_6m_7m++; 47 | }elseif (420 <= $num && $num < 480){ 48 | $num_7m_8m++; 49 | }elseif (480 <= $num && $num < 540){ 50 | $num_8m_9m++; 51 | }elseif (540 <= $num && $num < 600){ 52 | $num_9m_10m++; 53 | }elseif (600 <= $num ){ 54 | $num_10m___++; 55 | } 56 | 57 | } 58 | 59 | 60 | 61 | $app_holding_time[0] = array("name"=>"00:00","value"=>$num_0_1m); 62 | $app_holding_time[1] = array("name"=>"02:00","value"=>$num_1m_2m); 63 | $app_holding_time[2] = array("name"=>"04:00","value"=>$num_2m_3m); 64 | $app_holding_time[3] = array("name"=>"06:00","value"=>$num_3m_4m); 65 | $app_holding_time[4] = array("name"=>"08:00","value"=>$num_4m_5m); 66 | $app_holding_time[5] = array("name"=>"10:00","value"=>$num_5m_6m); 67 | $app_holding_time[6] = array("name"=>"12:00","value"=>$num_6m_7m); 68 | $app_holding_time[7] = array("name"=>"14:00","value"=>$num_7m_8m); 69 | $app_holding_time[8] = array("name"=>"16:00","value"=>$num_8m_9m); 70 | $app_holding_time[9] = array("name"=>"18:00","value"=>$num_9m_10m); 71 | $app_holding_time[10] = array("name"=>"20:00","value"=>$num_10m___); 72 | 73 | 74 | 75 | echo json_encode($app_holding_time,JSON_UNESCAPED_UNICODE); //返回测试的数据 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /DataVisualization/APP_Start_Time.php: -------------------------------------------------------------------------------- 1 | "; 35 | //截取到的字符串为17:26:11 36 | $row[0] = substr($row[0], -8,2);//从倒数第八位,往后取两个字符串 37 | //echo $row[0]."
"; 38 | //将字符串17:26:11 转换为数字 后 得到17 39 | $num = (int)($row[0]); 40 | //echo ($num)."
"; 41 | 42 | if (0 <= $num && $num < 2){ 43 | $num_00++; 44 | }elseif (2 <= $num && $num < 4){ 45 | $num_02++; 46 | }elseif (4 <= $num && $num < 6){ 47 | $num_04++; 48 | }elseif (6 <= $num && $num < 8){ 49 | $num_06++; 50 | }elseif (8 <= $num && $num < 10){ 51 | $num_08++; 52 | }elseif (10 <= $num && $num < 12){ 53 | $num_10++; 54 | }elseif (12 <= $num && $num < 14){ 55 | $num_12++; 56 | }elseif (14 <= $num && $num < 16){ 57 | $num_14++; 58 | }elseif (16 <= $num && $num < 18){ 59 | $num_16++; 60 | }elseif (18 <= $num && $num < 20){ 61 | $num_18++; 62 | }elseif (20 <= $num && $num < 22){ 63 | $num_20++; 64 | }elseif (22 <= $num && $num < 24){ 65 | $num_22++; 66 | } 67 | 68 | } 69 | 70 | 71 | 72 | 73 | 74 | $start_app_time[0] = array("name"=>"00:00","value"=>$num_00); 75 | $start_app_time[1] = array("name"=>"02:00","value"=>$num_02); 76 | $start_app_time[2] = array("name"=>"04:00","value"=>$num_04); 77 | $start_app_time[3] = array("name"=>"06:00","value"=>$num_06); 78 | $start_app_time[4] = array("name"=>"08:00","value"=>$num_08); 79 | $start_app_time[5] = array("name"=>"10:00","value"=>$num_10); 80 | $start_app_time[6] = array("name"=>"12:00","value"=>$num_12); 81 | $start_app_time[7] = array("name"=>"14:00","value"=>$num_14); 82 | $start_app_time[8] = array("name"=>"16:00","value"=>$num_16); 83 | $start_app_time[9] = array("name"=>"18:00","value"=>$num_18); 84 | $start_app_time[10] = array("name"=>"20:00","value"=>$num_20); 85 | $start_app_time[11] = array("name"=>"22:00","value"=>$num_22); 86 | 87 | 88 | 89 | echo json_encode($start_app_time,JSON_UNESCAPED_UNICODE); //返回测试的数据 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /DataVisualization/Android_Screen_Resolution.php: -------------------------------------------------------------------------------- 1 | $row['province'], 15 | 'value' => $row['gdp'] 16 | ); 17 | } */ 18 | 19 | //从数据库中查询数据 20 | 21 | $sql = "select device_screen_resolution from user_info_android"; //选择存储离线文件的数据表 user_info_android ,只选取Android_Screen_Resolution 22 | $query = mysql_query($sql); //$query是资源标识符 就是指针 23 | 24 | 25 | //定义存储不同型号系统数量的变量 26 | $num_720p_l = 0; 27 | $num_720p = 0; 28 | $num_1080p = 0; 29 | $num_1080p_h = 0; 30 | $num_ELSE = 0; 31 | 32 | while ($row = mysql_fetch_row($query)){ 33 | //echo $row[0]."
"; 34 | //$row[0]转换为数字 480 * 800 转换为了 480 35 | $num = (int) $row[0]; 36 | //echo $row[0]."
"; 37 | switch ($num){ 38 | case $num<720 : 39 | $num_720p_l++; 40 | break; 41 | 42 | case '720': 43 | $num_720p++; 44 | break; 45 | 46 | case '1080': 47 | $num_1080p++; 48 | break; 49 | 50 | case $num>1080 : 51 | $num_1080p_h++; 52 | break; 53 | 54 | default: 55 | $num_ELSE++; 56 | break; 57 | } 58 | } 59 | 60 | 61 | $android_screen_resolution_times[0] = array("name"=>"720P-","value"=>$num_720p_l); 62 | $android_screen_resolution_times[1] = array("name"=>"720P","value"=>$num_720p); 63 | $android_screen_resolution_times[2] = array("name"=>"1080P","value"=>$num_1080p); 64 | $android_screen_resolution_times[3] = array("name"=>"1080P+","value"=>$num_1080p_h); 65 | $android_screen_resolution_times[4] = array("name"=>"其他","value"=>$num_ELSE); 66 | 67 | 68 | 69 | echo json_encode($android_screen_resolution_times,JSON_UNESCAPED_UNICODE); //返回测试的数据 70 | 71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /DataVisualization/Android_Version.php: -------------------------------------------------------------------------------- 1 | $row['province'], 14 | 'value' => $row['gdp'] 15 | ); 16 | } */ 17 | 18 | //从数据库中查询数据 19 | 20 | $sql = "select android_version from user_info_android"; //选择存储离线文件的数据表 user_info_android ,只选取安卓版本 21 | $query = mysql_query($sql); //$query是资源标识符 就是指针 22 | 23 | 24 | //定义存储不同型号系统数量的变量 25 | $num_4_0 = 0; 26 | $num_4_1 = 0; 27 | $num_4_2 = 0; 28 | $num_4_3 = 0; 29 | $num_4_4 = 0; 30 | $num_5_0 = 0; 31 | $num_5_1 = 0; 32 | $num_6_0 = 0; 33 | $num_7_0 = 0; 34 | $num_ELSE = 0; 35 | 36 | while ($row = mysql_fetch_row($query)){ 37 | 38 | $row[0] = substr($row[0], 0,3);//截取字符串,例如5.1.1 截取5.1 6.0.1 截取6.0 39 | //echo $row[0]."
"; 40 | 41 | switch ($row[0]){ 42 | case '4.0': 43 | $num_4_0++; 44 | break; 45 | 46 | case '4.1': 47 | $num_4_1++; 48 | break; 49 | 50 | case '4.2': 51 | $num_4_2++; 52 | break; 53 | 54 | case '4.3': 55 | $num_4_3++; 56 | break; 57 | 58 | case '4.4': 59 | $num_4_4++; 60 | break; 61 | 62 | case '5.0': 63 | $num_5_0++; 64 | break; 65 | 66 | case '5.1': 67 | $num_5_1++; 68 | break; 69 | 70 | case '6.0': 71 | $num_6_0++; 72 | break; 73 | 74 | case '7.0': 75 | $num_7_0++; 76 | break; 77 | 78 | default: 79 | $num_ELSE++; 80 | break; 81 | } 82 | } 83 | 84 | 85 | $android_version_times[0] = array("name"=>"4.0","value"=>$num_4_0); 86 | $android_version_times[1] = array("name"=>"4.1","value"=>$num_4_1); 87 | $android_version_times[2] = array("name"=>"4.2","value"=>$num_4_2); 88 | $android_version_times[3] = array("name"=>"4.3","value"=>$num_4_3); 89 | $android_version_times[4] = array("name"=>"4.4","value"=>$num_4_4); 90 | $android_version_times[5] = array("name"=>"5.0","value"=>$num_5_0); 91 | $android_version_times[6] = array("name"=>"5.1","value"=>$num_5_1); 92 | $android_version_times[7] = array("name"=>"6.0","value"=>$num_6_0); 93 | $android_version_times[8] = array("name"=>"7.0","value"=>$num_7_0); 94 | $android_version_times[9] = array("name"=>"其他","value"=>$num_ELSE); 95 | 96 | 97 | 98 | echo json_encode($android_version_times,JSON_UNESCAPED_UNICODE); //返回测试的数据 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /DataVisualization/DataVisualization_index.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 灵动快传数据可视化分析 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 40 | 41 | 42 | 80 | 81 | 82 | 83 | 84 | 85 | 117 | 118 |
119 | 120 |
121 | 133 | 134 | 135 | 136 |
137 | 138 |
139 |

功能模块使用频率

140 | 141 |
142 | 143 | 144 | 145 |
146 |

147 | 上述表格显示的是移动端APP各个功能模块的使用情况。
148 | 表格数据分析结果
149 | 1.APP端可大致分为13个功能模块,其中“连接电脑”、“创建连接”、“搜索加入”三个模块的使用率相对较高。
150 | 2.“离线文件”的功能使用频率相对较低。
151 | 结论
152 | 1.“连接电脑”、“创建连接”、“搜索加入”三个模块的使用率相对较高,这也符合我们APP的核心定位——“面对面文件快传”。
153 | 2.我们新添加的“离线文件”功能使用率不是太高,原因应该是消耗用户流量过多。
154 | 3.用户更愿意使用不消耗流量的文件分享方式————“面对面文件快传”。
155 | :APP端的“文件漂流瓶”功能与网页端的文件上传下载文件是同一个功能,两者是一体的。 156 |

157 |
158 | 159 | 160 |
161 | 162 | 163 | 164 |
165 |

传输文件类型分析

166 | 167 |
168 | 169 | 170 | 171 | 172 |

173 | 上述表格显示的是整个系统中用户传输文件类型的分析结果。
174 | 表格数据分析结果
175 | 1.表格上面列举了日常生活中常见文件的后缀名,及整个传输系统中相应后缀名文件的个数。
176 | 2.从结果上看,除去系统测试时上传一定量的类型为“其他”的文件外,用户上传最多的文件就是图片,其次就是文本文件。
177 | 结论
178 | 1.后期可更有针对性的完善与图片有关的功能。 179 | 2.txt文档也占比较大,可以做一个在线记事本,编辑好文本文件后直接存到服务器返回给用户一个文件提取码等等。
180 | :DOCX、PPTX、XLSX、WPS、RAR类型的文件相应的并入了DOC、PPT、XLS、DOC、ZIP里面。 181 |

182 | 183 | 184 |
185 | 186 | 187 | 188 | 189 |
190 |

传输文件大小分析

191 | 192 |
193 | 194 | 195 | 196 |

197 | 上述表格显示的是整个系统中用户传输文件的大小的分析结果。
198 | 表格数据分析结果
199 | 1.表格X轴给出的是从1M到40M不等分的若干区间,Y轴给出的则是整个系统用户传输的相应区间文件的数量。
200 | 2.从表格数据可知,绝大多数文件均在3M以下。6M-20M之间的文件也占用一定比例。
201 | 结论
202 | 1.用户在使用的时候,更多的还是在传输小数据量的文件。
203 | 2.根据用户传输小文件的使用行为,后期我们也可以加入例如 “DOC -> HTML” 这样的功能,用户上传一份word文档,我们直接在线转换为一个排版好了的在线网页。
204 | :由于使用的阿里云的服务器规格所限,服务器出口带宽比较小,我们将离线文件最大传输限制设定为了120M,即单个最大离线文件大小不得超过120M。 205 |

206 | 207 | 208 |
209 | 210 | 211 | 212 |
213 |

APP启动时间分析

214 | 215 |
216 | 217 | 218 | 219 |

220 | 上述表格显示的是用户启动APP的时间点的分析结果。
221 | 表格数据分析结果
222 | 1.X轴显示的是一天24小时,Y轴则是用户在这些时间段启动APP的次数。
223 | 2.从表格上可以看出,早上8点过后用户开始一整天的日常生活,10点到12点是我们APP使用的一个小高峰,下午的14点到16点又是另一个小高峰,晚上20点左右则是APP使用的最高峰。
224 | 结论
225 | 1.我们的用户基本在傍晚使用APP。
226 | 2.根据上述结论后续可以增添一些人性化的提示,例如太晚了提醒用户早点休息之类的小功能等等。
227 | :表格X轴,10:00处的数据表示的是10:00-12:00间用户启动APP的次数,以此类推。 228 |

229 | 230 | 231 |
232 | 233 | 234 | 235 |
236 |
237 |

APP使用时长分析

238 | 239 |
240 | 241 | 242 | 243 |

244 | 上述表格显示的是用户停留在APP的时长的分析结果。
245 | 表格数据分析结果
246 | 1.X轴显示的是不同的时间段长度,Y轴则是用户停留在这些时间段的次数。
247 | 2.从表格上可以看出,绝大多数时候用户只在APP内停留了不到三分钟就退出APP了。
248 | 结论
249 | 1.作为一个工具类的APP,用户用完了就退出也无可厚非,停留的时间短也可以理解,但我们可以增添一些其他的功能来“留住用户”,增加用户的粘性,用户在APP内停留的时间越长,APP的潜在价值也就越高。
250 | :无。 251 |

252 | 253 | 254 |
255 | 256 | 257 | 258 |
259 | 260 |

安卓手机版本分布

261 | 262 |
263 | 264 | 265 | 266 |

267 | 上述饼图显示的是用户群Android端系统版本分析结果。
268 | 表格数据分析结果
269 | 1.饼图中Android 5.x 及以上的用户占了绝大多数,其次就是4.x,基本没有4.0以下的用户。
270 | 结论
271 | 1.我们可以更加有针对性的来完善我们的APP,5.x及以上的用户群体最大,可以把最主要的精力放在适配5.x及以上的系统上面来。
272 | :无。 273 |

274 |
275 | 276 | 277 | 278 |
279 |

客户端分辨率分布

280 | 281 |
282 | 283 | 284 |

285 | 上述饼图显示的是用户群Android端手机分辨率的分析结果。
286 | 表格数据分析结果
287 | 1.饼图中720P以及1080P的屏幕占了绝大多数。
288 | 2.高分辨率设备已经是市场的主流了。
289 | 结论
290 | 1.根据上述统计结果,我们可以更加有针对性的快速的调整UI开发适配重点,进而提高工作效率。
291 | :图中720P-表示分辨率低于720P,1080P+表示分辨率高于1080P。 292 |

293 |
294 | 295 | 296 | 297 |
298 |

数据可视化小总结

299 |

300 | 在我们的APP开发进度能全权掌控的情况下,团队选择了做数据这一块,我们收集了大量关于用户使用行为的数据都存储在我们租用的阿里云的服务器上面,只从中抽取了若干点来做可视化的展示。
301 | 上述数据可视化采用的是百度开源的纯JS数据可视化工具Echarts。
302 | 我们认为在现今的“大数据”时代,数据就是财富,掌握了数据,就可以掌握用户行为规律以及整个市场的动态,数据就是驱动信息化产业的动力所在。 303 |

304 |
305 | 306 | 307 | 308 |
309 | 310 |
311 | 312 |
313 |
314 | 315 | 316 | 339 | 340 | 341 | -------------------------------------------------------------------------------- /DataVisualization/Files_Trans_Size.php: -------------------------------------------------------------------------------- 1 | $row['province'], 14 | 'value' => $row['gdp'] 15 | ); 16 | } */ 17 | 18 | //从数据库中查询数据 19 | 20 | $sql = "select size from fileinfo"; //选择存储离线文件的数据表 fileinfo ,只选取文件大小 21 | $query = mysql_query($sql); //$query是资源标识符 就是指针 22 | 23 | 24 | //定义存储每一种类型文件的变量 25 | $num_1M = 0; //1024*1024 26 | $num_2M = 0; //2048*1024 27 | $num_3M = 0; //3072*1024 28 | $num_4M = 0; //4096*1024 29 | $num_5M = 0; //5120*1024 30 | $num_6M = 0; //6144*1024 31 | $num_8M = 0; //8192*1024 32 | $num_10M = 0; //10240*1024 33 | $num_20M = 0; //20480*1024 34 | $num_30M = 0; //30720*1024 35 | $num_40M = 0; //40960*1024 36 | $num_ELSE = 0; 37 | 38 | //下面是离线文件数据表 fileinfo 中的数据 39 | while ($row = mysql_fetch_row($query)){ 40 | 41 | //echo $num; 42 | //将字符串$num转换为数字 43 | $num = (int)($row[0]);//intval() 44 | //echo $num."aaaa"; 45 | //echo 5555 < $num && $num <= 10024; 46 | //echo "
"; 47 | 48 | if ( $num <= 1024*1024){ 49 | $num_1M++; 50 | }elseif (1024*1024 < $num && $num <= 2048*1024){ 51 | $num_2M++; 52 | }elseif (2048*1024 < $num && $num <= 3072*1024){ 53 | $num_3M++; 54 | }elseif (3072*1024 < $num && $num <= 4096*1024){ 55 | $num_4M++; 56 | }elseif (4096*1024 < $num && $num <= 5120*1024){ 57 | $num_5M++; 58 | }elseif (5120*1024 < $num && $num <= 6144*1024){ 59 | $num_6M++; 60 | }elseif (6144*1024 < $num && $num <= 8192*1024){ 61 | $num_8M++; 62 | }elseif (8192*1024 < $num && $num <= 10240*1024){ 63 | $num_10M++; 64 | }elseif (10240*1024 < $num && $num <= 20480*1024){ 65 | $num_20M++; 66 | }elseif (20480*1024 < $num && $num <= 30720*1024){ 67 | $num_30M++; 68 | }elseif (30720*1024 < $num && $num <= 40960*1024){ 69 | $num_40M++; 70 | }elseif (40960*1024 < $num ){ 71 | $num_ELSE++; 72 | } 73 | 74 | } 75 | 76 | 77 | 78 | 79 | $sql2 = "select files_size from user_using_files_trans_android"; //选择存储Android端文件传输信息的数据表 user_using_files_trans_android ,只选取文件大小 80 | $query2 = mysql_query($sql2); 81 | 82 | //下面是Android端之间,Android与电脑之间文件传递的数据 数据表为 user_using_files_trans_android 83 | while ($row2 = mysql_fetch_row($query2)){ 84 | 85 | //echo $row2[0]."
"; 86 | $num2 = (int)($row2[0]);//intval() 87 | //echo $num2."
"; 88 | 89 | if ( $num2 <= 1024*1024){ 90 | $num_1M++; 91 | }elseif (1024*1024 < $num2 && $num2 <= 2048*1024){ 92 | $num_2M++; 93 | }elseif (2048*1024 < $num2 && $num2 <= 3072*1024){ 94 | $num_3M++; 95 | }elseif (3072*1024 < $num2 && $num2 <= 4096*1024){ 96 | $num_4M++; 97 | }elseif (4096*1024 < $num2 && $num2 <= 5120*1024){ 98 | $num_5M++; 99 | }elseif (5120*1024 < $num2 && $num2 <= 6144*1024){ 100 | $num_6M++; 101 | }elseif (6144*1024 < $num2 && $num2 <= 8192*1024){ 102 | $num_8M++; 103 | }elseif (8192*1024 < $num2 && $num2 <= 10240*1024){ 104 | $num_10M++; 105 | }elseif (10240*1024 < $num2 && $num2 <= 20480*1024){ 106 | $num_20M++; 107 | }elseif (20480*1024 < $num2 && $num2 <= 30720*1024){ 108 | $num_30M++; 109 | }elseif (30720*1024 < $num2 && $num2 <= 40960*1024){ 110 | $num_40M++; 111 | }elseif (40960*1024 < $num2 ){ 112 | $num_ELSE++; 113 | } 114 | 115 | } 116 | 117 | 118 | //echo $num_1M."
"; 119 | //echo $num_2M; 120 | //echo $num_ZIP; 121 | //echo $num_TXT; 122 | //echo $num_ELSE; 123 | 124 | 125 | $files_trans_size_times[0] = array("name"=>"<1M","value"=>$num_1M); 126 | $files_trans_size_times[1] = array("name"=>"<2M","value"=>$num_2M); 127 | $files_trans_size_times[2] = array("name"=>"<3M","value"=>$num_3M); 128 | $files_trans_size_times[3] = array("name"=>"<4M","value"=>$num_4M); 129 | $files_trans_size_times[4] = array("name"=>"<5M","value"=>$num_5M); 130 | $files_trans_size_times[5] = array("name"=>"<6M","value"=>$num_6M); 131 | $files_trans_size_times[6] = array("name"=>"<8M","value"=>$num_8M); 132 | $files_trans_size_times[7] = array("name"=>"<10M","value"=>$num_10M); 133 | $files_trans_size_times[8] = array("name"=>"<20M","value"=>$num_20M); 134 | $files_trans_size_times[9] = array("name"=>"<30M","value"=>$num_30M); 135 | $files_trans_size_times[10] = array("name"=>"<40M","value"=>$num_40M); 136 | $files_trans_size_times[11] = array("name"=>"40M<","value"=>$num_ELSE); 137 | 138 | 139 | 140 | echo json_encode($files_trans_size_times,JSON_UNESCAPED_UNICODE); //返回测试的数据 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | -------------------------------------------------------------------------------- /DataVisualization/Files_Trans_Type.php: -------------------------------------------------------------------------------- 1 | $row['province'], 14 | 'value' => $row['gdp'] 15 | ); 16 | } */ 17 | 18 | //从数据库中查询数据 19 | 20 | $sql = "select type from fileinfo"; //选择存储离线文件的数据表 fileinfo ,只选取文件类型 21 | $query = mysql_query($sql); //$query是资源标识符 就是指针 22 | 23 | 24 | //定义存储每一种类型文件的变量 25 | $num_JPG = 0; 26 | $num_PNG = 0; 27 | $num_DOC = 0; 28 | $num_PPT = 0; 29 | $num_XLS = 0; 30 | $num_PDF = 0; 31 | $num_TXT = 0; 32 | $num_MP3 = 0; 33 | $num_ZIP = 0; 34 | $num_RAR = 0; 35 | $num_APK = 0; 36 | $num_EXE = 0; 37 | $num_ELSE = 0; 38 | 39 | //下面是离线文件数据表 fileinfo 中的数据 40 | while ($row = mysql_fetch_row($query)){ 41 | 42 | $row[0] = strtoupper($row[0]);//将字符串转换为大写 43 | //echo $row[0]."
"; 44 | 45 | switch ($row[0]){ 46 | case 'JPG': 47 | $num_JPG++; 48 | break; 49 | 50 | case 'PNG': 51 | $num_PNG++; 52 | break; 53 | 54 | case 'DOC': 55 | $num_DOC++; 56 | break; 57 | 58 | case 'DOCX': //DOCX也统计在DOC 59 | $num_DOC++; 60 | break; 61 | 62 | case 'PPT': 63 | $num_PPT++; 64 | break; 65 | 66 | case 'PPTX': //PPTX也统计在PPT 67 | $num_PPT++; 68 | break; 69 | 70 | case 'XLS': 71 | $num_XLS++; 72 | break; 73 | 74 | case 'XLSX': //XLSX也统计在XLS 75 | $num_XLS++; 76 | break; 77 | 78 | case 'PDF': 79 | $num_PDF++; 80 | break; 81 | 82 | case 'TXT': 83 | $num_TXT++; 84 | break; 85 | 86 | case 'MP3': 87 | $num_MP3++; 88 | break; 89 | 90 | case 'ZIP': 91 | $num_ZIP++; 92 | break; 93 | 94 | case 'RAR': //RAR也统计在ZIP 95 | $num_ZIP++; 96 | break; 97 | 98 | case 'APK': 99 | $num_APK++; 100 | break; 101 | 102 | case 'EXE': 103 | $num_EXE++; 104 | break; 105 | 106 | default: 107 | $num_ELSE++; 108 | break; 109 | } 110 | } 111 | 112 | 113 | 114 | 115 | $sql2 = "select files_type from user_using_files_trans_android"; //选择存储Android端文件传输信息的数据表 user_using_files_trans_android ,只选取文件类型 116 | $query2 = mysql_query($sql2); 117 | 118 | //下面是Android端之间,Android与电脑之间文件传递的数据 数据表为 user_using_files_trans_android 119 | while ($row2 = mysql_fetch_row($query2)){ 120 | 121 | $row2[0] = strtoupper($row2[0]);//将字符串转换为大写 122 | //echo $row2[0]."
"; 123 | 124 | switch ($row2[0]){ 125 | case 'JPG': 126 | $num_JPG++; 127 | break; 128 | 129 | case 'PNG': 130 | $num_PNG++; 131 | break; 132 | 133 | case 'DOC': 134 | $num_DOC++; 135 | break; 136 | 137 | case 'DOCX': //DOCX也统计在DOC 138 | $num_DOC++; 139 | break; 140 | 141 | case 'PPT': 142 | $num_PPT++; 143 | break; 144 | 145 | case 'PPTX': //PPTX也统计在PPT 146 | $num_PPT++; 147 | break; 148 | 149 | case 'XLS': 150 | $num_XLS++; 151 | break; 152 | 153 | case 'XLSX': //XLSX也统计在XLS 154 | $num_XLS++; 155 | break; 156 | 157 | case 'PDF': 158 | $num_PDF++; 159 | break; 160 | 161 | case 'TXT': 162 | $num_TXT++; 163 | break; 164 | 165 | case 'MP3': 166 | $num_MP3++; 167 | break; 168 | 169 | case 'ZIP': 170 | $num_ZIP++; 171 | break; 172 | 173 | case 'RAR': //RAR也统计在ZIP 174 | $num_ZIP++; 175 | break; 176 | 177 | case 'APK': 178 | $num_APK++; 179 | break; 180 | 181 | case 'EXE': 182 | $num_EXE++; 183 | break; 184 | 185 | default: 186 | $num_ELSE++; 187 | break; 188 | } 189 | } 190 | 191 | 192 | //echo $num_JPG; 193 | //echo $num_EXE; 194 | //echo $num_ZIP; 195 | //echo $num_TXT; 196 | //echo $num_ELSE; 197 | 198 | 199 | $files_trans_type_times[0] = array("name"=>"JPG","value"=>$num_JPG); 200 | $files_trans_type_times[1] = array("name"=>"PNG","value"=>$num_PNG); 201 | $files_trans_type_times[2] = array("name"=>"DOC","value"=>$num_DOC); 202 | $files_trans_type_times[3] = array("name"=>"PPT","value"=>$num_PPT); 203 | $files_trans_type_times[4] = array("name"=>"XLS","value"=>$num_XLS); 204 | $files_trans_type_times[5] = array("name"=>"PDF","value"=>$num_PDF); 205 | $files_trans_type_times[6] = array("name"=>"TXT","value"=>$num_TXT); 206 | $files_trans_type_times[7] = array("name"=>"MP3","value"=>$num_MP3); 207 | $files_trans_type_times[8] = array("name"=>"ZIP","value"=>$num_ZIP); 208 | $files_trans_type_times[9] = array("name"=>"APK","value"=>$num_APK); 209 | $files_trans_type_times[10] = array("name"=>"EXE","value"=>$num_EXE); 210 | $files_trans_type_times[11] = array("name"=>"其他","value"=>$num_ELSE); 211 | 212 | 213 | 214 | echo json_encode($files_trans_type_times,JSON_UNESCAPED_UNICODE); //返回测试的数据 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | -------------------------------------------------------------------------------- /DataVisualization/Modules_Using_Times.php: -------------------------------------------------------------------------------- 1 | $row['province'], 14 | 'value' => $row['gdp'] 15 | ); 16 | } */ 17 | 18 | //从数据库中查询数据 19 | 20 | $sql = "select offline_files_upload,offline_files_download,bluetooth_trans,share_app,files_manage,user_feedback,software_version,software_describe,about_us,user_android_version,connect_PC,create_connection,scan_to_join from user_using_modules_times_android"; //选择存储用户功能模块使用次数的数据表 user_using_modules_times_android 21 | $query = mysql_query($sql); //$query是资源标识符 就是指针 22 | 23 | //定义存储每一列数据,即记录各个模块使用次数的变量 24 | $num_offline_files_upload = 0; 25 | $num_offline_files_download = 0; 26 | $num_bluetooth_trans = 0; 27 | $num_share_app = 0; 28 | $num_files_manage = 0; 29 | $num_user_feedback = 0; 30 | $num_software_version = 0; 31 | $num_software_describe = 0; 32 | $num_about_us = 0; 33 | $num_user_android_version = 0; 34 | $num_connect_PC = 0; 35 | $num_create_connection = 0; 36 | $num_scan_to_join = 0; 37 | 38 | while ($row = mysql_fetch_row($query)){ 39 | //用以统计每一项的总数,数据量特别大的情况下,遍历数据表可能需要一定的时间 40 | $num_offline_files_upload = $row[0] + $num_offline_files_upload; 41 | $num_offline_files_download = $row[1] + $num_offline_files_download; 42 | $num_bluetooth_trans = $row[2] + $num_bluetooth_trans; 43 | $num_share_app = $row[3] + $num_share_app; 44 | $num_files_manage = $row[4] + $num_files_manage; 45 | $num_user_feedback = $row[5] + $num_user_feedback; 46 | $num_software_version = $row[6] + $num_software_version; 47 | $num_software_describe = $row[7] + $num_software_describe; 48 | $num_about_us = $row[8] + $num_about_us; 49 | $num_user_android_version = $row[9] + $num_user_android_version; 50 | $num_connect_PC = $row[10] + $num_connect_PC; 51 | $num_create_connection = $row[11] + $num_create_connection; 52 | $num_scan_to_join = $row[12] + $num_scan_to_join; 53 | } 54 | 55 | //echo $num_offline_files_upload; 56 | 57 | //Echarts 所需Json格式为 [{value:23,name:'xxxx' }] key 的名字不要写错 58 | /*"离线上传","离线下载","蓝牙传输","分享APP","文件管理","用户反馈","软件版本","软件描述","关于我们","安卓版本","连接电脑","创建连接","搜索加入"*/ 59 | $modules_using_times[0] = array("name"=>"离线上传","value"=>$num_offline_files_upload); 60 | $modules_using_times[1] = array("name"=>"离线下载","value"=>$num_offline_files_download); 61 | $modules_using_times[2] = array("name"=>"蓝牙传输","value"=>$num_bluetooth_trans); 62 | $modules_using_times[3] = array("name"=>"分享APP","value"=>$num_share_app); 63 | $modules_using_times[4] = array("name"=>"文件管理","value"=>$num_files_manage); 64 | $modules_using_times[5] = array("name"=>"用户反馈","value"=>$num_user_feedback); 65 | $modules_using_times[6] = array("name"=>"软件版本","value"=>$num_software_version); 66 | $modules_using_times[7] = array("name"=>"软件描述","value"=>$num_software_describe); 67 | $modules_using_times[8] = array("name"=>"关于我们","value"=>$num_about_us); 68 | $modules_using_times[9] = array("name"=>"安卓版本","value"=>$num_user_android_version); 69 | $modules_using_times[10] = array("name"=>"连接电脑","value"=>$num_connect_PC); 70 | $modules_using_times[11] = array("name"=>"创建连接","value"=>$num_create_connection); 71 | $modules_using_times[12] = array("name"=>"搜索加入","value"=>$num_scan_to_join); 72 | 73 | 74 | echo json_encode($modules_using_times,JSON_UNESCAPED_UNICODE); //返回测试的数据 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/APP_Holding_Time.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/11. 3 | */ 4 | 5 | 6 | 7 | 8 | 9 | // 基于准备好的dom,初始化echarts实例 10 | var myChart = echarts.init(document.getElementById('APP_Holding_Time')); 11 | 12 | // 指定图表的配置项和数据 13 | var option = { 14 | 15 | color: ['#E066FF'], 16 | 17 | grid: { 18 | x:30, 19 | x2:30 20 | }, 21 | title: { 22 | text: 'APP使用时长统计表', 23 | subtext: '数据来源灵动快传平台(单位:次)', 24 | sublink: 'http://115.28.101.196/' 25 | }, 26 | tooltip: { //提示工具 27 | trigger : 'axis', 28 | axisPointer : { // 坐标轴指示器,坐标轴触发有效 29 | type : 'shadow' // 默认为直线,可选为:'line' | 'shadow' 30 | }, 31 | show: true 32 | }, 33 | toolbox: { 34 | feature: { 35 | dataView: {show: true, readOnly: false}, 36 | magicType: {show: true, type: ['line', 'bar']}, 37 | restore: {show: true}, 38 | saveAsImage: {show: true} 39 | } 40 | }, 41 | legend: { 42 | data:['停留在相应时间段总次数'] 43 | }, 44 | xAxis: { 45 | type : 'category', 46 | data: ["0-1m","1m-2m","2m-3m","3m-4m","4m-5m","5m-6m","6m-7m","7m-8m","8m-9m","9m-10m","10m以上"] 47 | /*xAxis的data:用于设置x轴的刻度之用,类型为字符串数组,"创建连接","搜索加入"*/ 48 | }, 49 | 50 | yAxis: [ 51 | { 52 | type : 'value' 53 | } 54 | ], 55 | 56 | series: [{ 57 | name: '停留在相应时间段总次数', 58 | type: 'bar', 59 | data: []/*5,9,5,4,21,18,15,17,25,50,78*/ 60 | }] 61 | }; 62 | 63 | 64 | 65 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 66 | myChart.showLoading(); 67 | myChart.setOption(option); 68 | 69 | // 异步加载数据 70 | $.ajax({ 71 | type: "post", 72 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 73 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 74 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/APP_Holding_Time.php", 75 | url: "http://115.28.101.196/DataVisualization/APP_Holding_Time.php", 76 | dataType: "json", //返回数据形式为json 77 | //data: {rnd:Math.random()}, 78 | success: function(result) { 79 | console.log("么么哒 么么哒00000000000000000000000000000000000"); 80 | console.log(result); 81 | myChart.hideLoading(); 82 | myChart.setOption({ 83 | 84 | series: [{ 85 | // 根据名字对应到相应的系列 86 | //name: '功能模块使用频率统计表', 87 | type: 'bar', 88 | data: result 89 | }] 90 | }); 91 | }, 92 | error: function(errorMsg) { 93 | alert("APP_Holding_Time 请求数据失败!"); 94 | } 95 | }); 96 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/APP_Start_Time.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/10. 3 | */ 4 | 5 | 6 | 7 | // 基于准备好的dom,初始化echarts实例 8 | var myChart = echarts.init(document.getElementById('APP_Start_Time')); 9 | 10 | // 指定图表的配置项和数据 11 | var option = { 12 | 13 | color: ['#FF8247'], 14 | 15 | grid: { 16 | x:30, 17 | x2:30 18 | }, 19 | title: { 20 | text: 'APP启动时间统计表', 21 | subtext: '数据来源灵动快传平台(单位:次)', 22 | sublink: 'http://115.28.101.196/' 23 | }, 24 | tooltip: { //提示工具 25 | trigger : 'axis', 26 | axisPointer : { // 坐标轴指示器,坐标轴触发有效 27 | type : 'line' // 默认为直线,可选为:'line' | 'shadow' 28 | }, 29 | show: true 30 | }, 31 | toolbox: { 32 | feature: { 33 | dataView: {show: true, readOnly: false}, 34 | magicType: {show: true, type: ['line', 'bar']}, 35 | restore: {show: true}, 36 | saveAsImage: {show: true} 37 | } 38 | }, 39 | legend: { 40 | data:['APP启动次数'] 41 | }, 42 | xAxis: { 43 | type : 'category', 44 | data: ["00:00","02:00","04:00","06:00","08:00","10:00","12:00","14:00","16:00","18:00","20:00","22:00"] 45 | /*"离线上传","离线下载","蓝牙传输","分享APP","文件管理","用户反馈","软件版本","软件描述","关于我们","安卓版本","连接电脑","创建连接","搜索加入"*/ 46 | /*xAxis的data:用于设置x轴的刻度之用,类型为字符串数组*/ 47 | }, 48 | 49 | yAxis: [ 50 | { 51 | type : 'value' 52 | } 53 | ], 54 | 55 | series: [{ 56 | name: 'APP启动次数', 57 | type: 'line', 58 | data: []/*5,9,5,4,21,18,15,17,25,50,78,54,22*/ 59 | }] 60 | }; 61 | 62 | 63 | 64 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 65 | myChart.showLoading(); 66 | myChart.setOption(option); 67 | 68 | // 异步加载数据 69 | $.ajax({ 70 | type: "post", 71 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 72 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 73 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/APP_Start_Time.php", 74 | url: "http://115.28.101.196/DataVisualization/APP_Start_Time.php", 75 | dataType: "json", //返回数据形式为json 76 | //data: {rnd:Math.random()}, 77 | success: function(result) { 78 | console.log("这里是传输文件类型的脚本00000000000000000000000000000000000"); 79 | console.log(result); 80 | myChart.hideLoading(); 81 | myChart.setOption({ 82 | 83 | series: [{ 84 | // 根据名字对应到相应的系列 85 | //name: '功能模块使用频率统计表', 86 | type: 'line', 87 | data: result 88 | }] 89 | }); 90 | }, 91 | error: function(errorMsg) { 92 | alert("APP_Start_Time 请求数据失败!"); 93 | } 94 | }); 95 | 96 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/Android_Screen_Resolution.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/11. 3 | */ 4 | 5 | 6 | 7 | // 基于准备好的dom,初始化echarts实例 8 | var myChart = echarts.init(document.getElementById('Android_Screen_Resolution')); 9 | 10 | // 指定图表的配置项和数据 11 | var option = { 12 | 13 | title: { 14 | text: '安卓客户端分辨率统计表', 15 | subtext: '数据来源灵动快传平台(单位:个)', 16 | x: 'left', 17 | sublink: 'http://115.28.101.196/' 18 | }, 19 | tooltip: { //提示工具 20 | trigger : 'item', 21 | formatter: "{a}
{b} : {c} ({d}%)" 22 | }, 23 | legend: { 24 | orient: 'vertical', 25 | left: 'right', 26 | data: ['720P-','720P','1080P','1080P+','其他'] 27 | }, 28 | series: [{ 29 | name: '各分辨率用户总个数', 30 | type: 'pie', 31 | radius : '55%', 32 | data: [], 33 | 34 | center: ['50%', '50%'], 35 | itemStyle: { 36 | emphasis: { 37 | shadowBlur: 10, 38 | shadowOffsetX: 0, 39 | shadowColor: 'rgba(0, 0, 0, 0.5)' 40 | } 41 | } 42 | }] 43 | }; 44 | 45 | 46 | 47 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 48 | myChart.showLoading(); 49 | myChart.setOption(option); 50 | 51 | // 异步加载数据 52 | $.ajax({ 53 | type: "post", 54 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 55 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 56 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/Android_Screen_Resolution.php", 57 | url: "http://115.28.101.196/DataVisualization/Android_Screen_Resolution.php", 58 | dataType: "json", //返回数据形式为json 59 | //data: {rnd:Math.random()}, 60 | success: function(result) { 61 | console.log("00000000000000000000000000000000000"); 62 | console.log(result); 63 | myChart.hideLoading(); 64 | myChart.setOption({ 65 | 66 | series: [{ 67 | // 根据名字对应到相应的系列 68 | //name: '功能模块使用频率统计表', 69 | type: 'pie', 70 | //itemStyle:{normal:{color:'#6A5ACD'}}, 71 | color:['#ff5900','#b70094','#00a876','#ef002a','#5e0dac'], /*,'#5fd4b1','#0d56a6','#4dde00','#2209b2','#58e000'*/ 72 | data: result, 73 | itemStyle: { 74 | normal: { 75 | shadowBlur: 200, 76 | shadowColor: 'rgba(0, 0, 0, 0.5)' 77 | } 78 | } 79 | } 80 | ] 81 | }); 82 | }, 83 | error: function(errorMsg) { 84 | alert("Files_Trans_Type 请求数据失败!"); 85 | } 86 | }); 87 | 88 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/Android_Version.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/11. 3 | */ 4 | 5 | 6 | 7 | 8 | // 基于准备好的dom,初始化echarts实例 9 | var myChart = echarts.init(document.getElementById('Android_Version')); 10 | 11 | // 指定图表的配置项和数据 12 | var option = { 13 | 14 | title: { 15 | text: '安卓手机版本统计表', 16 | subtext: '数据来源灵动快传平台(单位:个)', 17 | x: 'left', 18 | sublink: 'http://115.28.101.196/' 19 | }, 20 | tooltip: { //提示工具 21 | trigger : 'item', 22 | formatter: "{a}
{b} : {c} ({d}%)" 23 | }, 24 | legend: { 25 | orient: 'vertical', 26 | left: 'right', 27 | data: ['4.0','4.1','4.2','4.3','4.4','5.0','5.1','6.0','7.0','其他'] 28 | }, 29 | series: [{ 30 | name: '各版本用户总个数', 31 | type: 'pie', 32 | radius : '55%', 33 | data: [], 34 | 35 | center: ['50%', '50%'], 36 | itemStyle: { 37 | emphasis: { 38 | shadowBlur: 10, 39 | shadowOffsetX: 0, 40 | shadowColor: 'rgba(0, 0, 0, 0.5)' 41 | } 42 | } 43 | }] 44 | }; 45 | 46 | 47 | 48 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 49 | myChart.showLoading(); 50 | myChart.setOption(option); 51 | 52 | // 异步加载数据 53 | $.ajax({ 54 | type: "post", 55 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 56 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 57 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/Android_Version.php", 58 | url: "http://115.28.101.196/DataVisualization/Android_Version.php", 59 | dataType: "json", //返回数据形式为json 60 | //data: {rnd:Math.random()}, 61 | success: function(result) { 62 | console.log("这里是传输文件类型的脚本00000000000000000000000000000000000"); 63 | console.log(result); 64 | myChart.hideLoading(); 65 | myChart.setOption({ 66 | 67 | series: [{ 68 | // 根据名字对应到相应的系列 69 | //name: '功能模块使用频率统计表', 70 | type: 'pie', 71 | //itemStyle:{normal:{color:'#6A5ACD'}}, 72 | color:['#00a876','#5fd4b1','#0d56a6','#5e0dac','#4dde00','#ff5900','#b70094','#2209b2','#58e000','#ef002a'], 73 | data: result, 74 | itemStyle: { 75 | normal: { 76 | shadowBlur: 200, 77 | shadowColor: 'rgba(0, 0, 0, 0.5)' 78 | } 79 | } 80 | } 81 | ] 82 | }); 83 | }, 84 | error: function(errorMsg) { 85 | alert("Files_Trans_Type 请求数据失败!"); 86 | } 87 | }); 88 | 89 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/Files_Trans_Size.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/10. 3 | */ 4 | 5 | 6 | 7 | // 基于准备好的dom,初始化echarts实例 8 | var myChart = echarts.init(document.getElementById('Files_Trans_Size')); 9 | 10 | // 指定图表的配置项和数据 11 | var option = { 12 | 13 | grid: { 14 | x:50, 15 | x2:40 16 | }, 17 | title: { 18 | text: '传输文件大小分布统计表', 19 | subtext: '数据来源灵动快传平台(单位:个)', 20 | sublink: 'http://115.28.101.196/' 21 | }, 22 | tooltip: { //提示工具 23 | trigger : 'axis', 24 | axisPointer : { // 坐标轴指示器,坐标轴触发有效 25 | type : 'line' // 默认为直线,可选为:'line' | 'shadow' 26 | }, 27 | show: true 28 | }, 29 | toolbox: { 30 | feature: { 31 | dataView: {show: true, readOnly: false}, 32 | magicType: {show: true, type: ['line', 'bar']}, 33 | restore: {show: true}, 34 | saveAsImage: {show: true} 35 | } 36 | }, 37 | legend: { 38 | data:['各区间文件总个数','传输文件大小分布'] 39 | }, 40 | xAxis: { 41 | type : 'category', 42 | data: ["<1M","<2M","<3M","<4M","<5M","<6M","<8M","<10M","<20M","<30M","<40M","40M<"] 43 | /*xAxis的data:用于设置x轴的刻度之用,类型为字符串数组*/ 44 | }, 45 | 46 | yAxis: [ 47 | { 48 | type : 'value' 49 | }, 50 | 51 | ], 52 | 53 | series: [ 54 | { 55 | name: '各区间文件总个数', 56 | type: 'bar', 57 | itemStyle:{normal:{color:'#FF69B4'}}, 58 | data: []/*5,9,5,4,21,18,15,17,25,50,78,54,22*/ 59 | }, 60 | 61 | { 62 | name:'传输文件大小分布', 63 | itemStyle:{normal:{color:'#6A5ACD'}}, 64 | type:'line', 65 | data:[] 66 | } 67 | 68 | ] 69 | }; 70 | 71 | 72 | 73 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 74 | myChart.showLoading(); 75 | myChart.setOption(option); 76 | 77 | // 异步加载数据 78 | $.ajax({ 79 | type: "post", 80 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 81 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 82 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/Files_Trans_Size.php", 83 | url: "http://115.28.101.196/DataVisualization/Files_Trans_Size.php", 84 | dataType: "json", //返回数据形式为json 85 | //data: {rnd:Math.random()}, 86 | success: function(result) { 87 | console.log("这里是传输文件类型的脚本00000000000000000000000000000000000"); 88 | console.log(result); 89 | myChart.hideLoading(); 90 | myChart.setOption({ 91 | 92 | series: [ 93 | { 94 | // 根据名字对应到相应的系列 95 | //name: '功能模块使用频率统计表', 96 | type: 'bar', 97 | data: result 98 | }, 99 | 100 | { 101 | // 根据名字对应到相应的系列 102 | //name: '功能模块使用频率统计表', 103 | type: 'line', 104 | data: result 105 | }, 106 | 107 | ] 108 | }); 109 | }, 110 | error: function(errorMsg) { 111 | alert("Files_Trans_Size 请求数据失败!"); 112 | } 113 | }); 114 | 115 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/Files_Trans_Type.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/10. 3 | */ 4 | 5 | 6 | 7 | // 基于准备好的dom,初始化echarts实例 8 | var myChart = echarts.init(document.getElementById('Files_Trans_Type')); 9 | 10 | // 指定图表的配置项和数据 11 | var option = { 12 | 13 | color: ['#228B22'], 14 | 15 | grid: { 16 | x:30, 17 | x2:30 18 | }, 19 | title: { 20 | text: '传输文件类型统计表', 21 | subtext: '数据来源灵动快传平台(单位:个)', 22 | sublink: 'http://115.28.101.196/' 23 | }, 24 | tooltip: { //提示工具 25 | trigger : 'axis', 26 | axisPointer : { // 坐标轴指示器,坐标轴触发有效 27 | type : 'shadow' // 默认为直线,可选为:'line' | 'shadow' 28 | }, 29 | show: true 30 | }, 31 | toolbox: { 32 | feature: { 33 | dataView: {show: true, readOnly: false}, 34 | magicType: {show: true, type: ['line', 'bar']}, 35 | restore: {show: true}, 36 | saveAsImage: {show: true} 37 | } 38 | }, 39 | legend: { 40 | data:['各类型文件总个数'] 41 | }, 42 | xAxis: { 43 | type : 'category', 44 | data: ["JPG","PNG","DOC","PPT","XLS","PDF","TXT","MP3","ZIP","APK","EXE","其他"] 45 | /*"离线上传","离线下载","蓝牙传输","分享APP","文件管理","用户反馈","软件版本","软件描述","关于我们","安卓版本","连接电脑","创建连接","搜索加入"*/ 46 | /*xAxis的data:用于设置x轴的刻度之用,类型为字符串数组*/ 47 | }, 48 | 49 | yAxis: [ 50 | { 51 | type : 'value' 52 | } 53 | ], 54 | 55 | series: [{ 56 | name: '各类型文件总个数', 57 | type: 'bar', 58 | data: []/*5,9,5,4,21,18,15,17,25,50,78,54,22*/ 59 | }] 60 | }; 61 | 62 | 63 | 64 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 65 | myChart.showLoading(); 66 | myChart.setOption(option); 67 | 68 | // 异步加载数据 69 | $.ajax({ 70 | type: "post", 71 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 72 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 73 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/Files_Trans_Type.php", 74 | url: "http://115.28.101.196/DataVisualization/Files_Trans_Type.php", 75 | dataType: "json", //返回数据形式为json 76 | //data: {rnd:Math.random()}, 77 | success: function(result) { 78 | console.log("这里是传输文件类型的脚本00000000000000000000000000000000000"); 79 | console.log(result); 80 | myChart.hideLoading(); 81 | myChart.setOption({ 82 | 83 | series: [{ 84 | // 根据名字对应到相应的系列 85 | //name: '功能模块使用频率统计表', 86 | type: 'bar', 87 | data: result 88 | }] 89 | }); 90 | }, 91 | error: function(errorMsg) { 92 | alert("Files_Trans_Type 请求数据失败!"); 93 | } 94 | }); 95 | 96 | -------------------------------------------------------------------------------- /DataVisualization/MyJavaScript/Modules_Using_Times.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by 周博文 on 2016/8/8. 3 | */ 4 | 5 | // 基于准备好的dom,初始化echarts实例 6 | var myChart = echarts.init(document.getElementById('Modules_Using_Times')); 7 | 8 | // 指定图表的配置项和数据 9 | var option = { 10 | 11 | color: ['#3398DB'], 12 | 13 | grid: { 14 | x:30, 15 | x2:30 16 | }, 17 | title: { 18 | text: '功能模块使用频率统计表', 19 | subtext: '数据来源灵动快传平台(单位:次)', 20 | sublink: 'http://115.28.101.196/' 21 | }, 22 | tooltip: { //提示工具 23 | trigger : 'axis', 24 | axisPointer : { // 坐标轴指示器,坐标轴触发有效 25 | type : 'shadow' // 默认为直线,可选为:'line' | 'shadow' 26 | }, 27 | show: true 28 | }, 29 | toolbox: { 30 | feature: { 31 | dataView: {show: true, readOnly: false}, 32 | magicType: {show: true, type: ['line', 'bar']}, 33 | restore: {show: true}, 34 | saveAsImage: {show: true} 35 | } 36 | }, 37 | legend: { 38 | data:['功能模块使用总次数'] 39 | }, 40 | xAxis: { 41 | type : 'category', 42 | data: ["离线上传","离线下载","蓝牙传输","分享APP","文件管理","用户反馈","软件版本","软件描述","关于我们","安卓版本","连接电脑","创建连接","搜索加入"] 43 | /*"离线上传","离线下载","蓝牙传输","分享APP","文件管理","用户反馈","软件版本","软件描述","关于我们","安卓版本","连接电脑","创建连接","搜索加入"*/ 44 | /*xAxis的data:用于设置x轴的刻度之用,类型为字符串数组*/ 45 | }, 46 | 47 | yAxis: [ 48 | { 49 | type : 'value' 50 | } 51 | ], 52 | 53 | series: [{ 54 | name: '功能模块使用总次数', 55 | type: 'bar', 56 | data: []/*5,9,5,4,21,18,15,17,25,50,78,54,22*/ 57 | }] 58 | }; 59 | 60 | 61 | 62 | //预加载动画,可以设置为当数据加载成功时隐藏此项,即不消失加载的动画 63 | myChart.showLoading(); 64 | myChart.setOption(option); 65 | 66 | // 异步加载数据 67 | $.ajax({ 68 | type: "post", 69 | async: false, //设置为同步执行,同一个页面多个ajax请求会出现阻塞,因而设置为同步执行,不过同步执行,页面会出现假死现象 70 | cache: false, //设置为false将不会从浏览器缓存中加载请求信息 71 | //url: "http://192.168.1.147/offlinetrans/DataVisualization/Modules_Using_Times.php", 72 | url: "http://115.28.101.196/DataVisualization/Modules_Using_Times.php", 73 | dataType: "json", //返回数据形式为json 74 | //data: {rnd:Math.random()}, 75 | success: function(result) { 76 | console.log("么么哒 么么哒00000000000000000000000000000000000"); 77 | console.log(result); 78 | myChart.hideLoading(); 79 | myChart.setOption({ 80 | 81 | series: [{ 82 | // 根据名字对应到相应的系列 83 | //name: '功能模块使用频率统计表', 84 | type: 'bar', 85 | data: result 86 | }] 87 | }); 88 | }, 89 | error: function(errorMsg) { 90 | alert("Modules_Using_Times 请求数据失败!"); 91 | } 92 | }); 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | /* 101 | getChartData();//ajax后台交互 102 | 103 | 104 | function getChartData() { 105 | //获得图表的options对象 106 | var options = myChart.getOption(); 107 | 108 | 109 | //使用jQuery的Ajax()来异步请求数据 110 | $.ajax({ 111 | type: "post", 112 | async: true, //异步执行,同步执行可能会出现小小的问题 同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行 113 | url: "http://192.168.1.147/offlinetrans/DataVisualization/Modules_Using_Times.php", 114 | datatype: "json", //返回数据形式为json 115 | //cache: false, //设置为false将不会从浏览器缓存中加载请求信息 116 | 117 | //jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback) 118 | //jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名 119 | 120 | //data: {rnd:Math.random()}, 121 | success: function(result) { 122 | console.log(result); 123 | //myChart.hideLoading(); //隐藏加载动画 124 | 125 | /!**将服务器返回的json数据传给前台的js显示出来,用轮询*!/ 126 | /!*for(var i = 0 ; i < result.length ; i++ ){ 127 | xAxis[i].push(result[i].name); 128 | data[i].push(result[i].value); 129 | }*!/ 130 | if(result) { 131 | 132 | options.legend.data = result.legend; 133 | options.xAxis[0].data = result.category; 134 | options.series[0].data = result.series[0].data; 135 | 136 | myChart.hideLoading(); 137 | myChart.setOption(options); 138 | } 139 | 140 | 141 | 142 | /!*myChart.setOption({ //渲染数据 143 | 144 | 145 | xAxis: { 146 | data: result.names 147 | }, 148 | series: [{ 149 | // 根据名字对应到相应的系列 150 | data: result.values 151 | }] 152 | 153 | });*!/ 154 | 155 | 156 | }, 157 | error: function() { 158 | alert("Modules_Using_Times 请求数据失败!!!"); 159 | } 160 | }); 161 | 162 | } 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | // 使用刚指定的配置项和数据显示图表,渲染图标。 171 | myChart.setOption(option); 172 | */ 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /DatabaseScript/User_Info_Android.php: -------------------------------------------------------------------------------- 1 | key这种方式访问值,也可以像我这样用【】访问,不过 第二个变量要设置为 true 8 | 9 | 10 | 11 | $_id = $obj['_id'];//这是 Android sqlite 数据表的ID字段 12 | $device_id = $obj['device_id']; 13 | $android_version = $obj['android_version']; 14 | $device_brand = $obj['device_brand']; 15 | $device_model = $obj['device_model']; 16 | $device_memory = $obj['device_memory']; 17 | $device_CPU = $obj['device_CPU']; 18 | $device_screen_resolution = $obj['device_screen_resolution']; 19 | 20 | 21 | $sql = "insert into user_info_android(device_id,android_version,device_brand,device_model,device_memory,device_CPU,device_screen_resolution) values ('$device_id','$android_version','$device_brand','$device_model','$device_memory','$device_CPU','$device_screen_resolution')"; 22 | 23 | //查找数据库,检查一下数据库中是否已经存在此条信息,如果已经存在,就不再插入,如果没有,就插入一条新的数据 24 | $sql1 = "select * from user_info_android where device_id = '$device_id'"; 25 | //将查找到的那一行赋值给$query作为资源标识符 26 | $query1 = mysql_query($sql1); 27 | //echo $query; 28 | //获取资源标识符$query所指向的对象,也就是所要查找的这一行 29 | $arr1 = mysql_fetch_object($query1); 30 | //如果没有查找到对应的对象,则说明数据库中没有这条数据 31 | if($arr1 == NULL){ 32 | mysql_query($sql); 33 | echo $sql; 34 | } 35 | 36 | 37 | 38 | 39 | 40 | //向数据库中添加数据 41 | //$insertsql = "insert into feedback(username,useremail,usersuggestion,uploadIP,dateline) values ('$username','$useremail','$usersuggestion','$uploaderIP','$dateline')"; 42 | //echo $insertsql; 43 | //mysql_query($insertsql); 44 | //echo "000000000000"; 45 | 46 | 47 | 48 | //echo var_dump($obj); 49 | echo "这里是 User_Info_Android 数据表的服务端接口!"; 50 | -------------------------------------------------------------------------------- /DatabaseScript/User_Using_Files_Trans_Android.php: -------------------------------------------------------------------------------- 1 | key这种方式访问值,也可以像我这样用【】访问,不过 第二个变量要设置为 true 7 | 8 | 9 | $_id = $obj['_id'];//这是 Android sqlite 数据表的ID字段 10 | $device_id = $obj['device_id']; 11 | $files_name = $obj['files_name']; 12 | $files_type = $obj['files_type']; 13 | $files_size = $obj['files_size']; 14 | $trans_time = $obj['trans_time']; 15 | 16 | $sql = "insert into user_using_files_trans_android(device_id,files_name,files_type,files_size,trans_time) values ('$device_id','$files_name','$files_type','$files_size','$trans_time')"; 17 | 18 | mysql_query($sql); 19 | //echo $sql; 20 | 21 | 22 | echo " 这里是 User_Using_Files_Trans_Android 数据表的服务端接口!"; -------------------------------------------------------------------------------- /DatabaseScript/User_Using_Modules_Times_Android.php: -------------------------------------------------------------------------------- 1 | key这种方式访问值,也可以像我这样用【】访问,不过 第二个变量要设置为 true 7 | 8 | 9 | $_id = $obj['_id'];//这是 Android sqlite 数据表的ID字段 10 | $device_id = $obj['device_id']; 11 | $offline_files_upload = $obj['offline_files_upload']; 12 | $offline_files_download = $obj['offline_files_download']; 13 | $bluetooth_trans = $obj['bluetooth_trans']; 14 | $share_app = $obj['share_app']; 15 | $files_manage = $obj['files_manage']; 16 | $user_feedback = $obj['user_feedback']; 17 | $software_version = $obj['software_version']; 18 | $software_describe = $obj['software_describe']; 19 | $about_us = $obj['about_us']; 20 | $user_android_version = $obj['user_android_version']; 21 | $connect_PC = $obj['connect_PC']; 22 | $create_connection = $obj['create_connection']; 23 | $scan_to_join = $obj['scan_to_join']; 24 | 25 | $sql = "insert into user_using_modules_times_android(device_id,offline_files_upload,offline_files_download,bluetooth_trans,share_app,files_manage,user_feedback,software_version,software_describe,about_us,user_android_version,connect_PC,create_connection,scan_to_join) values ('$device_id','$offline_files_upload','$offline_files_download','$bluetooth_trans','$share_app','$files_manage','$user_feedback','$software_version','$software_describe','$about_us','$user_android_version','$connect_PC','$create_connection','$scan_to_join')"; 26 | 27 | 28 | mysql_query($sql); 29 | //echo $sql; 30 | 31 | 32 | echo " 这里是 User_Using_Modules_Times_Android 数据表的服务端接口!"; -------------------------------------------------------------------------------- /DatabaseScript/User_Using_Time_Android.php: -------------------------------------------------------------------------------- 1 | key这种方式访问值,也可以像我这样用【】访问,不过 第二个变量要设置为 true 7 | 8 | 9 | $_id = $obj['_id'];//这是 Android sqlite 数据表的ID字段 10 | $device_id = $obj['device_id']; 11 | $start_app_time = $obj['start_app_time']; 12 | $exit_app_time = $obj['exit_app_time']; 13 | $holding_app_time = $obj['holding_app_time']; 14 | 15 | 16 | $sql = "insert into user_using_time_android(device_id,start_app_time,exit_app_time,holding_app_time) values ('$device_id','$start_app_time','$exit_app_time','$holding_app_time')"; 17 | mysql_query($sql); 18 | //echo $sql; 19 | 20 | 21 | echo " 这里是 User_Using_Time_Android 数据表的服务端接口!"; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## "灵动快传"项目简介 3 | 4 | - 本项目为 第五届[“中国软件杯”][2]——大学生软件设计大赛 [A6赛题][1] 的参赛作品 5 | - 开发团队为来自湖北大学的“根号三”队伍,队员有 **周博文**、**郑志琦**、**董致礼** 6 | - 凭借此作品,我们 **“根号三”** 团队获得**全国二等奖**以及**最佳表现奖**的成绩 7 | - 项目总共分为三个模块,分别为Android端、PC端以及Web端 8 | - 以下将分别从这三个模块进行较为详细的介绍 9 | 10 | ### “灵动快传”Web端介绍 11 | 12 | > 本项目全称为:互联网多平台文件快传系统——灵动快传 13 | > 14 | > 开发人员:周博文 郑志琦 董致礼 15 | > 16 | > 集成开发工具:zend Studio 17 | > 18 | > 开发语言:PHP、JavaScript、HTML、CSS 19 | 20 | #####Web端程序的UI展示 21 | 22 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/filesUPandDOWN.jpg) 23 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/001.jpg) 24 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/002.jpg) 25 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/003.jpg) 26 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/004.jpg) 27 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/005.jpg) 28 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/006.jpg) 29 | ![image](https://github.com/zhoubowen-sky/LingDongWeb/blob/master/github-images-folder/007.jpg) 30 | 31 | #####Web端程序目录相关说明 32 | 33 | > 程序目录中 **github-images-folder** 文件夹与PC端程序无关,里面的图片为Github项目README页面的说明 34 | > 次APP 35 | 36 | 37 | #####Web端程序功能相关说明 38 | 39 | > Web端有两大功能: 40 | > - 一是“离线文件”,服务器作为离线文件的暂存器使用 41 | > 42 | > - 二是“大数据分析”,我们从APP端搜集了一定量的用户使用数据,并对其中部分进行了可视化分析,从图表中我们得出了很多有用的,有助于开发的信息。以下为暂时在网页端实现的相关可视化表格。点击访问[网址][6](后期可能会失效)。 43 | > 44 | > - 功能模块使用频率 45 | > - 传输文件类型分析 46 | > - 传输文件大小分析 47 | > - APP启动时间分析 48 | > - APP使用时长分析 49 | > - 安卓手机版本分布 50 | > - 客户端分辨率分布 51 | 52 | 53 | ### “灵动快传”Web端介绍 54 | 55 | > [点击访问Web端介绍][3] 56 | 57 | ### “灵动快传”Android端介绍 58 | 59 | > [点击访问Android端介绍][4] 60 | 61 | ### “灵动快传”PC端介绍 62 | 63 | > [点击访问PC端介绍][5] 64 | 65 | ####关于我们 66 | 67 | >此项目为湖北大学 **周博文**、**郑志琦**、**董致礼**三人合力开发。 68 | >联系方式: 69 | >董:yhinu@qq.com 70 | >郑:664837069@qq.com 71 | >周:zhoubowen.sky@qq.com 72 | 73 | 74 | 75 | 76 | [1]:http://www.cnsoftbei.com/bencandy.php?fid=130&aid=1379 77 | [2]:http://www.cnsoftbei.com/ 78 | [3]:https://github.com/zhoubowen-sky/LingDongWeb/blob/master/README.md 79 | [4]:https://github.com/zhoubowen-sky/LingDong2.0/blob/master/README.md 80 | [5]:https://github.com/zhoubowen-sky/File-Transmit-pc/blob/master/README.md 81 | 82 | [6]:http://115.28.101.196/ -------------------------------------------------------------------------------- /WebDownloadAction.php: -------------------------------------------------------------------------------- 1 | alert('没有输入文件提取码!');window.location.href='index.php'"; 8 | exit; 9 | }else{ 10 | //在数据库中根据输入的提取码查找数据 11 | $sql1 = "select * from fileinfo where downloadnumber = $downloadnumber"; 12 | //将查找到的那一行赋值给$query作为资源标识符 13 | $query1 = mysql_query($sql1); 14 | //echo $query; 15 | //获取资源标识符$query所指向的对象,也就是所要查找的这一行 16 | $arr1 = mysql_fetch_object($query1); 17 | //如果没有查找到对应的对象,则说明数据库中没有这条数据,$downloadnumber不存在于系统fileinfo数据表里面 18 | if($arr1 == NULL){ 19 | echo ""; 20 | exit; 21 | } 22 | //从$arr对象中获取path的值,并将其赋值给$downloadpath 23 | $downloadpath = $arr1 -> path; 24 | 25 | //echo $downloadpath; 26 | //echo ""; 27 | 28 | 29 | /********************以下是将下载相关的记录写入数据库filedownloadrecords********************/ 30 | //获取下载的时间 31 | $date_tmp = time();//获取Linux时间戳 32 | $dateline2 = date("Y-m-d H:i:s", $date_tmp+8*60*60);//将时间戳转换为标准时间 33 | 34 | $name2 = $arr1 -> name; 35 | $path2 = $arr1 -> path; 36 | $md5name2 = $arr1 -> md5name; 37 | $type2 = $arr1 -> type; 38 | $size2 = $arr1 -> size; 39 | $downloadnumber2 = $arr1 -> downloadnumber; 40 | 41 | 42 | $requestIP = $_SERVER["REMOTE_ADDR"]; 43 | 44 | //echo $requestIP; 45 | 46 | 47 | //在用户下载数据库里面重找是否有下载的记录 48 | //$downloadtimes = 0; 49 | 50 | $sql2 = "select * from filedownloadrecords where downloadnumber = $downloadnumber"; 51 | 52 | $query2 = mysql_query($sql2); 53 | 54 | $arr2 = mysql_fetch_object($query2); 55 | 56 | /**如果下载记录表中没有这条记录,那么久插入这条记录*/ 57 | // if ($arr2 == NULL){ 58 | 59 | $downloadtimes=1; 60 | 61 | $insertsql = "insert into filedownloadrecords(name,path,md5name,type,size,downloadnumber,requestIP,downloadtimes,dateline) values ('$name2','$path2','$md5name2','$type2','$size2','$downloadnumber2','$requestIP','$downloadtimes','$dateline2')"; 62 | //echo $insertsql; 63 | mysql_query($insertsql); 64 | 65 | 66 | 67 | /**如果有这条记录就判断是否为同一IP,如果是就增加下载次数,如果不是就重新插入一条数据*/ 68 | // }else 69 | // { 70 | 71 | // if ($requestIP == $arr2 -> requestIP){ 72 | // //获取下载记录表中存储的下载次数的数据downloadtimes 73 | 74 | // $downloadtimes = $arr2 -> downloadtimes + 1; 75 | 76 | // $sql3 = "update filedownloadrecords set downloadtimes = $downloadtimes where downloadnumber = $downloadnumber"; 77 | 78 | // mysql_query($sql3); 79 | // }else { 80 | // /**不是同一条IP,那个就需要再插入一条数据*/ 81 | // $downloadtimes=1; 82 | 83 | // $insertsql2 = "insert into filedownloadrecords(name,path,md5name,type,size,downloadnumber,requestIP,downloadtimes,dateline) values ('$name2','$path2','$md5name2','$type2','$size2','$downloadnumber2','$requestIP','$downloadtimes','$dateline2')";; 84 | // //echo $insertsql2; 85 | // mysql_query($insertsql2); 86 | 87 | // } 88 | 89 | // } 90 | 91 | 92 | /***********强制让用户下载文件的代码,用Header实现************/ 93 | $file_dir = 'FilesUpload/'; 94 | $file_name = $arr1 -> md5name; 95 | 96 | $file = fopen($file_dir.$file_name,"r"); // 打开文件 97 | //输入文件标签 98 | Header("Content-type: application/octet-stream"); 99 | Header("Accept-Ranges: bytes"); 100 | Header("Accept-Length: ".filesize($file_dir . $file_name)); 101 | Header("Content-Disposition: attachment; filename=" . $file_name);//最终保存在磁盘上的文件名 102 | // 输出文件内容 103 | echo fread($file,filesize($file_dir.$file_name)); 104 | fclose($file); 105 | //exit(); 106 | 107 | 108 | //echo ""; 109 | } 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /WebUploadAction.php: -------------------------------------------------------------------------------- 1 | alert('文件上传成功!');window.location.href='index.php'"; 31 | }else{ 32 | echo ""; 33 | exit; 34 | } 35 | }else{ 36 | //匹配错误信息 37 | switch($fileInfo['error']){ 38 | case 1: 39 | echo '上传文件超过了PHP配置文件中upload_max_filesize选项的值'; 40 | break; 41 | case 2: 42 | echo '超过了表单MAX_FILE_SIZE限制的大小'; 43 | break; 44 | case 3: 45 | echo '文件部分被上传'; 46 | break; 47 | case 4: 48 | echo ""; 49 | break; 50 | case 6: 51 | echo '没有找到临时目录'; 52 | break; 53 | case 7: 54 | case 8: 55 | echo '系统错误'; 56 | break; 57 | } 58 | exit; 59 | } 60 | 61 | //向数据库中添加文件的信息 62 | //mysql_query("set names utf8"); 63 | $downloadpath = "http://115.28.101.196/".$destination; 64 | //echo $downloadpath; 65 | 66 | $downloadnumber = rand(100,999999);//生成随机的四位提取码 67 | 68 | //判断系统数据库中是否已经有这个提取码 69 | 70 | 71 | /* while (($sql_downloadnumber = "select * from fileinfo where downloadnumber = $downloadnumber")) { 72 | $downloadnumber = rand(100,999999); 73 | } 74 | */ 75 | 76 | $date_tmp = time();//获取Linux时间戳 77 | $dateline = date("Y-m-d H:i:s", $date_tmp+8*60*60);//将时间戳转换为标准时间 78 | 79 | $insertsql = "insert into fileinfo(name,path,md5name,type,size,downloadnumber,uploaderIP,dateline) values ('$filename','$downloadpath','$uniName','$ext','$size','$downloadnumber','$uploaderIP','$dateline')"; 80 | //echo $insertsql; 81 | mysql_query($insertsql); 82 | 83 | echo ""; 84 | //echo "文件上传成功,文件提取码为:".$downloadnumber; 85 | //echo ""; 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /Web端后台MySQL数据库设计.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhoubowen-sky/LingDongWeb/fb5952464bb7595fc3773ae014173551d61a44e5/Web端后台MySQL数据库设计.docx -------------------------------------------------------------------------------- /config.php: -------------------------------------------------------------------------------- 1 | 选择数据库失败"; 10 | } 11 | //设定字符集 12 | if(!(mysql_query('set names utf8'))){ 13 | echo "
设定字符集失败"; 14 | } -------------------------------------------------------------------------------- /css/dongtai/jsdaima.css: -------------------------------------------------------------------------------- 1 | *{ margin:0; padding:0; list-style:none;} 2 | #divSmallBox{overflow:hidden;*display:inline;*zoom:1;width:10px;height:10px;margin:0 5px;border-radius:10px;background:#ffffff;} 3 | #playBox{ 4 | width: 100%; 5 | height: 750px; 6 | background: #333; 7 | position: absolute; 8 | overflow: hidden; 9 | } 10 | #playBox .oUlplay { width:99999px; position:absolute; left:0; top:0;} 11 | #playBox .oUlplay li{ float:left;} 12 | #playBox .pre{ cursor:pointer; width:60px; height:60px; background:url(../images/l.png) no-repeat; position:absolute; top:300px; left:10px; z-index:10;} 13 | #playBox .next{ cursor:pointer; width:60px; height:60px; background:url(../images/r.png) no-repeat; position:absolute; top:300px; right:10px; z-index:10;} 14 | #playBox .smalltitle { 15 | width: 100%; 16 | height: 10px; 17 | position: absolute; 18 | bottom: 15px; 19 | z-index: 10 20 | } 21 | #playBox .smalltitle ul{ width:150px; margin:0 auto;} 22 | #playBox .smalltitle ul li{ width:15px; height:15px; margin:0 8px; border-radius:10px; background:#ffffff; float:left; overflow:hidden;*display:inline;*zoom:1; cursor: pointer;} 23 | #playBox .smalltitle .thistitle{ background:#69aaec;} 24 | -------------------------------------------------------------------------------- /css/dongtai/jsdaima.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhoubowen-sky/LingDongWeb/fb5952464bb7595fc3773ae014173551d61a44e5/css/dongtai/jsdaima.js -------------------------------------------------------------------------------- /css/landing-page.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Start Bootstrap - Landing Page (http://startbootstrap.com/) 3 | * Copyright 2013-2016 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | 7 | 8 | 9 | .topnav { 10 | font-size: 14px; 11 | } 12 | 13 | .lead { 14 | font-size: 18px; 15 | font-weight: 400; 16 | } 17 | 18 | .intro-header { 19 | padding-top: 50px; /* If you're making other pages, make sure there is 50px of padding to make sure the navbar doesn't overlap content! */ 20 | padding-bottom: 50px; 21 | text-align: center; 22 | color: #f8f8f8; 23 | /*background: url(../img/intro-bg.jpg) no-repeat center center;*/ 24 | background-size: cover; 25 | } 26 | 27 | .intro-message { 28 | position: relative; 29 | padding-top: 20%; 30 | padding-bottom: 20%; 31 | } 32 | 33 | .intro-message > h1 { 34 | margin: 0; 35 | text-shadow: 2px 2px 3px rgba(0,0,0,0.6); 36 | font-size: 5em; 37 | } 38 | 39 | .intro-divider { 40 | width: 400px; 41 | border-top: 1px solid #f8f8f8; 42 | border-bottom: 1px solid rgba(0,0,0,0.2); 43 | } 44 | 45 | .intro-message > h3 { 46 | text-shadow: 2px 2px 3px rgba(0,0,0,0.6); 47 | } 48 | 49 | @media(max-width:767px) { 50 | .intro-message { 51 | padding-bottom: 15%; 52 | } 53 | 54 | .intro-message > h1 { 55 | font-size: 3em; 56 | } 57 | 58 | ul.intro-social-buttons > li { 59 | display: block; 60 | margin-bottom: 20px; 61 | padding: 0; 62 | } 63 | 64 | ul.intro-social-buttons > li:last-child { 65 | margin-bottom: 0; 66 | } 67 | 68 | .intro-divider { 69 | width: 100%; 70 | } 71 | } 72 | 73 | .network-name { 74 | text-transform: uppercase; 75 | font-size: 14px; 76 | font-weight: 400; 77 | letter-spacing: 2px; 78 | } 79 | 80 | .content-section-a { 81 | padding: 50px 0; 82 | background-color: #f8f8f8; 83 | } 84 | 85 | .content-section-b { 86 | padding: 50px 0; 87 | border-top: 1px solid #e7e7e7; 88 | border-bottom: 1px solid #e7e7e7; 89 | } 90 | 91 | .section-heading { 92 | margin-bottom: 30px; 93 | } 94 | 95 | .section-heading-spacer { 96 | float: left; 97 | width: 200px; 98 | border-top: 3px solid #e7e7e7; 99 | } 100 | 101 | .banner { 102 | padding: 100px 0; 103 | color: #f8f8f8; 104 | background: url(../img/banner-bg.jpg) no-repeat center center; 105 | background-size: cover; 106 | } 107 | 108 | .banner h2 { 109 | margin: 0; 110 | text-shadow: 2px 2px 3px rgba(0,0,0,0.6); 111 | font-size: 3em; 112 | } 113 | 114 | .banner ul { 115 | margin-bottom: 0; 116 | } 117 | 118 | .banner-social-buttons { 119 | float: right; 120 | margin-top: 0; 121 | } 122 | 123 | @media(max-width:1199px) { 124 | ul.banner-social-buttons { 125 | float: left; 126 | margin-top: 15px; 127 | } 128 | } 129 | 130 | @media(max-width:767px) { 131 | .banner h2 { 132 | margin: 0; 133 | text-shadow: 2px 2px 3px rgba(0,0,0,0.6); 134 | font-size: 3em; 135 | } 136 | 137 | ul.banner-social-buttons > li { 138 | display: block; 139 | margin-bottom: 20px; 140 | padding: 0; 141 | } 142 | 143 | ul.banner-social-buttons > li:last-child { 144 | margin-bottom: 0; 145 | } 146 | } 147 | 148 | footer { 149 | padding: 50px 0; 150 | background-color: #f8f8f8; 151 | } 152 | 153 | p.copyright { 154 | margin: 15px 0 0; 155 | } -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhoubowen-sky/LingDongWeb/fb5952464bb7595fc3773ae014173551d61a44e5/favicon.ico -------------------------------------------------------------------------------- /feedback.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 灵动快传文件分享平台 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 30 | 31 | 32 | 40 | 41 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
117 |
118 | 119 |
120 | 125 |
126 | 131 |
132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 |
145 |
146 | 147 |
148 |
149 |
150 |

151 |

152 | 153 |
    154 |
  • 155 | 156 |
  • 157 |
  • 158 | 159 |
  • 160 |
  • 161 | 162 |
  • 163 |
164 |
165 |
166 |
167 | 168 |
169 | 170 | 171 |
172 | 173 | 174 | 175 | 176 | 177 |
178 | 179 |
180 |
181 |
182 |
183 |
184 |

上传文件:
Upload Files

185 |

在这里您可以上传文件 ,随后我们会返回给您一个文件提取码,以供提取文件。

186 | 187 |
188 |
189 |
190 |
191 | 192 | 193 |
194 |
195 |
196 |
197 | 198 |
199 |
200 | 201 |
202 |
203 | 204 |
205 |
206 |
207 | 208 | 209 |
210 | 211 | 212 |
213 | 214 |
215 | 216 |
217 |
218 |
219 |
220 |

下载文件:
Download Files

221 |

您需要一个提取码来下载文件 ,提取码在上传时自动生成。

222 | 223 | 224 |
225 |
226 | 227 |
228 |
229 |
230 |
231 | 232 |
233 | 234 |
235 |
236 | 237 | 238 | 239 | 240 |
241 | 242 |
243 | 244 |
245 |
246 | 247 |
248 | 249 |
250 | 251 | 252 | 253 | 254 | 255 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 |
310 | 311 |
312 | 313 |
314 |
315 |
316 |
317 |

关于我们
About Us

318 |

你好,我们是来自湖北大学的“根号三”团队,队员分别为:郑志琦、董致礼、周博文 。
联系方式:
董:yhinu@qq.com
郑:664837069@qq.com
周:zhoubowen.sky@qq.com

319 |
320 |
321 | 322 |
323 |
324 | 325 |
326 | 327 | 328 |
329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 361 | 362 | 363 | 364 | 365 | -------------------------------------------------------------------------------- /phpinfo.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tanzhen.php: -------------------------------------------------------------------------------- 1 | =0; $l--) 75 | { 76 | $allsize1[$l]=floor($size/pow(1024,$l)); 77 | $allsize[$l]=$allsize1[$l]-$allsize1[$l+1]*1024; 78 | } 79 | 80 | $len=count($allsize); 81 | 82 | for($j = $len-1; $j >=0; $j--) 83 | { 84 | $fsize=$fsize.$allsize[$j].$danwei[$j]; 85 | } 86 | return $fsize; 87 | } 88 | 89 | 90 | function valid_email($str) 91 | { 92 | 93 | return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE; 94 | 95 | } 96 | 97 | 98 | //检测PHP设置参数 99 | 100 | function show($varName) 101 | { 102 | 103 | switch($result = get_cfg_var($varName)) 104 | { 105 | 106 | case 0: 107 | 108 | return '×'; 109 | 110 | break; 111 | 112 | 113 | case 1: 114 | 115 | return ''; 116 | 117 | break; 118 | 119 | 120 | default: 121 | 122 | return $result; 123 | 124 | break; 125 | 126 | } 127 | 128 | } 129 | 130 | 131 | 132 | //保留服务器性能测试结果 133 | 134 | $valInt = isset($_POST['pInt']) ? $_POST['pInt'] : "未测试"; 135 | 136 | $valFloat = isset($_POST['pFloat']) ? $_POST['pFloat'] : "未测试"; 137 | 138 | $valIo = isset($_POST['pIo']) ? $_POST['pIo'] : "未测试"; 139 | 140 | 141 | 142 | if ($_GET['act'] == "phpinfo") 143 | { 144 | 145 | phpinfo(); 146 | 147 | exit(); 148 | 149 | } 150 | elseif($_POST['act'] == "整型测试") 151 | { 152 | 153 | $valInt = test_int(); 154 | 155 | } 156 | elseif($_POST['act'] == "浮点测试") 157 | { 158 | 159 | $valFloat = test_float(); 160 | 161 | } 162 | elseif($_POST['act'] == "IO测试") 163 | { 164 | 165 | $valIo = test_io(); 166 | 167 | } 168 | //网速测试-开始 169 | elseif($_POST['act']=="开始测试") 170 | { 171 | ?> 172 | 177 | "; 181 | } 182 | ?> 183 | 189 | "; 199 | Echo "这里显示系统所支持的所有函数,和自定义函数\n"; 200 | print_r($arr); 201 | echo ""; 202 | exit(); 203 | }elseif($_GET['act'] == "disable_functions") 204 | { 205 | $disFuns=get_cfg_var("disable_functions"); 206 | if(empty($disFuns)) 207 | { 208 | $arr = '×'; 209 | } 210 | else 211 | { 212 | $arr = $disFuns; 213 | } 214 | Function php() 215 | { 216 | } 217 | echo "
";
 218 | 	Echo "这里显示系统被禁用的函数\n";
 219 | 	print_r($arr);
 220 | 	echo "
"; 221 | exit(); 222 | } 223 | 224 | 225 | 226 | //MySQL检测 227 | 228 | if ($_POST['act'] == 'MySQL检测') 229 | { 230 | 231 | $host = isset($_POST['host']) ? trim($_POST['host']) : ''; 232 | 233 | $port = isset($_POST['port']) ? (int) $_POST['port'] : ''; 234 | 235 | $login = isset($_POST['login']) ? trim($_POST['login']) : ''; 236 | 237 | $password = isset($_POST['password']) ? trim($_POST['password']) : ''; 238 | 239 | $host = preg_match('~[^a-z0-9\-\.]+~i', $host) ? '' : $host; 240 | 241 | $port = intval($port) ? intval($port) : ''; 242 | 243 | $login = preg_match('~[^a-z0-9\_\-]+~i', $login) ? '' : htmlspecialchars($login); 244 | 245 | $password = is_string($password) ? htmlspecialchars($password) : ''; 246 | 247 | } 248 | elseif ($_POST['act'] == '函数检测') 249 | { 250 | 251 | $funRe = "函数".$_POST['funName']."支持状况检测结果:".isfun1($_POST['funName']); 252 | 253 | } 254 | elseif ($_POST['act'] == '邮件检测') 255 | { 256 | 257 | $mailRe = "邮件发送检测结果:发送"; 258 | if($_SERVER['SERVER_PORT']==80){$mailContent = "http://".$_SERVER['SERVER_NAME'].($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);} 259 | else{$mailContent = "http://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);} 260 | $mailRe .= (false !== @mail($_POST["mailAdd"], $mailContent, "This is a test mail!")) ? "完成":"失败"; 261 | 262 | } 263 | 264 | 265 | //网络速度测试 266 | if(isset($_POST['speed'])) 267 | { 268 | $speed=round(100/($_POST['speed']/1000),2); 269 | } 270 | elseif($_GET['speed']=="0") 271 | { 272 | $speed=6666.67; 273 | } 274 | elseif(isset($_GET['speed']) and $_GET['speed']>0) 275 | { 276 | $speed=round(100/($_GET['speed']/1000),2); //下载速度:$speed kb/s 277 | } 278 | else 279 | { 280 | $speed=" 未探测 "; 281 | } 282 | 283 | 284 | 285 | // 检测函数支持 286 | 287 | function isfun($funName = '') 288 | { 289 | 290 | if (!$funName || trim($funName) == '' || preg_match('~[^a-z0-9\_]+~i', $funName, $tmp)) return '错误'; 291 | 292 | return (false !== function_exists($funName)) ? '' : '×'; 293 | } 294 | function isfun1($funName = '') 295 | { 296 | if (!$funName || trim($funName) == '' || preg_match('~[^a-z0-9\_]+~i', $funName, $tmp)) return '错误'; 297 | return (false !== function_exists($funName)) ? '√' : '×'; 298 | } 299 | 300 | 301 | 302 | //整数运算能力测试 303 | 304 | function test_int() 305 | { 306 | 307 | $timeStart = gettimeofday(); 308 | 309 | for($i = 0; $i < 3000000; $i++) 310 | { 311 | 312 | $t = 1+1; 313 | 314 | } 315 | 316 | $timeEnd = gettimeofday(); 317 | 318 | $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 319 | 320 | $time = round($time, 3)."秒"; 321 | 322 | return $time; 323 | 324 | } 325 | 326 | 327 | 328 | //浮点运算能力测试 329 | 330 | function test_float() 331 | { 332 | 333 | //得到圆周率值 334 | 335 | $t = pi(); 336 | 337 | $timeStart = gettimeofday(); 338 | 339 | 340 | 341 | for($i = 0; $i < 3000000; $i++) 342 | { 343 | 344 | //开平方 345 | 346 | sqrt($t); 347 | 348 | } 349 | 350 | 351 | 352 | $timeEnd = gettimeofday(); 353 | 354 | $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 355 | 356 | $time = round($time, 3)."秒"; 357 | 358 | return $time; 359 | 360 | } 361 | 362 | 363 | 364 | //IO能力测试 365 | 366 | function test_io() 367 | { 368 | 369 | $fp = @fopen(PHPSELF, "r"); 370 | 371 | $timeStart = gettimeofday(); 372 | 373 | for($i = 0; $i < 10000; $i++) 374 | { 375 | 376 | @fread($fp, 10240); 377 | 378 | @rewind($fp); 379 | 380 | } 381 | 382 | $timeEnd = gettimeofday(); 383 | 384 | @fclose($fp); 385 | 386 | $time = ($timeEnd["usec"]-$timeStart["usec"])/1000000+$timeEnd["sec"]-$timeStart["sec"]; 387 | 388 | $time = round($time, 3)."秒"; 389 | 390 | return($time); 391 | 392 | } 393 | 394 | function GetCoreInformation() {$data = file('/proc/stat');$cores = array();foreach( $data as $line ) {if( preg_match('/^cpu[0-9]/', $line) ){$info = explode(' ', $line);$cores[]=array('user'=>$info[1],'nice'=>$info[2],'sys' => $info[3],'idle'=>$info[4],'iowait'=>$info[5],'irq' => $info[6],'softirq' => $info[7]);}}return $cores;} 395 | function GetCpuPercentages($stat1, $stat2) {if(count($stat1)!==count($stat2)){return;}$cpus=array();for( $i = 0, $l = count($stat1); $i < $l; $i++) { $dif = array(); $dif['user'] = $stat2[$i]['user'] - $stat1[$i]['user'];$dif['nice'] = $stat2[$i]['nice'] - $stat1[$i]['nice']; $dif['sys'] = $stat2[$i]['sys'] - $stat1[$i]['sys'];$dif['idle'] = $stat2[$i]['idle'] - $stat1[$i]['idle'];$dif['iowait'] = $stat2[$i]['iowait'] - $stat1[$i]['iowait'];$dif['irq'] = $stat2[$i]['irq'] - $stat1[$i]['irq'];$dif['softirq'] = $stat2[$i]['softirq'] - $stat1[$i]['softirq'];$total = array_sum($dif);$cpu = array();foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 2);$cpus['cpu' . $i] = $cpu;}return $cpus;} 396 | $stat1 = GetCoreInformation();sleep(1);$stat2 = GetCoreInformation();$data = GetCpuPercentages($stat1, $stat2); 397 | $cpu_show = $data['cpu0']['user']."%us, ".$data['cpu0']['sys']."%sy, ".$data['cpu0']['nice']."%ni, ".$data['cpu0']['idle']."%id, ".$data['cpu0']['iowait']."%wa, ".$data['cpu0']['irq']."%irq, ".$data['cpu0']['softirq']."%softirq"; 398 | function makeImageUrl($title, $data) {$api='http://api.yahei.net/tz/cpu_show.php?id=';$url.=$data['user'].',';$url.=$data['nice'].',';$url.=$data['sys'].',';$url.=$data['idle'].',';$url.=$data['iowait'];$url.='&chdl=User|Nice|Sys|Idle|Iowait&chdlp=b&chl=';$url.=$data['user'].'%25|';$url.=$data['nice'].'%25|';$url.=$data['sys'].'%25|';$url.=$data['idle'].'%25|';$url.=$data['iowait'].'%25';$url.='&chtt=Core+'.$title;return $api.base64_encode($url);} 399 | if($_GET['act'] == "cpu_percentage"){echo "
图片加载慢,请耐心等待!

";foreach( $data as $k => $v ) {echo '';}echo "
";exit();} 400 | 401 | 402 | 403 | // 根据不同系统取得CPU相关信息 404 | 405 | switch(PHP_OS) 406 | { 407 | 408 | case "Linux": 409 | 410 | $sysReShow = (false !== ($sysInfo = sys_linux()))?"show":"none"; 411 | 412 | break; 413 | 414 | 415 | case "FreeBSD": 416 | 417 | $sysReShow = (false !== ($sysInfo = sys_freebsd()))?"show":"none"; 418 | 419 | break; 420 | /* 421 | 422 | case "WINNT": 423 | 424 | $sysReShow = (false !== ($sysInfo = sys_windows()))?"show":"none"; 425 | 426 | break; 427 | */ 428 | 429 | default: 430 | 431 | break; 432 | 433 | } 434 | 435 | 436 | 437 | //linux系统探测 438 | 439 | function sys_linux() 440 | 441 | { 442 | 443 | // CPU 444 | 445 | if (false === ($str = @file("/proc/cpuinfo"))) return false; 446 | 447 | $str = implode("", $str); 448 | 449 | @preg_match_all("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s", $str, $model); 450 | 451 | @preg_match_all("/cpu\s+MHz\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $mhz); 452 | 453 | @preg_match_all("/cache\s+size\s{0,}\:+\s{0,}([\d\.]+\s{0,}[A-Z]+[\r\n]+)/", $str, $cache); 454 | 455 | @preg_match_all("/bogomips\s{0,}\:+\s{0,}([\d\.]+)[\r\n]+/", $str, $bogomips); 456 | 457 | if (false !== is_array($model[1])) 458 | 459 | { 460 | 461 | $res['cpu']['num'] = sizeof($model[1]); 462 | /* 463 | 464 | for($i = 0; $i < $res['cpu']['num']; $i++) 465 | 466 | { 467 | 468 | $res['cpu']['model'][] = $model[1][$i].' ('.$mhz[1][$i].')'; 469 | 470 | $res['cpu']['mhz'][] = $mhz[1][$i]; 471 | 472 | $res['cpu']['cache'][] = $cache[1][$i]; 473 | 474 | $res['cpu']['bogomips'][] = $bogomips[1][$i]; 475 | 476 | }*/ 477 | if($res['cpu']['num']==1) 478 | $x1 = ''; 479 | else 480 | $x1 = ' ×'.$res['cpu']['num']; 481 | $mhz[1][0] = ' | 频率:'.$mhz[1][0]; 482 | $cache[1][0] = ' | 二级缓存:'.$cache[1][0]; 483 | $bogomips[1][0] = ' | Bogomips:'.$bogomips[1][0]; 484 | $res['cpu']['model'][] = $model[1][0].$mhz[1][0].$cache[1][0].$bogomips[1][0].$x1; 485 | 486 | if (false !== is_array($res['cpu']['model'])) $res['cpu']['model'] = implode("
", $res['cpu']['model']); 487 | 488 | if (false !== is_array($res['cpu']['mhz'])) $res['cpu']['mhz'] = implode("
", $res['cpu']['mhz']); 489 | 490 | if (false !== is_array($res['cpu']['cache'])) $res['cpu']['cache'] = implode("
", $res['cpu']['cache']); 491 | 492 | if (false !== is_array($res['cpu']['bogomips'])) $res['cpu']['bogomips'] = implode("
", $res['cpu']['bogomips']); 493 | 494 | } 495 | 496 | 497 | // NETWORK 498 | 499 | 500 | // UPTIME 501 | 502 | if (false === ($str = @file("/proc/uptime"))) return false; 503 | 504 | $str = explode(" ", implode("", $str)); 505 | 506 | $str = trim($str[0]); 507 | 508 | $min = $str / 60; 509 | 510 | $hours = $min / 60; 511 | 512 | $days = floor($hours / 24); 513 | 514 | $hours = floor($hours - ($days * 24)); 515 | 516 | $min = floor($min - ($days * 60 * 24) - ($hours * 60)); 517 | 518 | if ($days !== 0) $res['uptime'] = $days."天"; 519 | 520 | if ($hours !== 0) $res['uptime'] .= $hours."小时"; 521 | 522 | $res['uptime'] .= $min."分钟"; 523 | 524 | 525 | // MEMORY 526 | 527 | if (false === ($str = @file("/proc/meminfo"))) return false; 528 | 529 | $str = implode("", $str); 530 | 531 | preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buf); 532 | preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers); 533 | 534 | 535 | $res['memTotal'] = round($buf[1][0]/1024, 2); 536 | 537 | $res['memFree'] = round($buf[2][0]/1024, 2); 538 | 539 | $res['memBuffers'] = round($buffers[1][0]/1024, 2); 540 | $res['memCached'] = round($buf[3][0]/1024, 2); 541 | 542 | $res['memUsed'] = $res['memTotal']-$res['memFree']; 543 | 544 | $res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memUsed']/$res['memTotal']*100,2):0; 545 | 546 | 547 | $res['memRealUsed'] = $res['memTotal'] - $res['memFree'] - $res['memCached'] - $res['memBuffers']; //真实内存使用 548 | $res['memRealFree'] = $res['memTotal'] - $res['memRealUsed']; //真实空闲 549 | $res['memRealPercent'] = (floatval($res['memTotal'])!=0)?round($res['memRealUsed']/$res['memTotal']*100,2):0; //真实内存使用率 550 | 551 | $res['memCachedPercent'] = (floatval($res['memCached'])!=0)?round($res['memCached']/$res['memTotal']*100,2):0; //Cached内存使用率 552 | 553 | $res['swapTotal'] = round($buf[4][0]/1024, 2); 554 | 555 | $res['swapFree'] = round($buf[5][0]/1024, 2); 556 | 557 | $res['swapUsed'] = round($res['swapTotal']-$res['swapFree'], 2); 558 | 559 | $res['swapPercent'] = (floatval($res['swapTotal'])!=0)?round($res['swapUsed']/$res['swapTotal']*100,2):0; 560 | 561 | 562 | // LOAD AVG 563 | 564 | if (false === ($str = @file("/proc/loadavg"))) return false; 565 | 566 | $str = explode(" ", implode("", $str)); 567 | 568 | $str = array_chunk($str, 4); 569 | 570 | $res['loadAvg'] = implode(" ", $str[0]); 571 | 572 | 573 | return $res; 574 | 575 | } 576 | 577 | 578 | 579 | //FreeBSD系统探测 580 | 581 | function sys_freebsd() 582 | { 583 | 584 | //CPU 585 | 586 | if (false === ($res['cpu']['num'] = get_key("hw.ncpu"))) return false; 587 | 588 | $res['cpu']['model'] = get_key("hw.model"); 589 | 590 | //LOAD AVG 591 | 592 | if (false === ($res['loadAvg'] = get_key("vm.loadavg"))) return false; 593 | 594 | //UPTIME 595 | 596 | if (false === ($buf = get_key("kern.boottime"))) return false; 597 | 598 | $buf = explode(' ', $buf); 599 | 600 | $sys_ticks = time() - intval($buf[3]); 601 | 602 | $min = $sys_ticks / 60; 603 | 604 | $hours = $min / 60; 605 | 606 | $days = floor($hours / 24); 607 | 608 | $hours = floor($hours - ($days * 24)); 609 | 610 | $min = floor($min - ($days * 60 * 24) - ($hours * 60)); 611 | 612 | if ($days !== 0) $res['uptime'] = $days."天"; 613 | 614 | if ($hours !== 0) $res['uptime'] .= $hours."小时"; 615 | 616 | $res['uptime'] .= $min."分钟"; 617 | 618 | //MEMORY 619 | 620 | if (false === ($buf = get_key("hw.physmem"))) return false; 621 | 622 | $res['memTotal'] = round($buf/1024/1024, 2); 623 | 624 | 625 | $str = get_key("vm.vmtotal"); 626 | 627 | preg_match_all("/\nVirtual Memory[\:\s]*\(Total[\:\s]*([\d]+)K[\,\s]*Active[\:\s]*([\d]+)K\)\n/i", $str, $buff, PREG_SET_ORDER); 628 | 629 | preg_match_all("/\nReal Memory[\:\s]*\(Total[\:\s]*([\d]+)K[\,\s]*Active[\:\s]*([\d]+)K\)\n/i", $str, $buf, PREG_SET_ORDER); 630 | 631 | 632 | $res['memRealUsed'] = round($buf[0][2]/1024, 2); 633 | 634 | $res['memCached'] = round($buff[0][2]/1024, 2); 635 | 636 | $res['memUsed'] = round($buf[0][1]/1024, 2) + $res['memCached']; 637 | 638 | $res['memFree'] = $res['memTotal'] - $res['memUsed']; 639 | 640 | $res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memUsed']/$res['memTotal']*100,2):0; 641 | 642 | 643 | $res['memRealPercent'] = (floatval($res['memTotal'])!=0)?round($res['memRealUsed']/$res['memTotal']*100,2):0; 644 | 645 | 646 | return $res; 647 | 648 | } 649 | 650 | 651 | 652 | //取得参数值 FreeBSD 653 | 654 | function get_key($keyName) 655 | { 656 | 657 | return do_command('sysctl', "-n $keyName"); 658 | 659 | } 660 | 661 | 662 | 663 | //确定执行文件位置 FreeBSD 664 | 665 | function find_command($commandName) 666 | { 667 | 668 | $path = array('/bin', '/sbin', '/usr/bin', '/usr/sbin', '/usr/local/bin', '/usr/local/sbin'); 669 | 670 | foreach($path as $p) 671 | { 672 | 673 | if (@is_executable("$p/$commandName")) return "$p/$commandName"; 674 | 675 | } 676 | 677 | return false; 678 | 679 | } 680 | 681 | 682 | 683 | //执行系统命令 FreeBSD 684 | 685 | function do_command($commandName, $args) 686 | { 687 | 688 | $buffer = ""; 689 | 690 | if (false === ($command = find_command($commandName))) return false; 691 | 692 | if ($fp = @popen("$command $args", 'r')) 693 | { 694 | 695 | while (!@feof($fp)) 696 | { 697 | 698 | $buffer .= @fgets($fp, 4096); 699 | 700 | } 701 | 702 | return trim($buffer); 703 | 704 | } 705 | 706 | return false; 707 | 708 | } 709 | 710 | 711 | 712 | //windows系统探测 713 | 714 | function sys_windows() 715 | { 716 | 717 | if (PHP_VERSION >= 5) 718 | { 719 | 720 | $objLocator = new COM("WbemScripting.SWbemLocator"); 721 | 722 | $wmi = $objLocator->ConnectServer(); 723 | 724 | $prop = $wmi->get("Win32_PnPEntity"); 725 | 726 | } 727 | else 728 | { 729 | return false; 730 | 731 | } 732 | 733 | 734 | 735 | //CPU 736 | 737 | $cpuinfo = GetWMI($wmi,"Win32_Processor", array("Name","L2CacheSize","NumberOfCores")); 738 | 739 | $res['cpu']['num'] = $cpuinfo[0]['NumberOfCores']; 740 | 741 | if (null == $res['cpu']['num']) 742 | { 743 | 744 | $res['cpu']['num'] = 1; 745 | 746 | }/* 747 | 748 | for ($i=0;$i<$res['cpu']['num'];$i++) 749 | { 750 | 751 | $res['cpu']['model'] .= $cpuinfo[0]['Name']."
"; 752 | 753 | $res['cpu']['cache'] .= $cpuinfo[0]['L2CacheSize']."
"; 754 | 755 | }*/ 756 | $cpuinfo[0]['L2CacheSize'] = ' ('.$cpuinfo[0]['L2CacheSize'].')'; 757 | if($res['cpu']['num']==1) 758 | $x1 = ''; 759 | else 760 | $x1 = ' ×'.$res['cpu']['num']; 761 | $res['cpu']['model'] = $cpuinfo[0]['Name'].$cpuinfo[0]['L2CacheSize'].$x1; 762 | 763 | // SYSINFO 764 | 765 | $sysinfo = GetWMI($wmi,"Win32_OperatingSystem", array('LastBootUpTime','TotalVisibleMemorySize','FreePhysicalMemory','Caption','CSDVersion','SerialNumber','InstallDate')); 766 | 767 | $sysinfo[0]['Caption']=iconv('GBK', 'UTF-8',$sysinfo[0]['Caption']); 768 | 769 | $sysinfo[0]['CSDVersion']=iconv('GBK', 'UTF-8',$sysinfo[0]['CSDVersion']); 770 | 771 | $res['win_n'] = $sysinfo[0]['Caption']." ".$sysinfo[0]['CSDVersion']." 序列号:{$sysinfo[0]['SerialNumber']} 于".date('Y年m月d日H:i:s',strtotime(substr($sysinfo[0]['InstallDate'],0,14)))."安装"; 772 | 773 | //UPTIME 774 | 775 | $res['uptime'] = $sysinfo[0]['LastBootUpTime']; 776 | 777 | 778 | $sys_ticks = 3600*8 + time() - strtotime(substr($res['uptime'],0,14)); 779 | 780 | $min = $sys_ticks / 60; 781 | 782 | $hours = $min / 60; 783 | 784 | $days = floor($hours / 24); 785 | 786 | $hours = floor($hours - ($days * 24)); 787 | 788 | $min = floor($min - ($days * 60 * 24) - ($hours * 60)); 789 | 790 | if ($days !== 0) $res['uptime'] = $days."天"; 791 | 792 | if ($hours !== 0) $res['uptime'] .= $hours."小时"; 793 | 794 | $res['uptime'] .= $min."分钟"; 795 | 796 | 797 | //MEMORY 798 | 799 | $res['memTotal'] = round($sysinfo[0]['TotalVisibleMemorySize']/1024,2); 800 | 801 | $res['memFree'] = round($sysinfo[0]['FreePhysicalMemory']/1024,2); 802 | 803 | $res['memUsed'] = $res['memTotal']-$res['memFree']; //上面两行已经除以1024,这行不用再除了 804 | 805 | $res['memPercent'] = round($res['memUsed'] / $res['memTotal']*100,2); 806 | 807 | 808 | $swapinfo = GetWMI($wmi,"Win32_PageFileUsage", array('AllocatedBaseSize','CurrentUsage')); 809 | 810 | 811 | // LoadPercentage 812 | 813 | $loadinfo = GetWMI($wmi,"Win32_Processor", array("LoadPercentage")); 814 | 815 | $res['loadAvg'] = $loadinfo[0]['LoadPercentage']; 816 | 817 | 818 | return $res; 819 | 820 | } 821 | 822 | 823 | 824 | function GetWMI($wmi,$strClass, $strValue = array()) 825 | { 826 | 827 | $arrData = array(); 828 | 829 | 830 | $objWEBM = $wmi->Get($strClass); 831 | 832 | $arrProp = $objWEBM->Properties_; 833 | 834 | $arrWEBMCol = $objWEBM->Instances_(); 835 | 836 | foreach($arrWEBMCol as $objItem) 837 | { 838 | 839 | @reset($arrProp); 840 | 841 | $arrInstance = array(); 842 | 843 | foreach($arrProp as $propItem) 844 | { 845 | 846 | eval("\$value = \$objItem->" . $propItem->Name . ";"); 847 | 848 | if (empty($strValue)) 849 | { 850 | 851 | $arrInstance[$propItem->Name] = trim($value); 852 | 853 | } 854 | else 855 | { 856 | 857 | if (in_array($propItem->Name, $strValue)) 858 | { 859 | 860 | $arrInstance[$propItem->Name] = trim($value); 861 | 862 | } 863 | 864 | } 865 | 866 | } 867 | 868 | $arrData[] = $arrInstance; 869 | 870 | } 871 | 872 | return $arrData; 873 | 874 | } 875 | 876 | 877 | 878 | //比例条 879 | 880 | function bar($percent) 881 | { 882 | 883 | ?> 884 | 885 |
 
886 | 887 | "$du",'freeSpace'=>"$df",'hdPercent'=>"$hdPercent",'barhdPercent'=>"$hdPercent%",'TotalMemory'=>"$mt",'UsedMemory'=>"$mu",'FreeMemory'=>"$mf",'CachedMemory'=>"$mc",'Buffers'=>"$mb",'TotalSwap'=>"$st",'swapUsed'=>"$su",'swapFree'=>"$sf",'loadAvg'=>"$load",'uptime'=>"$uptime",'freetime'=>"$freetime",'bjtime'=>"$bjtime",'stime'=>"$stime",'memRealPercent'=>"$memRealPercent",'memRealUsed'=>"$memRealUsed",'memRealFree'=>"$memRealFree",'memPercent'=>"$memPercent%",'memCachedPercent'=>"$memCachedPercent",'barmemCachedPercent'=>"$memCachedPercent%",'swapPercent'=>"$swapPercent",'barmemRealPercent'=>"$memRealPercent%",'barswapPercent'=>"$swapPercent%",'NetOut2'=>"$NetOut[2]",'NetOut3'=>"$NetOut[3]",'NetOut4'=>"$NetOut[4]",'NetOut5'=>"$NetOut[5]",'NetOut6'=>"$NetOut[6]",'NetOut7'=>"$NetOut[7]",'NetOut8'=>"$NetOut[8]",'NetOut9'=>"$NetOut[9]",'NetOut10'=>"$NetOut[10]",'NetInput2'=>"$NetInput[2]",'NetInput3'=>"$NetInput[3]",'NetInput4'=>"$NetInput[4]",'NetInput5'=>"$NetInput[5]",'NetInput6'=>"$NetInput[6]",'NetInput7'=>"$NetInput[7]",'NetInput8'=>"$NetInput[8]",'NetInput9'=>"$NetInput[9]",'NetInput10'=>"$NetInput[10]",'NetOutSpeed2'=>"$NetOutSpeed[2]",'NetOutSpeed3'=>"$NetOutSpeed[3]",'NetOutSpeed4'=>"$NetOutSpeed[4]",'NetOutSpeed5'=>"$NetOutSpeed[5]",'NetInputSpeed2'=>"$NetInputSpeed[2]",'NetInputSpeed3'=>"$NetInputSpeed[3]",'NetInputSpeed4'=>"$NetInputSpeed[4]",'NetInputSpeed5'=>"$NetInputSpeed[5]"); 969 | 970 | $jarr=json_encode($arr); 971 | $_GET['callback'] = htmlspecialchars($_GET['callback']); 972 | 973 | echo $_GET['callback'],'(',$jarr,')'; 974 | 975 | exit; 976 | 977 | } 978 | 979 | ?> 980 | 981 | 982 | 983 | 984 | 985 | 986 | <?php echo $title.$version; ?> 987 | 988 | 989 | 990 | 991 | 992 | 1033 | 1034 | 1035 | 1036 | 1164 | 1165 | 1166 | 1167 | 1168 | 1169 | 1170 |
1171 | 1172 | 1173 | 1174 | 1175 | 1176 | 1177 | 1178 | 1179 | 1180 | 1181 | 1182 | 1183 | 1184 | 1185 | 1186 | 1187 |
PHP参数组件支持第三方组件数据库支持性能检测网速检测MySQL检测函数检测邮件检测探针下载
1188 | 1189 | 1190 | 1191 | 1192 | 1193 | 1194 | 1195 | 1196 | 1197 | 1198 | 1199 | 1200 | 1201 | 1202 | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | 1210 | 1211 | 1212 | 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 1221 | 1222 | 1223 | 1224 | 1225 | 1226 | 1227 | 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 1244 | 1245 | 1246 | 1247 | 1248 | 1249 | 1250 | 1251 | 1252 | 1253 | 1254 | 1255 | 1256 | 1257 | 1258 | 1259 | 1260 | 1261 |
服务器参数
服务器域名/IP地址 - ()  你的IP地址是:
服务器标识
服务器操作系统  内核版本:服务器解译引擎
服务器语言服务器端口
服务器主机名绝对路径
管理员邮箱探针路径
1262 | 1263 | 1264 | 1265 | 1266 | 1267 | 1268 | 1269 | 1270 | 1271 | 1272 | 1273 | 1274 | 1275 | 1276 | 1277 | 1278 | 1279 | 1280 | 1281 | 1282 | 1283 | 1284 | 1285 | 1286 | 1287 | 1288 | 1289 | 1290 | 1291 | 1293 | 1294 | 1295 | 1296 | 1303 | 1304 | 1305 | 1306 | 1307 | 1308 | 1388 | 1389 | 1390 | 1391 | 1392 | 1393 | 1394 | 1395 |
服务器实时数据
服务器当前时间服务器已运行时间
CPU型号 [核]
CPU使用状况查看图表";}else{echo "暂时只支持Linux系统";}?> 1292 |
硬盘使用状况 1297 | 总空间  G, 1298 | 已用  G, 1299 | 空闲  G, 1300 | 使用率 % 1301 |
 
1302 |
内存使用状况 1309 | 1310 | 1329 | 1330 | 物理内存:共 1331 | 1332 | 1333 | 1334 | , 已用 1335 | 1336 | 1337 | 1338 | , 空闲 1339 | 1340 | 1341 | 1342 | , 使用率 1343 | 1344 | 1345 | 1346 |
 
1347 | 0) 1350 | { 1351 | ?> 1352 | Cache化内存为 1353 | , 使用率 1354 | 1355 | % | Buffers缓冲为 1356 |
 
1357 | 1358 | 真实内存使用 1359 | 1360 | , 真实内存空闲 1361 | 1362 | , 使用率 1363 | 1364 | % 1365 |
 
1366 | 0) 1370 | { 1371 | ?> 1372 | SWAP区:共 1373 | 1374 | , 已使用 1375 | 1376 | , 空闲 1377 | 1378 | , 使用率 1379 | 1380 | % 1381 |
 
1382 | 1383 | 1386 | 1387 |
系统平均负载
1396 | 1397 | 1398 | 1399 | 1400 | 1401 | 1402 | 1403 | 1404 | 1405 | 1406 | 1407 | 1408 | 1409 | 1410 | 1411 | 1412 | 1413 | 1414 | 1415 | 1416 | 1417 | 1418 | 1419 | 1420 | 1421 | 1422 | 1423 |
网络使用状况
: 入网: 实时: 0B/s出网: 实时: 0B/s
1424 | 1425 | 1426 | 1427 | 1428 | 1429 | 1430 | 1431 | 1432 | 1433 | 1434 | 1435 | 1436 | 1437 | 1438 | 1439 | 1460 | 1461 | 1462 | 1463 |
PHP已编译模块检测
1440 | 1441 | $value) { 1446 | 1447 | if ($key!=0 && $key%13==0) { 1448 | 1449 | echo '
'; 1450 | 1451 | } 1452 | 1453 | echo "$value  "; 1454 | 1455 | } 1456 | 1457 | ?>
1458 | 1459 |
1464 | 1465 | 1466 | 1467 | 1468 | 1469 | 1470 | 1471 | 1472 | 1473 | 1474 | 1475 | 1488 | 1489 | 1490 | 1491 | 1492 | 1493 | 1494 | 1495 | 1496 | 1497 | 1498 | 1499 | 1500 | 1501 | 1502 | 1503 | 1504 | 1505 | 1506 | 1507 | 1508 | 1509 | 1510 | 1511 | 1512 | 1513 | 1514 | 1515 | 1516 | 1517 | 1518 | 1519 | 1520 | 1521 | 1522 | 1523 | 1524 | 1525 | 1526 | 1527 | 1528 | 1529 | 1530 | 1531 | 1532 | 1533 | 1534 | 1535 | 1536 | 1537 | 1538 | 1539 | 1540 | 1541 | 1542 | 1543 | 1544 | 1545 | 1546 | 1547 | 1548 | 1549 | 1550 | 1551 | 1552 | 1553 | 1554 | 1555 | 1556 | 1557 | 1558 | 1559 | 1560 | 1561 | 1562 | 1563 | 1564 | 1565 | 1566 | 1567 | 1568 | 1569 | 1570 | 1571 | 1572 | 1573 | 1574 | 1575 | 1576 | 1577 | 1578 | 1579 | 1580 | 1581 | 1582 | 1583 | 1584 | 1585 | 1586 | 1587 | 1588 | 1589 | 1590 | 1591 | 1592 | 1593 | 1594 | 1595 | 1596 | 1597 | 1598 | 1599 | 1600 | 1601 | 1602 | 1603 | 1604 | 1605 | 1606 | 1607 | 1608 | 1609 | 1610 | 1611 | 1612 | 1613 | 1614 | 1615 | 1616 | 1617 | 1618 | 1619 | 1620 | 1621 | 1622 | 1623 | 1624 | 1625 | 1626 | 1627 | 1628 | 1629 | 1630 | 1631 | 1632 | 1633 | 1634 | 1635 | 1636 | 1637 | 1638 | 1639 | 1640 | 1641 | 1642 | 1643 | 1644 | 1645 | 1646 | 1647 | 1648 | 1649 | 1650 | 1651 | 1652 | 1653 | 1654 | 1655 | 1656 | 1657 | 1658 | 1659 | 1660 | 1661 | 1662 | 1663 | 1664 | 1665 | 1666 | 1667 | 1668 | 1669 | 1670 | 1671 | 1672 | 1673 | 1674 | 1696 | 1697 | 1698 |
PHP相关参数
PHP信息(phpinfo): 1476 | 1477 | 1484 | 1485 | ×' :"PHPINFO";?> 1486 | 1487 | PHP版本(php_version):
PHP运行方式:脚本占用最大内存(memory_limit):
PHP安全模式(safe_mode):POST方法提交最大限制(post_max_size):
上传文件最大限制(upload_max_filesize):浮点型数据显示的有效位数(precision):
脚本超时时间(max_execution_time):socket超时时间(default_socket_timeout):
PHP页面根目录(doc_root):用户根目录(user_dir):
dl()函数(enable_dl):指定包含文件目录(include_path):
显示错误信息(display_errors):自定义全局变量(register_globals):
数据反斜杠转义(magic_quotes_gpc):"<?...?>"短标签(short_open_tag):
"<% %>"ASP风格标记(asp_tags):忽略重复错误信息(ignore_repeated_errors):
忽略重复的错误源(ignore_repeated_source):报告内存泄漏(report_memleaks):
自动字符串转义(magic_quotes_gpc):外部字符串自动转义(magic_quotes_runtime):
打开远程文件(allow_url_fopen):声明argv和argc变量(register_argc_argv):
Cookie 支持:√' : '×';?>拼写检查(ASpell Library):
高精度数学运算(BCMath):PREL相容语法(PCRE):
PDF文档支持:SNMP网络管理协议:
VMailMgr邮件处理:Curl支持:
SMTP支持:√' : '×';?>SMTP地址:×';?>
默认支持函数(enable_functions):请点这里查看详细!
被禁用的函数(disable_functions): 1675 | ×'; 1680 | } 1681 | else 1682 | { 1683 | //echo $disFuns; 1684 | $disFuns_array = explode(',',$disFuns); 1685 | foreach ($disFuns_array as $key=>$value) 1686 | { 1687 | if ($key!=0 && $key%5==0) { 1688 | echo '
'; 1689 | } 1690 | echo "$value  "; 1691 | } 1692 | } 1693 | 1694 | ?> 1695 |
1699 | 1700 | 1701 | 1702 | 1703 | 1704 | 1705 | 1706 | 1707 | 1708 | 1709 | 1710 | 1711 | 1712 | 1713 | 1714 | 1715 | 1716 | 1717 | 1718 | 1719 | 1720 | 1721 | 1722 | 1723 | 1724 | 1725 | 1726 | 1727 | 1728 | 1729 | 1730 | 1731 | 1732 | 1733 | 1734 | 1735 | 1736 | 1738 | 1739 | 1740 | 1741 | 1742 | 1743 | 1744 | 1745 | 1746 | 1747 | 1748 | 1749 | 1762 | 1763 | 1764 | 1765 | 1766 | 1767 | 1768 | 1769 | 1770 | 1771 | 1772 | 1773 | 1774 | 1775 | 1776 | 1777 | 1778 | 1779 | 1780 | 1781 | 1782 | 1783 | 1784 | 1785 | 1786 | 1787 | 1788 | 1789 | 1790 | 1791 | 1792 | 1793 | 1794 | 1795 | 1796 | 1797 | 1798 | 1799 | 1800 | 1801 | 1802 | 1803 | 1804 | 1805 | 1806 | 1807 | 1808 | 1809 | 1810 | 1811 | 1812 | 1813 | 1814 | 1815 | 1816 | 1817 | 1818 | 1819 | 1820 | 1821 | 1822 | 1823 | 1824 | 1825 | 1826 | 1827 | 1828 | 1829 |
组件支持
FTP支持:XML解析支持:
Session支持:Socket支持:
Calendar支持 1737 | 允许URL打开文件:
GD库支持: 1750 | 1751 | ×';} 1760 | 1761 | ?>压缩文件支持(Zlib):
IMAP电子邮件系统函数库:历法运算函数库:
正则表达式函数库:WDDX支持:
Iconv编码转换:mbstring:
高精度数学运算:LDAP目录协议:
MCrypt加密处理:哈稀计算:
1830 | 1831 | 1832 | 1833 | 1834 | 1835 | 1836 | 1837 | 1838 | 1852 | 1853 | 1854 | 1855 | 1856 | 1857 | 1858 | 1859 | 1860 | 1861 | 1862 | 1863 | 1864 | 1865 | 1866 |
第三方组件
Zend版本×';}else{echo $zend_version;}?> 1839 | 2) 1843 | { 1844 | echo "ZendGuardLoader[启用]"; 1845 | } 1846 | else 1847 | { 1848 | echo "Zend Optimizer"; 1849 | } 1850 | ?> 1851 | 2){echo (get_cfg_var("zend_loader.enable"))?'':'×';} else{if(function_exists('zend_optimizer_version')){ echo zend_optimizer_version();}else{ echo (get_cfg_var("zend_optimizer.optimization_level")||get_cfg_var("zend_extension_manager.optimizer_ts")||get_cfg_var("zend.ze1_compatibility_mode")||get_cfg_var("zend_extension_ts"))?'':'×';}}?>
eAccelerator×";} ?>ioncube×";}?>
XCache×";} ?>APC×";} ?>
1867 | 1868 | 1869 | 1870 | 1871 | 1872 | 1873 | 1874 | 1875 | 1876 | 1877 | 1878 | 1879 | 1880 | 1898 | 1899 | 1900 | 1901 | 1902 | 1903 | 1904 | 1905 | 1906 | 1907 | 1908 | 1909 | 1910 | 1911 | 1912 | 1913 | 1914 | 1915 | 1916 | 1917 | 1918 | 1919 | 1920 | 1921 | 1922 | 1923 | 1924 | 1925 | 1926 | 1927 | 1928 | 1929 | 1930 | 1931 | 1932 | 1933 | 1934 | 1935 | 1936 | 1937 | 1938 | 1939 | 1940 | 1941 | 1942 | 1943 | 1944 | 1945 | 1946 | 1947 | 1948 | 1949 | 1950 | 1951 | 1952 | 1953 | 1954 | 1955 | 1956 | 1957 | 1958 | 1959 | 1960 | 1961 | 1962 | 1963 | 1964 | 1965 |
数据库支持
MySQL 数据库: 1881 | 1882 | 1896 | 1897 | ODBC 数据库:
Oracle 数据库:SQL Server 数据库:
dBASE 数据库:mSQL 数据库:
SQLite 数据库:√ ';echo "SQLite3 Ver ";echo $sqliteVer[versionString];}else {echo isfun("sqlite_close");if(isfun("sqlite_close") == '') {echo "  版本: ".@sqlite_libversion();}}?>Hyperwave 数据库:
Postgre SQL 数据库:Informix 数据库:
DBA 数据库:DBM 数据库:
FilePro 数据库:SyBase 数据库:
1966 | 1967 | 1968 | 1969 |
" method="post"> 1970 | 1971 | 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | 1979 | 1980 | 1981 | 1982 | 1983 | 1984 | 1985 | 1986 | 1987 | 1988 | 1989 | 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 | 2005 | 2006 | 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 | 2030 | 2031 | 2032 | 2033 | 2034 | 2035 | 2036 | 2037 | 2038 | 2039 | 2040 | 2041 | 2042 | 2043 | 2044 | 2045 | 2046 | 2047 | 2048 | 2049 | 2050 | 2051 | 2052 | 2053 | 2054 | 2055 | 2056 | 2057 | 2058 | 2059 | 2060 | 2061 | 2062 | 2063 | 2064 | 2065 | 2066 | 2067 | 2068 | 2069 | 2070 | 2071 | 2072 | 2073 | 2074 | 2075 | 2076 | 2077 | 2078 | 2079 | 2080 | 2081 | 2082 |
服务器性能检测
参照对象整数运算能力检测
(1+1运算300万次)
浮点运算能力检测
(圆周率开平方300万次)
数据I/O能力检测
(读取10K文件1万次)
CPU信息
美国 LinodeVPS0.357秒0.802秒0.023秒4 x Xeon L5520 @ 2.27GHz
美国 PhotonVPS.com0.431秒1.024秒0.034秒8 x Xeon E5520 @ 2.27GHz
德国 SpaceRich.com0.421秒1.003秒0.038秒4 x Core i7 920 @ 2.67GHz
美国 RiZie.com0.521秒1.559秒0.054秒2 x Pentium4 3.00GHz
埃及 CitynetHost.com0.343秒0.761秒0.023秒2 x Core2Duo E4600 @ 2.40GHz
美国 IXwebhosting.com0.535秒1.607秒0.058秒4 x Xeon E5530 @ 2.40GHz
本台服务器


2083 | 2084 | 2085 | 2086 | 2087 | 2088 | 2089 | 2090 | 2091 | 2092 | 2093 | 2094 | 2095 | 2100 | 2145 | 2146 |
网络速度测试
2096 |
2097 | 向客户端传送1000k字节数据
2098 | 带宽比例按理想值计算 2099 |
2101 | 2102 | 2103 | 2104 | 2105 | 2106 | 2107 | 2108 | 2109 | 2110 | 2111 | 2112 | 2113 | 2114 | 2115 | 2116 | 2117 | 2140 | 2141 |
带宽1M2M3M4M5M6M7M8M9M10M
2118 | 2119 | 2128 | 2137 | 2138 |
">">
2139 |
2142 | ".$_GET['speed']." 毫秒,下载速度:"."".$speed.""." kb/s,需测试多次取平均值,超过10M直接看下载速度":" 未探测 " ?> 2143 | 2144 |
2147 | 2148 | 2149 | 2150 | 2151 | 2152 | 2153 | 2154 | 2155 | 2156 | 2157 | 2158 | 2159 | 2160 | 2171 | 2172 | 2177 | 2178 | 2179 | 2180 |
MySQL数据库连接检测
2161 | 2162 | 地址: 2163 | 2164 | 端口: 2165 | 2166 | 用户名: 2167 | 2168 | 密码: 2169 | 2170 | 2173 | 2174 | 2175 | 2176 |
2181 | 2182 | alert('连接到MySql数据库正常')"; 2193 | 2194 | } else { 2195 | 2196 | echo ""; 2197 | 2198 | } 2199 | 2200 | } else { 2201 | 2202 | echo ""; 2203 | 2204 | } 2205 | 2206 | } 2207 | 2208 | ?> 2209 | 2210 | 2211 | 2212 | 2213 | 2214 | 2215 | 2216 | 2217 | 2218 | 2219 | 2220 | 2221 | 2222 | 2229 | 2230 | 2235 | 2236 | 2237 | 2238 | alert('$funRe')"; 2243 | 2244 | } 2245 | 2246 | ?> 2247 | 2248 |
函数检测
2223 | 2224 | 请输入您要检测的函数: 2225 | 2226 | 2227 | 2228 | 2231 | 2232 | 2233 | 2234 |
2249 | 2250 | 2251 | 2252 | 2253 | 2254 | 2255 | 2256 | 2257 | 2258 | 2259 | 2260 | 2261 | 2262 | 2269 | 2270 | 2275 | 2276 | 2277 | 2278 | alert('$mailRe')"; 2283 | 2284 | } 2285 | 2286 | ?> 2287 | 2288 |
邮件发送检测
2263 | 2264 | 请输入您要检测的邮件地址: 2265 | 2266 | 2267 | 2268 | 2271 | 2272 | 2273 | 2274 |
2289 | 2290 |
2291 | 2292 | 2293 | 2294 | 2295 | 2296 | 2297 | 2298 | 2299 | 2300 |
Processed in seconds. memory usage.返回顶部
2301 | 2302 |
2303 | 2304 | 2305 | 2306 | 2307 | --------------------------------------------------------------------------------