Example #1
0
 /**
  * 显示页面Trace信息
  * @access private
  */
 private function showTrace()
 {
     // 系统默认显示信息
     $files = get_included_files();
     $info = array();
     foreach ($files as $key => $file) {
         $info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )';
     }
     $trace = array();
     $base = array('请求信息' => date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']) . ' ' . $_SERVER['SERVER_PROTOCOL'] . ' ' . $_SERVER['REQUEST_METHOD'] . ' : ' . __SELF__, '运行时间' => $this->showTime(), '内存开销' => MEMORY_LIMIT_ON ? number_format((memory_get_usage() - $GLOBALS['_startUseMems']) / 1024, 2) . ' kb' : '不支持', '查询信息' => Debug::record('db_query') . ' queries ' . Debug::record('db_write') . ' writes ', '文件加载' => count(get_included_files()), '缓存信息' => Debug::record('cache_read') . ' gets ' . Debug::record('cache_write') . ' writes ', '配置加载' => count(c()), '会话信息' => 'SESSION_ID=' . session_id());
     // 读取项目定义的Trace文件
     $traceFile = CONF_PATH . 'trace.php';
     if (is_file($traceFile)) {
         $base = array_merge($base, include $traceFile);
     }
     $debug = Debug::trace();
     $tabs = C('TRACE_PAGE_TABS');
     foreach ($tabs as $name => $title) {
         switch (strtoupper($name)) {
             case 'BASE':
                 // 基本信息
                 $trace[$title] = $base;
                 break;
             case 'FILE':
                 // 文件信息
                 $trace[$title] = $info;
                 break;
             default:
                 // 调试信息
                 $name = strtoupper($name);
                 if (strpos($name, '|')) {
                     // 多组信息
                     $array = explode('|', $name);
                     $result = array();
                     foreach ($array as $name) {
                         $result += isset($debug[$name]) ? $debug[$name] : array();
                     }
                     $trace[$title] = $result;
                 } else {
                     $trace[$title] = isset($debug[$name]) ? $debug[$name] : '';
                 }
         }
     }
     if ($save = C('PAGE_TRACE_SAVE')) {
         // 保存页面Trace日志
         if (is_array($save)) {
             // 选择选项卡保存
             $tabs = C('TRACE_PAGE_TABS');
             $array = array();
             foreach ($save as $tab) {
                 $array[] = $tabs[$tab];
             }
         }
         $content = date('[ c ]') . ' ' . Response::get_client_ip() . ' ' . $_SERVER['REQUEST_URI'] . "\r\n";
         foreach ($trace as $key => $val) {
             if (!isset($array) || in_array($key, $array)) {
                 $content .= '[ ' . $key . " ]\r\n";
                 if (is_array($val)) {
                     foreach ($val as $k => $v) {
                         $content .= (!is_numeric($k) ? $k . ':' : '') . print_r($v, true) . "\r\n";
                     }
                 } else {
                     $content .= print_r($val, true) . "\r\n";
                 }
                 $content .= "\r\n";
             }
         }
         error_log(str_replace('<br/>', "\r\n", $content), Log::FILE, LOG_PATH . date('y_m_d') . '_trace.log');
     }
     unset($files, $info, $base);
     // 调用Trace页面模板
     ob_start();
     include C('TMPL_TRACE_FILE');
     return ob_get_clean();
 }
Example #2
0
 /**
  * 验证数据 支持 in between equal length regex expire ip_allow ip_deny
  * @access public
  * @param string $value 验证数据
  * @param mixed $rule 验证表达式
  * @param string $type 验证方式 默认为正则验证
  * @return boolean
  */
 public function check($value, $rule, $type = 'regex')
 {
     $type = strtolower(trim($type));
     switch ($type) {
         case 'in':
             // 验证是否在某个指定范围之内 逗号分隔字符串或者数组
         // 验证是否在某个指定范围之内 逗号分隔字符串或者数组
         case 'notin':
             $range = is_array($rule) ? $rule : explode(',', $rule);
             return $type == 'in' ? in_array($value, $range) : !in_array($value, $range);
         case 'between':
             // 验证是否在某个范围
         // 验证是否在某个范围
         case 'notbetween':
             // 验证是否不在某个范围
             if (is_array($rule)) {
                 $min = $rule[0];
                 $max = $rule[1];
             } else {
                 list($min, $max) = explode(',', $rule);
             }
             return $type == 'between' ? $value >= $min && $value <= $max : $value < $min || $value > $max;
         case 'equal':
             // 验证是否等于某个值
         // 验证是否等于某个值
         case 'notequal':
             // 验证是否等于某个值
             return $type == 'equal' ? $value == $rule : $value != $rule;
         case 'length':
             // 验证长度
             $length = mb_strlen($value, 'utf-8');
             // 当前数据长度
             if (strpos($rule, ',')) {
                 // 长度区间
                 list($min, $max) = explode(',', $rule);
                 return $length >= $min && $length <= $max;
             } else {
                 // 指定长度
                 return $length == $rule;
             }
         case 'expire':
             list($start, $end) = explode(',', $rule);
             if (!is_numeric($start)) {
                 $start = strtotime($start);
             }
             if (!is_numeric($end)) {
                 $end = strtotime($end);
             }
             return NOW_TIME >= $start && NOW_TIME <= $end;
         case 'ip_allow':
             // IP 操作许可验证
             return in_array(Response::get_client_ip(), explode(',', $rule));
         case 'ip_deny':
             // IP 操作禁止验证
             return !in_array(Response::get_client_ip(), explode(',', $rule));
         case 'regex':
         default:
             // 默认使用正则验证 可以使用验证类中定义的验证名称
             // 检查附加规则
             return $this->regex($value, $rule);
     }
 }