单例模式链接数据库

//db.php


/**

* 单例链接数据库

* */

classDb {

static private$_instance;

static private$_connectSource;

private$_dbConfig=array(

'host'=>'127.0.0.1',

'user'=>'root',

'password'=>'',

'database'=>'video',

);

private function__construct() {

}

static public functiongetInstance() {

if(!(self::$_instanceinstanceof self)) {

self::$_instance=new self();

}

return self::$_instance;

}

public functionconnect() {

if(!self::$_connectSource) {

self::$_connectSource= @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);

if(!self::$_connectSource) {

throw newException('mysql connect error '. mysql_error());

//die('mysql connect error' . mysql_error());

}

mysql_select_db($this->_dbConfig['database'],self::$_connectSource);

mysql_query("set names UTF8",self::$_connectSource);

}

return self::$_connectSource;

}

}

//response.php


classResponse {

constJSON="json";

/**

* 按综合方式输出通信数据

*@paraminteger $code 状态码

*@paramstring $message 提示信息

*@paramarray $data 数据

*@paramstring $type 数据类型

* return string

*/

public static functionshow($code,$message='',$data=array(),$type=self::JSON) {

if(!is_numeric($code)) {

return'';

}

if(in_array($_GET['format'],array('json','xml','jsonp'))){

$type='json';

}

//    $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方式输出通信数据

*@paraminteger $code 状态码

*@paramstring $message 提示信息

*@paramarray $data 数据

* return string

*/

public static functionjson($code,$message='',$data=array()) {

if(!is_numeric($code)) {

return'';

}

$result=array(

'code'=>$code,

'message'=>$message,

'data'=>$data

);

echojson_encode($result);

exit;

}

/**

* 按xml方式输出通信数据

*@paraminteger $code 状态码

*@paramstring $message 提示信息

*@paramarray $data 数据

* return string

*/

public static functionxmlEncode($code,$message,$data=array()) {

if(!is_numeric($code)) {

return'';

}

$result=array(

'code'=>$code,

'message'=>$message,

'data'=>$data,

);

header("Content-Type:text/xml");

$xml="\n";

$xml.="\n";

$xml.=self::xmlToEncode($result);

$xml.="";

echo$xml;

}

/**

* 转换成xml数据返回

* */

public static functionxmlToEncode($data) {

$xml=$attr="";

foreach($dataas$key=>$value) {

if(is_numeric($key)) {

$attr=" id='{$key}'";

$key="item";

}

$xml.="<{$key}{$attr}>";

$xml.= is_array($value) ?self::xmlToEncode($value) :$value;

$xml.="\n";

}

return$xml;

}

}

//list.php



// http://app.com/list.php?page-=1&pagesize=12

require_once('./response.php');

require_once('./file.php');

$file=newFile();

$data=$file->cacheData('index_cron_cahce');

if($data) {

returnResponse::show(200,'首页数据获取成功',$data);

}else{

returnResponse::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)) {

returnResponse::show(401,'数据不合法');

}

$offset= ($page-1) *$pageSize;

$sql="select*from video where status = 1 order by orderby desc limit ".$offset." , ".$pageSize;

$cache=newFile();

$videos=array();

if(!$videos=$cache->cacheData('index_mk_cache'.$page.'-'.$pageSize)) {

echo1;exit;

try{

$connect= Db::getInstance()->connect();

}catch(Exception$e) {

// $e->getMessage();

returnResponse::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) {

returnResponse::show(200,'首页数据获取成功',$videos);

}else{

returnResponse::show(400,'首页数据获取失败',$videos);

}

//缓存文件



/**

* 生成缓存文件、删除、读取缓存的操作封装

*

* */

classFile {

private$_dir;

constEXT='.txt';

/**

* 初始化文件存储位置

* */

public function__construct() {

$this->_dir= dirname(__FILE__) .'/files/';

}

/**

* param $key 缓存文件名称

* param $value 缓存文件的值

* */

public functioncacheData($key,$value='') {

$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);

}

returnfile_put_contents($filename,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;

//    }

returnjson_decode(file_get_contents($filename),true);

}

}





/**

* 生成缓存文件、删除、读取缓存的操作封装

*

* */

classFile {

private$_dir;

constEXT='.txt';

/**

* 初始化文件存储位置

* */

public function__construct() {

$this->_dir= dirname(__FILE__) .'/files/';

}

/**

* param $key 缓存文件名称

* param $value 缓存文件的值

* */

public functioncacheData($key,$value='') {

$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);

}

returnfile_put_contents($filename,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;

//    }

returnjson_decode(file_get_contents($filename),true);

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 如何单例模式链接数据库 =================== 1.单例模式 单例模式主要是三点:隐藏掉(priv...
    MadLife程序员阅读 1,874评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,581评论 18 399
  • 闻讯同学徐辉的著作出版,订购,散文集,《淌过诗人的河流》。 收到老同学岳阳快递的《淌过诗人的河流》,万分亲切!然,...
    传频阅读 364评论 0 2
  • 静态缓存 要使用静态缓存功能,需要开启HTML_CACHE_ON参数,并且使用HTML_CACHE_RULES配置...
    栾呱呱阅读 2,262评论 0 6