zoukankan      html  css  js  c++  java
  • 07 读取数据库方式开发首页接口

    一:读取数据库方式开发首页接口原理图
      从数据库获取信息--->>>>封装------>>>生成接口数据
      备注:运用场景[数据时性比较高的系统]
    二:代码实现
    
    (1)list.php
    
    <?php
    // http://app.com/list.php?page-=1&pagesize=12
    require_once('./response.php');
    require_once('./file.php');
    
    $file = new File();
    $data = $file->cacheData('index_cron_cahce');
    if($data) {
        return Response::show(200, '首页数据获取成功', $data);
    }else{
        return Response::show(400, '首页数据获取失败', $data);
    }
    exit;
    require_once('./db.php');
    require_once('./file.php');
    $page = isset($_GET['page']) ? $_GET['page'] : 1;
    $pageSize = isset($_GET['pagesize']) ? $_GET['pagesize'] : 6;
    if(!is_numeric($page) || !is_numeric($pageSize)) {
        return Response::show(401, '数据不合法');
    }
    
    $offset = ($page - 1) * $pageSize;
    
    $sql = "select * from video where status = 1 order by orderby desc limit ". $offset ." , ".$pageSize;
    $cache = new File();
    $videos = array();
    if(!$videos = $cache->cacheData('index_mk_cache' . $page .'-' . $pageSize)) {
        echo 1;exit;
        try {
            $connect = Db::getInstance()->connect();
        } catch(Exception $e) {
            // $e->getMessage();
            return Response::show(403, '数据库链接失败');
        }
        $result = mysql_query($sql, $connect); 
        
        while($video = mysql_fetch_assoc($result)) {
            $videos[] = $video;
        }
    
        if($videos) {
            $cache->cacheData('index_mk_cache' . $page .'-' . $pageSize, $videos, 1200);
        }
    }
    
    if($videos) {
        return Response::show(200, '首页数据获取成功', $videos);
    } else {
        return Response::show(400, '首页数据获取失败', $videos);
    }
    
    
    -------------------------response.php-------------
    
    
    <?php
    
    class Response {
        const JSON = "json";
        /**
        * 按综合方式输出通信数据
        * @param integer $code 状态码
        * @param string $message 提示信息
        * @param array $data 数据
        * @param string $type 数据类型
        * return string
        */
        public static function show($code, $message = '', $data = array(), $type = self::JSON) {
            if(!is_numeric($code)) {
                return '';
            }
    
            $type = isset($_GET['format']) ? $_GET['format'] : self::JSON;
    
            $result = array(
                'code' => $code,
                'message' => $message,
                'data' => $data,
            );
    
            if($type == 'json') {
                self::json($code, $message, $data);
                exit;
            } elseif($type == 'array') {
                var_dump($result);
            } elseif($type == 'xml') {
                self::xmlEncode($code, $message, $data);
                exit;
            } else {
                // TODO
            }
        }
        /**
        * 按json方式输出通信数据
        * @param integer $code 状态码
        * @param string $message 提示信息
        * @param array $data 数据
        * return string
        */
        public static function json($code, $message = '', $data = array()) {
            
            if(!is_numeric($code)) {
                return '';
            }
    
            $result = array(
                'code' => $code,
                'message' => $message,
                'data' => $data
            );
    
            echo json_encode($result);
            exit;
        }
    
        /**
        * 按xml方式输出通信数据
        * @param integer $code 状态码
        * @param string $message 提示信息
        * @param array $data 数据
        * return string
        */
        public static function xmlEncode($code, $message, $data = array()) {
            if(!is_numeric($code)) {
                return '';
            }
    
            $result = array(
                'code' => $code,
                'message' => $message,
                'data' => $data,
            );
    
            header("Content-Type:text/xml");
            $xml = "<?xml version='1.0' encoding='UTF-8'?>
    ";
            $xml .= "<root>
    ";
    
            $xml .= self::xmlToEncode($result);
    
            $xml .= "</root>";
            echo $xml;
        }
    
        public static function xmlToEncode($data) {
    
            $xml = $attr = "";
            foreach($data as $key => $value) {
                if(is_numeric($key)) {
                    $attr = " id='{$key}'";
                    $key = "item";
                }
                $xml .= "<{$key}{$attr}>";
                $xml .= is_array($value) ? self::xmlToEncode($value) : $value;
                $xml .= "</{$key}>
    ";
            }
            return $xml;
        }
    
    }
    
    
    -----------------file.php-------------------
    
    <?php
    
    class File {
        private $_dir;
    
        const EXT = '.txt';
    
        public function __construct() {
            $this->_dir = dirname(__FILE__) . '/files/';
        }
        public function cacheData($key, $value = '', $cacheTime = 0) {
            $filename = $this->_dir  . $key . self::EXT;
    
            if($value !== '') { // 将value值写入缓存
                if(is_null($value)) {
                    return @unlink($filename);
                }
                $dir = dirname($filename);
                if(!is_dir($dir)) {
                    mkdir($dir, 0777);
                }
    
                $cacheTime = sprintf('%011d', $cacheTime);
                return file_put_contents($filename,$cacheTime . json_encode($value));
            }
    
            if(!is_file($filename)) {
                return FALSE;
            } 
            $contents = file_get_contents($filename);
            $cacheTime = (int)substr($contents, 0 ,11);
            $value = substr($contents, 11);
            if($cacheTime !=0 && ($cacheTime + filemtime($filename) < time())) {
                unlink($filename);
                return FALSE;
            }
            return json_decode($value, true);
            
        }
    }
    
    $file = new File();
    
    echo $file->cacheData('test1');
  • 相关阅读:
    零是奇数还是偶数?
    解决TortoiseSVN中out of date问题的一个方法
    squid透明代理+iptables防火墙,多网卡详细配置
    基于协同过滤的推荐方法
    IP分片和TCP分片 MTU和MSS(转)
    Google Protocol Buffer 的使用和原理(转)
    到底多少线程算是线程数太多?
    开源软件53个相关概念
    GPL,LGPL和BSD等协议注意事项
    IEEE 802
  • 原文地址:https://www.cnblogs.com/hgj123/p/4360554.html
Copyright © 2011-2022 走看看