281 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			281 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?php
 | ||
| /*
 | ||
|  * 统计中心
 | ||
|  */
 | ||
| require_once '../application/header.php';
 | ||
| require_once APP_ROOT . '/config/api_key.php';
 | ||
| require_once APP_ROOT . '/api/function_API.php';
 | ||
| require_once APP_ROOT . '/application/chart.php';
 | ||
| 
 | ||
| // 检测登录
 | ||
| if (!is_online()) {
 | ||
|     checkLogin();
 | ||
| }
 | ||
| // 删除统计文件
 | ||
| if (isset($_POST['del_total'])) {
 | ||
|     @deldir($_POST['del_total']);
 | ||
|     echo '
 | ||
| 		<script>
 | ||
| 		new $.zui.Messager("删除统计成功!", {type: "success" // 定义颜色主题 
 | ||
| 		}).show();
 | ||
| 		</script>
 | ||
| 		';
 | ||
|     // 延时1s刷新
 | ||
|     Header("refresh:1;url=counts.php");
 | ||
| }
 | ||
| // 统计图表
 | ||
| // array_reverse($arr,true) 倒叙数组并保持键值关系
 | ||
| $char_data = read_chart_total();
 | ||
| if (is_array($char_data)) {
 | ||
|     $chart_date =  '';
 | ||
|     foreach (array_reverse($char_data['date'], true) as $value) {
 | ||
|         $chart_date .= $value;
 | ||
|     }
 | ||
|     $chart_date = str_replace(date('Y/'), '', $chart_date); // 删除年份
 | ||
| 
 | ||
|     $chart_number = '';
 | ||
|     foreach (array_reverse($char_data['number'], true) as $value) {
 | ||
|         $chart_number .= $value;
 | ||
|     }
 | ||
| 
 | ||
|     $chart_disk = '';
 | ||
|     foreach (array_reverse($char_data['disk'], true) as $value) {
 | ||
|         $chart_disk .= $value;
 | ||
|     }
 | ||
| }
 | ||
| ?>
 | ||
| <style>
 | ||
|     .autoshadow {
 | ||
|         box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1);
 | ||
|         border: 1px;
 | ||
|         margin: 0px 0px 10px 10px;
 | ||
|         width: 101px;
 | ||
|         height: 80px;
 | ||
|         text-align: center;
 | ||
|     }
 | ||
| 
 | ||
|     .autoshadow:hover {
 | ||
|         width: 105px;
 | ||
|         height: 80px;
 | ||
|         border: 2px;
 | ||
|         box-shadow: 3px 2px 3px 2px rgba(19, 17, 36, 0.5);
 | ||
|     }
 | ||
| </style>
 | ||
| <div class="row">
 | ||
|     <div class="clo-md-12">
 | ||
|         <div class="alert alert-warning">
 | ||
|             <form action="counts.php" method="post">
 | ||
|                 <span>统计时间:<?php echo $char_data['total_time']; ?></span>
 | ||
|                 <input type="hidden" name="del_total" value="<?php echo APP_ROOT . '/admin/logs/counts/'; ?>">
 | ||
|                 <button class="btn btn-mini btn-danger">重新统计</button>
 | ||
|             </form>
 | ||
|         </div>
 | ||
|     </div>
 | ||
|     <div class="col-md-12">
 | ||
|         <div class="col-md-6">
 | ||
|             <div class="col-md-2 alert  alert-success autoshadow">今日上传
 | ||
|                 <hr />
 | ||
|                 <?php printf("%u 张", preg_replace('/\D/s', '', $char_data['number'][0])); ?>
 | ||
|             </div>
 | ||
|             <div class="col-md-2 alert  alert-success autoshadow">昨日上传
 | ||
|                 <hr />
 | ||
|                 <?php printf("%u 张", preg_replace('/\D/s', '', $char_data['number'][1])); ?>
 | ||
|             </div>
 | ||
|             <div class="col-md-2 alert alert-primary autoshadow">
 | ||
|                 累计上传
 | ||
|                 <hr />
 | ||
|                 <?php printf("%u 张", read_total_json('filenum')); ?>
 | ||
|             </div>
 | ||
