Server : Apache System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/saimikebio.com/mobile/ecshopjcw/ |
<?php /** * ECSHOP 综合流量统计 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。 * 网站地址: http://www.ecshop.com; * ---------------------------------------------------------------------------- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 * 使用;不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ * $Author: liubo $ * $Id: flow_stats.php 17217 2011-01-19 06:29:08Z liubo $ */ define('IN_ECTOUCH', true); require(dirname(__FILE__) . '/includes/init.php'); require_once(ROOT_PATH . 'lang/' .$_CFG['lang']. '/admin/statistic.php'); $smarty->assign('lang', $_LANG); /* act操作项的初始化 */ if (empty($_REQUEST['act'])) { $_REQUEST['act'] = 'view'; } else { $_REQUEST['act'] = trim($_REQUEST['act']); } if ($_REQUEST['act'] == 'view') { if ($_CFG['visit_stats'] == 'off') { sys_msg($_LANG['stats_off']); exit(); } admin_priv('client_flow_stats'); $is_multi = empty($_POST['is_multi']) ? false : true; /* 时间参数 */ if (isset($_POST['start_date']) && !empty($_POST['end_date'])) { $start_date = local_strtotime($_POST['start_date']); $end_date = local_strtotime($_POST['end_date']); } else { $today = local_strtotime(local_date('Y-m-d')); $start_date = $today - 86400 * 7; $end_date = $today; } $start_date_arr = array(); $end_date_arr = array(); if(!empty($_POST['year_month'])) { $tmp = $_POST['year_month']; for ($i = 0; $i < count($tmp); $i++) { if (!empty($tmp[$i])) { $tmp_time = local_strtotime($tmp[$i] . '-1'); $start_date_arr[] = $tmp_time; $end_date_arr[] = local_strtotime($tmp[$i] . '-' . date('t', $tmp_time)); } } } else { $tmp_time = local_strtotime(local_date('Y-m-d')); $start_date_arr[] = local_strtotime(local_date('Y-m') . '-1'); $end_date_arr[] = local_strtotime(local_date('Y-m') . '-31');; } /* ------------------------------------- */ /* --综合流量 /* ------------------------------------- */ $max = 0; if(!$is_multi) { $general_xml = "<graph caption='$_LANG[general_stats]' shownames='1' showvalues='1' decimalPrecision='0' yaxisminvalue='0' yaxismaxvalue='%d' animation='1' outCnvBaseFontSize='12' baseFontSize='12' xaxisname='$_LANG[date]' yaxisname='$_LANG[access_count]' >"; $sql = "SELECT FLOOR((access_time - $start_date) / (24 * 3600)) AS sn, access_time, COUNT(*) AS access_count". " FROM " .$ecs->table('stats'). " WHERE access_time >= '$start_date' AND access_time <= " .($end_date + 86400). " GROUP BY sn"; $res = $db->query($sql); $key = 0; while ($val = $db->fetchRow($res)) { $val['access_date'] = gmdate('m-d',$val['access_time'] + $timezone * 3600); $general_xml .= "<set name='$val[access_date]' value='$val[access_count]' color='" .chart_color($key). "' />"; if ($val['access_count'] > $max) { $max = $val['access_count']; } $key++; } $general_xml .= '</graph>'; $general_xml = sprintf($general_xml, $max); } else { $general_xml = "<graph caption='$_LANG[general_stats]' lineThickness='1' showValues='0' formatNumberScale='0' anchorRadius='2' divLineAlpha='20' divLineColor='CC3300' divLineIsDashed='1' showAlternateHGridColor='1' alternateHGridAlpha='5' alternateHGridColor='CC3300' shadowAlpha='40' labelStep='2' numvdivlines='5' chartRightMargin='35' bgColor='FFFFFF,CC3300' bgAngle='270' bgAlpha='10,10' outCnvBaseFontSize='12' baseFontSize='12' >"; foreach($start_date_arr AS $k => $val) { $seriesName = local_date('Y-m', $start_date_arr[$k]); $general_xml .= "<dataset seriesName='$seriesName' color='" . chart_color($k) . "' anchorBorderColor='" . chart_color($k) . "' anchorBgColor='" . chart_color($k) . "'>"; $sql = "SELECT FLOOR((access_time - $start_date_arr[$k]) / (24 * 3600)) AS sn, access_time, COUNT(*) AS access_count". " FROM " .$ecs->table('stats'). " WHERE access_time >= '$start_date_arr[$k]' AND access_time <= " .($end_date_arr[$k] + 86400). " GROUP BY sn"; $res = $db->query($sql); $lastDay = 0; while ($val = $db->fetchRow($res)) { $day = gmdate('d',$val['access_time'] + $timezone * 3600); if ($lastDay == 0) { $time_span = (($day-1) - $lastDay); $lastDay++; for (; $lastDay < $day; $lastDay++) { $general_xml .= "<set value='0' />"; } } $general_xml .= "<set value='$val[access_count]' />"; $lastDay = $day; } $general_xml .= "</dataset>"; } $general_xml .= "<categories>"; for ($i = 1;$i<=31;$i++) { $general_xml .= "<category label='$i' />"; } $general_xml .= "</categories>"; $general_xml .= "</graph>"; } /* ------------------------------------- */ /* --地域分布 /* ------------------------------------- */ $area_xml = ''; if(!$is_multi) { $area_xml .= "<graph caption='".$_LANG['area_stats']."' shownames='1' showvalues='1' decimalPrecision='2' outCnvBaseFontSize='13' baseFontSize='13' pieYScale='45' pieBorderAlpha='40' pieFillAlpha='70' pieSliceDepth='15' pieRadius='100' bgAngle='460'>"; $sql = "SELECT COUNT(*) AS access_count, area FROM " . $ecs->table('stats') . " WHERE access_time >= '$start_date' AND access_time < " .($end_date + 86400). " GROUP BY area ORDER BY access_count DESC LIMIT 20"; $res = $db->query($sql); $key = 0; while ($val = $db->fetchRow($res)) { $area = empty($val['area']) ? 'unknow' : $val['area']; $area_xml .= "<set name='$area' value='$val[access_count]' color='" .chart_color($key). "' />"; $key++; } $area_xml .= '</graph>'; } else { $where = ''; foreach($start_date_arr AS $k => $val) { if ($where != '') { $where .= ' or '; } $where .= "(access_time >= '$start_date_arr[$k]' AND access_time <= " .($end_date_arr[$k] + 86400).")"; } $sql = "SELECT access_time, area FROM " . $ecs->table('stats') . " WHERE $where"; $res = $db->query($sql); $area_arr = array(); while ($val = $db->fetchRow($res)) { $date = local_date('Y-m', $val['access_time']); $area_arr[$val['area']] = null; if (isset($category[$date][$val['area']])) { $category[$date][$val['area']]++; } else { $category[$date][$val['area']] = 1; } } $area_xml = "<chart palette='2' caption='$_LANG[area_stats]' shownames='1' showvalues='0' numberPrefix='' useRoundEdges='1' legendBorderAlpha='0' outCnvBaseFontSize='13' baseFontSize='13'>"; $area_xml .= "<categories>"; foreach ($area_arr AS $k => $v) { $area_xml .= "<category label='$k'/>"; } $area_xml .= "</categories>"; $key = 0; foreach($start_date_arr AS $val) { $key++; $date = local_date('Y-m', $val); $area_xml .= "<dataset seriesName='$date' color='" .chart_color($key). "' showValues='0'>"; foreach ($area_arr AS $k => $v) { if (isset($category[$date][$k])) { $area_xml .= "<set value='" .$category[$date][$k]. "'/>"; } else { $area_xml .= "<set value='0'/>"; } } $area_xml .= "</dataset>"; } $area_xml .= "</chart>"; } /* ------------------------------------- */ /* --来源网站 /* ------------------------------------- */ if(!$is_multi) { $from_xml = "<graph caption='$_LANG[from_stats]' shownames='1' showvalues='1' decimalPrecision='2' outCnvBaseFontSize='12' baseFontSize='12' pieYScale='45' pieBorderAlpha='40' pieFillAlpha='70' pieSliceDepth='15' pieRadius='100' bgAngle='460'>"; $sql = "SELECT COUNT(*) AS access_count, referer_domain FROM " . $ecs->table('stats') . " WHERE access_time >= '$start_date' AND access_time <= " .($end_date + 86400). " GROUP BY referer_domain ORDER BY access_count DESC LIMIT 20"; $res = $db->query($sql); $key = 0; while ($val = $db->fetchRow($res)) { $from = empty($val['referer_domain']) ? $_LANG['input_url'] : $val['referer_domain']; $from_xml .= "<set name='".str_replace(array('http://', 'https://'), array('', ''), $from) . "' value='$val[access_count]' color='" . chart_color($key). "' />"; $key++; } $from_xml .= '</graph>'; } else { $where = ''; foreach($start_date_arr AS $k => $val) { if ($where != '') { $where .= ' or '; } $where .= "(access_time >= '$start_date_arr[$k]' AND access_time <= " .($end_date_arr[$k] + 86400).")"; } $sql = "SELECT access_time, referer_domain FROM " . $ecs->table('stats') . " WHERE $where"; $res = $db->query($sql); $domain_arr = array(); while ($val = $db->fetchRow($res)) { $date = local_date('Y-m', $val['access_time']); $domain_arr[$val['referer_domain']] = null; if (isset($category[$date][$val['referer_domain']])) { $category[$date][$val['referer_domain']]++; } else { $category[$date][$val['referer_domain']] = 1; } } $from_xml = "<chart palette='2' caption='$_LANG[from_stats]' shownames='1' showvalues='0' numberPrefix='' useRoundEdges='1' legendBorderAlpha='0' outCnvBaseFontSize='13' baseFontSize='13'>"; $from_xml .= "<categories>"; foreach ($domain_arr AS $k => $v) { $from = $k == '' ? $_LANG['input_url'] : $k; $from_xml .= "<category label='$from'/>"; } $from_xml .= "</categories>"; $key = 0; foreach($start_date_arr AS $val) { $key++; $date = local_date('Y-m', $val); $from_xml .= "<dataset seriesName='$date' color='" .chart_color($key). "' showValues='0'>"; foreach ($domain_arr AS $k => $v) { if (isset($category[$date][$k])) { $from_xml .= "<set value='" .$category[$date][$k]. "'/>"; } else { $from_xml .= "<set value='0'/>"; } } $from_xml .= "</dataset>"; } $from_xml .= "</chart>"; } /* 模板赋值 */ $smarty->assign('ur_here', $_LANG['flow_stats']); $smarty->assign('general_data', $general_xml); $smarty->assign('area_data', $area_xml); $smarty->assign('is_multi', $is_multi); $smarty->assign('from_data', $from_xml); /* 显示日期 */ $smarty->assign('start_date', local_date('Y-m-d', $start_date)); $smarty->assign('end_date', local_date('Y-m-d', $end_date)); for ($i = 0; $i < 5; $i++) { if (isset($start_date_arr[$i])) { $start_date_arr[$i] = local_date('Y-m', $start_date_arr[$i]); } else { $start_date_arr[$i] = null; } } $smarty->assign('start_date_arr', $start_date_arr); if (!$is_multi) { $filename = gmdate($_CFG['date_format'], $start_date + $timezone * 3600) . '_' . gmdate($_CFG['date_format'], $end_date + $timezone * 3600); $smarty->assign('action_link', array('text' => $_LANG['down_flow_stats'], 'href'=>'flow_stats.php?act=download&filename=' . $filename . '&start_date=' . $start_date . '&end_date=' . $end_date)); } /* 显示页面 */ assign_query_info(); $smarty->display('flow_stats.htm'); } /* 报表下载 */ elseif ($act = 'download') { $filename = !empty($_REQUEST['filename']) ? trim($_REQUEST['filename']) : ''; header("Content-type: application/vnd.ms-excel; charset=utf-8"); header("Content-Disposition: attachment; filename=$filename.xls"); $start_date = empty($_GET['start_date']) ? strtotime('-20 day') : intval($_GET['start_date']); $end_date = empty($_GET['end_date']) ? time() : intval($_GET['end_date']); $sql = "SELECT FLOOR((access_time - $start_date) / (24 * 3600)) AS sn, access_time, COUNT(*) AS access_count". " FROM " . $GLOBALS['ecs']->table('stats') . " WHERE access_time >= '$start_date' AND access_time <= " .($end_date + 86400). " GROUP BY sn"; $res = $GLOBALS['db']->query($sql); $data = $_LANG['general_stats'] . "\t\n"; $data .= $_LANG['date'] . "\t"; $data .= $_LANG['access_count'] . "\t\n"; while ($val = $GLOBALS['db']->fetchRow($res)) { $val['access_date'] = gmdate('m-d',$val['access_time'] + $timezone * 3600); $data .= $val['access_date'] . "\t"; $data .= $val['access_count'] . "\t\n"; } $sql = "SELECT COUNT(*) AS access_count, area FROM " . $GLOBALS['ecs']->table('stats') . " WHERE access_time >= '$start_date' AND access_time <= " .($end_date + 86400). " GROUP BY area ORDER BY access_count DESC LIMIT 20"; $res = $GLOBALS['db']->query($sql); $data .= $_LANG['area_stats'] . "\t\n"; $data .= $_LANG['area'] . "\t"; $data .= $_LANG['access_count'] . "\t\n"; while ($val = $GLOBALS['db']->fetchRow($res)) { $data .= $val['area'] . "\t"; $data .= $val['access_count'] . "\t\n"; } $sql = "SELECT COUNT(*) AS access_count, referer_domain FROM " . $GLOBALS['ecs']->table('stats') . " WHERE access_time >= '$start_date' AND access_time <= " .($end_date + 86400). " GROUP BY referer_domain ORDER BY access_count DESC LIMIT 20"; $res = $GLOBALS['db']->query($sql); $data .= "\n" . $_LANG['from_stats'] . "\t\n"; $data .= $_LANG['url'] . "\t"; $data .= $_LANG['access_count'] . "\t\n"; while ($val = $GLOBALS['db']->fetchRow($res)) { $data .= ($val['referer_domain'] == "" ? $_LANG['input_url'] : $val['referer_domain']) . "\t"; $data .= $val['access_count'] . "\t\n"; } if (EC_CHARSET != 'gbk') { echo ecs_iconv(EC_CHARSET, 'gbk', $data) . "\t"; } else { echo $data. "\t"; } } ?>