| 
 | ||
|             <div class="col-md-2 alert alert-primary autoshadow">
 | ||
|                 缓存文件
 | ||
|                 <hr />
 | ||
|                 <?php printf("%u 张", getFileNumber(APP_ROOT . $config['path'] . 'thumbnails/')); ?>
 | ||
|             </div>
 | ||
|             <div class="col-md-2 alert alert-primary autoshadow">
 | ||
|                 可疑图片
 | ||
|                 <hr />
 | ||
|                 <?php printf("%u 张", getFileNumber(APP_ROOT . $config['path'] . 'suspic/')); ?>
 | ||
|             </div>
 | ||
|             <div class="col-md-2 alert alert-primary autoshadow">
 | ||
|                 文件夹
 | ||
|                 <hr />
 | ||
|                 <?php printf("%d 个", read_total_json('dirnum')); ?>
 | ||
|             </div>
 | ||
|             <div class="col-md-2 alert alert-primary autoshadow">
 | ||
|                 占用存储
 | ||
|                 <hr />
 | ||
|                 <?php echo getDistUsed(disk_total_space('.') - disk_free_space('.')); ?>
 | ||
|             </div>
 | ||
|             <div class="col-md-2 alert alert-primary autoshadow">
 | ||
|                 剩余空间
 | ||
|                 <hr />
 | ||
|                 <?php echo getDistUsed(disk_free_space('.')); ?>
 | ||
|             </div>
 | ||
|         </div>
 | ||
|         <div class="col-md-6">
 | ||
|             <div id="myPieChart" style="width:300px;height: 300px;"></div>
 | ||
|         </div>
 | ||
|     </div>
 | ||
|     <div class="col-md-12">
 | ||
|         <hr />
 | ||
|         <div id="myLineChart" style="width: 100%;height: 300px;"></div>
 | ||
|         <h4 style="text-align: center;">最近30日上传趋势与空间占用</h4>
 | ||
|     </div>
 | ||
| </div>
 | ||
| 
 | ||
| 
 | ||
| <script src="<?php static_cdn(); ?>/public/static/echarts/echarts.common.min.js"></script>
 | ||
| <script>
 | ||
|     // 文件统计-折线图
 | ||
|     var myChart = echarts.init(document.getElementById('myLineChart'));
 | ||
|     window.onresize = function() {
 | ||
|         myChart.resize();
 | ||
|     };
 | ||
| 
 | ||
|     var LineChart = {
 | ||
|         color: ['#EA644A', '#38B03F'],
 | ||
|         title: {
 | ||
|             // text: '最近30日上传趋势与空间占用'
 | ||
|         },
 | ||
|         tooltip: {
 | ||
|             trigger: 'axis',
 | ||
|             axisPointer: {
 | ||
|                 type: 'cross',
 | ||
|                 label: {
 | ||
|                     backgroundColor: '#6a7985'
 | ||
|                 }
 | ||
|             }
 | ||
|         },
 | ||
|         legend: {
 | ||
|             data: ['上传', '占用']
 | ||
|         },
 | ||
|         toolbox: {
 | ||
|             feature: {
 | ||
|                 saveAsImage: {}
 | ||
|             }
 | ||
|         },
 | ||
|         grid: {
 | ||
|             left: '3%',
 | ||
|             right: '4%',
 | ||
|             bottom: '3%',
 | ||
|             containLabel: true
 | ||
|         },
 | ||
|         xAxis: {
 | ||
|             type: 'category',
 | ||
|             boundaryGap: false,
 | ||
|             data: [<?php echo rtrim($chart_date, ','); ?>],
 | ||
|         },
 | ||
|         yAxis: {
 | ||
|             type: 'value',
 | ||
|             boundaryGap: [0, '100%']
 | ||
|         },
 | ||
|         dataZoom: [{ // 放大镜
 | ||
|                 type: 'inside',
 | ||
|                 start: 50,
 | ||
|                 end: 100
 | ||
|             },
 | ||
|             {
 | ||
|                 start: 0,
 | ||
|                 end: 10
 | ||
|             }
 | ||
|         ],
 | ||
|         series: [{
 | ||
|                 name: '占用',
 | ||
|                 type: 'line',
 | ||
|                 stack: 'x',
 | ||
|                 smooth: true,
 | ||
|                 areaStyle: {},
 | ||
|                 emphasis: {
 | ||
|                     focus: 'series'
 | ||
|                 },
 | ||
|                 data: [<?php echo rtrim($chart_disk, ','); ?>],
 | ||
|             }, {
 | ||
|                 name: '上传',
 | ||
|                 type: 'line',
 | ||
|                 stack: 'x',
 | ||
|                 smooth: true,
 | ||
|                 areaStyle: {},
 | ||
|                 emphasis: {
 | ||
|                     focus: 'series'
 | ||
|                 },
 | ||
|                 data: [<?php echo rtrim($chart_number, ','); ?>],
 | ||
|             },
 | ||
| 
 | ||
|         ]
 | ||
|     };
 | ||
|     myChart.setOption(LineChart);
 | ||
| 
 | ||
| 
 | ||
|     // 硬盘统计-饼状图
 | ||
|     var myChart = echarts.init(document.getElementById('myPieChart'));
 | ||
| 
 | ||
|     myPieChart = {
 | ||
|         color: ['#38B03F', '#353535'],
 | ||
|         title: {
 | ||
|             // text: '硬盘使用统计:(GB)',
 | ||
|             left: 'center'
 | ||
|         },
 | ||
|         tooltip: {
 | ||
|             trigger: 'item',
 | ||
|             formatter: '{a} <br/>{b} : {c} GB ({d}%)'
 | ||
|         },
 | ||
|         legend: {
 | ||
|             orient: 'vertical',
 | ||
|             left: 'left',
 | ||
|             data: ['剩余空间', '已用空间']
 | ||
|         },
 | ||
|         series: [{
 | ||
|             name: '硬盘使用:',
 | ||
|             type: 'pie',
 | ||
|             radius: '55%',
 | ||
|             center: ['50%', '60%'],
 | ||
|             data: [{
 | ||
|                     value: <?php echo  round(disk_free_space('.') / 1024 / 1024 / 1024, 2); ?>,
 | ||
|                     name: '剩余空间',
 | ||
|                 },
 | ||
|                 {
 | ||
|                     value: <?php echo round((disk_total_space('.') - disk_free_space('.')) / 1024 / 1024 / 1024, 2); ?>,
 | ||
|                     name: '已用空间'
 | ||
|                 },
 | ||
|             ],
 | ||
|             emphasis: {
 | ||
|                 itemStyle: {
 | ||
|                     shadowBlur: 10,
 | ||
|                     shadowOffsetX: 0,
 | ||
|                     shadowColor: 'rgba(0, 0, 0, 0.5)'
 | ||
|                 }
 | ||
|             }
 | ||
|         }]
 | ||
|     };
 | ||
|     // 使用刚指定的配置项和数据显示图表。
 | ||
|     myChart.setOption(myPieChart);
 | ||
| 
 | ||
|     let currentIndex = -1;
 | ||
| 
 | ||
|     setInterval(function() {
 | ||
|         var dataLen = myPieChart.series[0].data.length;
 | ||
|         // 取消之前高亮的图形
 | ||
|         myChart.dispatchAction({
 | ||
|             type: 'downplay',
 | ||
|             seriesIndex: 0,
 | ||
|             dataIndex: currentIndex
 | ||
|         });
 | ||
|         currentIndex = (currentIndex + 1) % dataLen;
 | ||
|         // 高亮当前图形
 | ||
|         myChart.dispatchAction({
 | ||
|             type: 'highlight',
 | ||
|             seriesIndex: 0,
 | ||
|             dataIndex: currentIndex
 | ||
|         });
 | ||
|         // 显示 tooltip
 | ||
|         myChart.dispatchAction({
 | ||
|             type: 'showTip',
 | ||
|             seriesIndex: 0,
 | ||
|             dataIndex: currentIndex
 | ||
|         });
 | ||
|     }, 1000);
 | ||
| </script>
 | ||
| 
 | ||
| <?php require_once APP_ROOT . '/application/footer.php';
 |