月度归档:2009年03月

最近在看一个c++教程,换了另一个G++ IDE 支持 wxWidgets

第2学堂的白话C++

网址:http://www.d2school.com/

以前在博客里说的一样,因为本人不喜欢ms的东西,本来打算学c#做第二语言的,但无奈还没有完全脱离windows环境(没问题,要聊qq,要看迅雷看看,还要玩玩魔兽,CS,还真不好全部转linux下),但又想学一门可以跨系统的桌面编程,以后还能顺便写写手机程序,后来还是觉得还是c++比较适合我,java要装虚拟机,运行速度太慢

然后c++ IDE选择,当然首先G++编译器,前段时间在博客里推荐了Dev-C++,但后来用过段时间发现,它已经不更新了,而且老是出错,后来就又找了一个Code::Blocks 多个版本,包括windows linux unix等。然后又找到了一份教程,文字很通俗易懂《白话C++》

附一个CodeBlocks的汉化包

codeblocks_chs.rar

CodeBlocks官方网站 http://www.codeblocks.org/

c++新手推荐开发工具Dev C++

最近在学习C++,以前在linux下用G++学过一段时间的c++,觉得非常好用,但现在在windows下,不能直接用G++了,本来打算用VC++ 6.0,可是找了半天,英文原版的都不下400m,郁闷了,而且vc++功能太大,也不怎么符合C++标准,本来学c++也不是为了做大项目,纯粹是好玩,没必要弄个那么大的家伙,后来在网上搜索找到了Dev c++ 用的是GCC的编译器, 这样以后写的小东西也可以直接扔到linux下的GCC进行编译了,方便多了!

下载地址:

http://www.skycn.com/soft/4639.html

Dev-C++是一个Windows下的C和C++程序的集成开发环境。它使用MingW32/GCC编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,能够适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!多国语言版中包含简繁体中文语言界面及技巧提示,还有英语、俄语、法语、德语、意大利语等二十多个国家和地区语言提供选择。

实际上目前的DEV CPP 的应用并非如VC一样广泛 但它是目前信息学竞赛使用的C语言编译器 (gcc)关于专门学习DEV CPP的书籍基本没有 大部分信息学竞赛书籍都是《数据结构》与《算法》并没有明确指定使用的编译器 而在竞赛中DEV CPP 被广泛应用 (可以在LINUX环境下使用)

 

未命名.jpg

狂笑!上班的时候看到笑出呻吟–

上大学的时候去衡山玩,当时爬山爬了一半,累的正想歇会的时候看到路边有个买纪念品的欧巴桑,上去开口就问:老婆……..
2.偶有次开车,有个美女同事搭车,一坐我旁边,偶特紧张滴说:把安全套带上!美女以后再不理偶了。郁闷ING

3.以前别人来我阿姨家作客,刚进门的。刚好我阿姨要去上厕所。她连忙招呼客人说:“你们坐哈坐哈,我给你们去倒点尿喝!”,,本来是说倒点茶喝的,,。

4.在实习的时候,对一个老师说:陈老师你是不是姓陈?

5.偶们大学去工厂金工实习的时候,工人师傅分配机床时说:为了安全起见,我门尽量保证一个男同学和一个女同学一张床。当时所有男生爆笑,女生脸红。实习期间,几乎所有的用车床的活都是我帮和偶同床,,寒,,的女生做的,最后考虑到她什么都不会作的话师傅检查起来不太好,偶劝她练练手,谁知道她说:我已经习惯让你干了。当时偶爆寒不止。

6.一个朋友去饺子馆,问“水饺(睡觉,,一碗,,晚,,多少钱?”只听服务员小姐“呸!”了一声,说道:“不要脸!”~

7.上自习的时候,大家都在看复习,GG对MM 说:“我刚背了单词,帮忙默写一下。”MM 不想默,GG就求她,你,,摸,,默我吧,,,摸,,我吧!结果MM 实在忍受不了,大喊,老师你看我不想,,摸,,默他,他非要我,,摸,,默~!

8.有一天去同学家吃饭,喝了点酒,她爸爸忽然进来了,本来是想喊叔叔的,结果说错了,说:“爸,来座!”~寒!大帮同学笑得要死

9.我同事跟人争执,急了张口来了句“你以为我吃饭长大的啊?”我一直纳闷他到底吃什么长大的。

10.小学时一个很讨厌的男生找我借橡皮,我不借,他就死缠烂打,之后我用尽全身的力气狂吼了一句“我不嫁,,借,,给你”当时同学们立马安静下来了,。

11.上机课,一位同学机子有问题,于是大喊“老板,换机子!”全班木然

12.我唾你一脸狗屎!

13.偶对mm开玩笑说:“别说你认识偶,影响我声誉!”mm说:“你有生育?你能生育?”..

14.偶是男的,在广东生病了嗓子说不出话…………去看医生,医生告诉我:yin dao发炎狂晕中…………仔细一看,诊断书上写者   咽道发炎 ………………无语…………….

15.买电脑,老板开价4150,我杀价:老板410么好赖~~~~老板狂晕!

16.上次早上上班,发现自行车轮胎没气了,于是想叫妈妈帮忙推到门外打一下气。结果我说:把我的轮胎推出去。

17.一个女孩失恋了,我劝她:“两条腿的蛤蟆不好找,三条腿的男的有的是!”

18.小学时候有劳动课,一般都是除草,所以到了前一天放学时候老师就得提醒我们带锄头,第2天上劳动课了准备出发,老师便于管理就问了一句:有多少人带了啊?带了手的把锄头举起来!”

19.开导一失恋。同学你知道什么叫失恋么?

20.初中语文课上,有人背诵毛泽东的诗:一代风骚,……

21.某老师, 今天,我们来上,杨修之屎

22.一次ktv,点歌,一mm大声喊:给我点一首周截棍的“双杰伦”……

23.大二有一阵儿特别喜欢和同宿舍的一个MM一起骑车出去逛街,收拾打扮漂亮后一起进了电梯,突然想起车好像没气儿了,就冲她说了句:先陪我去打胎啊?~天…….

24.公交车上人比较多,一猛男怒吼:妈个脚的踩我B上了

25.同学的高中同学,,一男生,,走进面馆很酷把头发一甩:“老板,2两葱不要米线!”完了还加一句:“多下点米线啊!”老板:“。你到底是要米线还是要葱?”

26.一次文艺晚会,主持人上台报幕:下面请欣赏:新疆歌舞,掀起你的头盖骨!毛骨悚然!

27.上高中时,课堂纪律混乱,老师一怒之下揪起XXX,说:XXX,你给我站墙上去!~全班暴寒!

28.我:那是我们物理老师。

同学:教什么的阿?

我:化学。

29.在网吧,一同学突然举手,大喊:“老师!”

30.我们宿舍一个人喝多了要去尿尿然后带出一句冷话:尿喝多了,酒就特别多.

31.买橘子,老板:一块五一斤。我:太贵了,五块钱三斤吧。老板:不行不行。

32.朋友问我电脑配置,我说显示器是彩屏的。,,本来是想说液晶的,,

33.听过一MM在食堂喊“给我一碗viper~!”

34.有一次寝室里同学的老妈打电话过来

我习惯说“他不在”,但是这一次我想说的的是“已经出去了”

结果说出来是:“他已经…不在了”

35.和我姐姐去李宁买鞋,我姐一开口:“小姐,这鞋多少钱一斤?”

36.高中时每人发个胸牌。一次来检查前,班主任跑到教室大声喊,大家快把胸罩戴起来,来查拉。 全场鸦雀无声。

37.老师留下作业,我不会做就抄别人的,然后去办公室交作业,看见老师说:“我抄完了!”

38.偶高中,放学和偶MM一起回家,校门口看到一卖烧烤的,MM说要吃牛杂,因为烤架前人比较多,偶怕老板听不见,于是偶大声喊道:“老板,5串牛鞭” 然后一片寂静,三秒钟后所有人一起暴笑。偶巨尴尬。最尴尬的是MM接着问偶“牛鞭是什么”偶只好非常非常小声地回答MM:“牛鞭就是牛尾巴啊”。

39.早上和同学去吃早餐 其中一个只吃包子馅,另外一个只吃皮。我们正在说他们两个浪费的时候吃馅的同学来了一句“行了 以后你吃我的包皮好了”在场的所有喝粥 的全部喷出来了。

40.大学军训时,教官大吼一声说:用你们的旁光,,余光,,对齐~偶们想笑又不敢笑,那个难过

国内一优秀免费防火墙今天发布了新版(离上一版有一年多时间)

『风云防火墙个人版 2009』

官方网站:

http://www.218.cc/

 

以前电脑的安全软件是

免费的风云防火墙1.27 + 免费的小红伞v8

正好小红伞昨天完成版本的更新v9 今天风云防火墙经过一年多的测试也发布了2009正式版

电脑现在的安全软件是

免费的风云防火墙2009+ 免费的小红伞v9

二款相互配合,非常好用,同时两款软件也非常的节省资源 让电脑处于全面保护状态

vps基本处于闲置状态,所以卖几份空间(只适合小流量网站或blog)

操作系统:ubuntu 8.04 (linux)

基本环境:Nginx 0.6.34    php 5.2.4   mysql 5.0.51   vsftpd  phpmyadmin

注意:空间只支持php+mysql网站,不支持asp及.net   web服务器采用的是高负载的nginx

可以上传zip文件,然后通知本人进行解压

从配置上大家就可以看到本人并不是专做虚拟主机业务的,只是出售点自己服务器上的空间而以,所以空间绝对的稳定,目前从租用到现在服务器没有启重过,服务器有2个固定ip地址!

php探针:http://www.ye55.com/php.php   (可以看到基本配置)

演示地址:http://www.phpd.cn   (私人博客)

大家可以测试速度!

现主机上只放置了我自己的博客,一个我工作室的主页,再加上一个企业站,为了不浪费资源,同时回收点租用费,所以出售10份空间

每份空间暂定200m但本在并没有在服务器上做磁盘配额,只要不占用非常大的流量,空间大小我可以说不限!

手工开通空间

所以拍下空间后请及时联系掌柜为您开通空间 ftp 及mysql账号!

注意事项:

1,不允许放置下载,在线播放等大流量耗资源性网站!

2,不允许放置违反中国和美国法律的网站!

3,不允许放置反动违反版权的内容!

为了大家的ip不至于被大陆屏蔽,所以发现有非法或反动信息将会告之,三次还违反规定的话,本人有权关闭网站!

点击进入淘宝进行购买

小红伞免费版9.0版本正式发布

前天刚在blog里发布小红伞晓月汉化v8免费版的信息,今天一大早就发布v9正式版出了来,小兴奋了一把,下载后换掉了v8,还在试用中。

Avira AntiVir 个人版- Free版,P版(Premium)和S版(Premium Suit)的所拥有的改进如下:
隔离区管理:列数减少
隔离区管理:可以使用HTTP上报文件
系统托盘工具:鼠标悬停时显示各个监控的状态
最后系统扫描:可在设定中独立配置警告信息
在设定面板中将“Win32 Heuristic”重命名为“AHeAD”
支持上网本(屏幕分辨率)
设定面板:新增按钮“Default Values(默认值)” 。这个按钮可以让您的配置恢复到预先确定的默认值
所有产品的安装文件夹路径和注册表项都改为“C:\Program Files\Avira\AntiVir Desktop”和“HKLM\Software\Avira\AntiVir Desktop”.现在个人版的各个版本不再有任何区别(指文件夹和注册表路径)
新增安装后的配置向导
GUI进程的保护
文件和文件夹保护
Avira键值的注册表保护
扫描锁定的档案
扫描器:手动扫描后对病毒检出结果的综合显示和一键清除。这个选项可以设置在扫描仪的配置
扫描器:改进后的清毒系统
扫描器:多核机器上的优化扫描
监控:更少内存占用
计划任务:现在可以在一个星期的多天内启动计划任务
计划任务:手动启动和停止任务
Avira AntiVir Personal – Free Antivirus独有改进如下:
增加对广告和间谍程序的检测查杀

小红伞v9 免费版官方站

http://www.free-av.com/

Avira AntiVir Personal 8 晓月汉化更新版

德国的小红伞杀毒软件 杀毒能力超强

Avira AntiVir Personal 8 是一款免费版的杀毒软件,用了半年多了,感觉还不错,但是是英文版的!

今天在网上找到了一款汉化版的,下载下来用了下,还行,就放在博客是宣传一下

现在的网络太不安全了,没有一款好的安全软件,一不小心就让别人给黑了。

然而杀毒都是要收费的,以前用得好好的卡巴,但半年的试用一过,找key可就烦了。

所以这款杀毒软件绝对适合不想花钱就想用好的杀软的朋友

下载地址:(迅雷的,源是xdown的,无毒)

thunder://QUFodHRwOi8veHgyLmdkLnhkb3ducy5jb20veC8wOTAxL0FudGlWaXJDbGFzc2ljOC5yYXJaWg==

在linux下聊qq

vps上聊qq 

用它来挂qq了。每天凌晨挂两个小时,嘿嘿

以前也挂过,用的是2.8版的,今天看到了个新版的,放上去试试,还好没出现要输入验证码

下载的包里有编译好了的linux版和windows版 当然也有源码

1.jpg

 

2.jpg

 

myqq 2.9最新版下载

 

myqq2.9.zip

一个mysql数据库访问类,带简单的数据缓存功能

本数据访问类是之前自己写的一个框架里的,修改了一下,所以先放在博客里

下载:

db.rar

主要几个功能

第一个是数据统计
count($table,$where=”,$order=”,$group=”);

第二个是查找第一条数据
find($table,$where=”,$field=’*’,$order=”,$limit=”,$group=”)

第三个是查找一组数据
findAll($table,$where=”,$field=’*’,$order=”,$limit=”,$group=”)

第四个是全文件检索,需mysql类型的词库一份,本博里有,如有需要请在博客里搜索全文检索
fullText($table,$key,$str,$where=”,$field=’*’,$limit=”,$group=”)

第五个是数据的缓存,目前只支持find findAll两种方法
dbCache($time,$func,$table,$where=”,$field=’*’,$order=”,$limit=”,$group=”)

第六个是插入数据,只需指定表名和要插入的数组即可,可以直接用$_POST 会自动寻找与表字段相匹配的数据进入插入,插入的数据自己做防注入处理
insert($table,$data)

第七个是删除数据,只需指定表名和主键,或用数组方式指出删除条件
delete($table,$keyarr)

第八个是更新数据,指定表名,数据,主键或是数组形式的更新条件
update($table,$data, $keyarr)

 

db.class.php

PHP代码
  1. <?php  
  2. /* 
  3. #  数据模型 
  4. #  PDO方式访问Mysql数据库,主要方法:利数组方式快速插入(insert) 利用数组做连表查询(findAll find) 
  5. #  作者:℃冻番茄 qq:7279915 
  6. #  web@ye55.com  www.ye55.com (蓝叶工作室) 
  7. */  
  8.   
  9. class db{  
  10.   
  11.     public $db;  
  12.     public $queryNum=0;  
  13.     public $querySql=array();  
  14.     public $error;  
  15.     public $cacheNum=0;  
  16.   
  17.     function __construct()  
  18.     {  
  19.         if(!$this->db= @new PDO(conf(‘dbType’).‘:host=’.conf(‘dbHost’).‘;dbname=’.conf(‘dbName’), conf(‘dbUser’), conf(‘dbPass’))){  
  20.             $this->error=‘数据库连接信息出错!’;  
  21.         }  
  22.         $this->db->exec(‘SET NAMES ‘.conf(‘charset’));   
  23.     }  
  24.   
  25.     function query($sql)  
  26.     {  
  27.         $rs = $this->db->query($sql);  
  28.         $this->queryNum++;  
  29.         $this->querySql[]=$sql;  
  30.         return $rs;  
  31.     }  
  32.   
  33.   
  34.     function beginTransaction()  
  35.     {  
  36.         return $this->db->beginTransaction();  
  37.     }  
  38.   
  39.     function commit()  
  40.     {  
  41.         return $this->db->commit();  
  42.     }  
  43.   
  44.     function rollBack()  
  45.     {  
  46.         return $this->db->rollBack();  
  47.     }  
  48.   
  49.     function exec($sql)  
  50.     {  
  51.         $this->queryNum++;  
  52.         $this->querySql[]=$sql;  
  53.         return $this->db->exec($sql);  
  54.     }  
  55.   
  56.     function lastInsertId()  
  57.     {  
  58.         return $this->db->lastInsertId();  
  59.     }  
  60.   
  61.   
  62.     function setAttribute($attr$value)  
  63.     {  
  64.         return $this->db->setAttribute($attr$value);  
  65.     }  
  66.   
  67.   
  68.     function insert($table,$data)  
  69.     {  
  70.         $table=conf(‘dbprefix’).$table;  
  71.         $fields = "";  
  72.         $values = "";  
  73.         $tableCache=$this->tableCache($table);  
  74.         $tableCache=$tableCache[$table];  
  75.         foreach($data as $field=>$value)  
  76.         {  
  77.             if(in_array($field,$tableCache[‘field’])){  
  78.                 $fields .= "`$field`, ";  
  79.                 $values .= "’".mysql_escape_string($value)."’, ";  
  80.             }  
  81.         }  
  82.           
  83.         $fields = substr_replace($fields"", -2, 1);  
  84.         $values = substr_replace($values"", -2, 1);  
  85.   
  86.         $sql = "insert into `$table` ($fields) values ($values)";  
  87.           
  88.         //echo $sql;  
  89.         if($rs = $this->query($sql)){  
  90.             return $this->lastInsertId();  
  91.         }else{  
  92.             $this->error=‘插入数据出错!’;  
  93.             return false;  
  94.         }  
  95.           
  96.     }  
  97.   
  98.     function delete($table,$keyarr){  
  99.         $table=conf(‘dbprefix’).$table;  
  100.         if(is_array($keyarr)){  
  101.             $where = " where ";  
  102.             foreach($keyarr as $key=>$key_value)  
  103.             {  
  104.                 $where .= " `$key`=’".mysql_escape_string($key_value)."’ and";  
  105.             }  
  106.             $where=substr($where,0,-3);  
  107.         }else{  
  108.             $tableCache=$this->tableCache($table);  
  109.             $where =" where `".$tableCache[$table][‘key’]."`=’".mysql_escape_string($keyarr)."’";  
  110.             unset($tableCache);  
  111.         }  
  112.         $sql = "delete from `$table` $where";  
  113.         //echo $sql;  
  114.         if(!$rs =$this->query($sql)){  
  115.             $this->error=‘插入数据出错!’;  
  116.         }  
  117.         return $rs;  
  118.     }  
  119.   
  120.     function update($table,$data$keyarr)  
  121.     {  
  122.         $table=conf(‘dbprefix’).$table;  
  123.         $set = "";  
  124.         $tableCache=$this->tableCache($table);  
  125.         $tableCache=$tableCache[$table];  
  126.         //dump($data);  
  127.         foreach($data as $field=>$value)  
  128.         {  
  129.             if(in_array($field,$tableCache[‘field’])){  
  130.                 $set .= "`$field`=’".mysql_escape_string($value)."’, ";  
  131.             }  
  132.         }  
  133.         $set = substr_replace($set"", -2, 1);  
  134.         if(is_array($keyarr)){  
  135.             $where = " where ";  
  136.             foreach($keyarr as $key=>$key_value)  
  137.             {  
  138.                 $where .= "`$key`=’$key_value’";  
  139.             }  
  140.         }else{  
  141.             $where =" where `".$tableCache[‘key’]."`=’".mysql_escape_string($keyarr)."’";  
  142.         }  
  143.         unset($tableCache);  
  144.         $sql = "update `$table` set $set  $where";  
  145.         //echo $sql;  
  146.         if(!$rs =$this->query($sql)){  
  147.             $this->error=‘更新数据出错!’;  
  148.         }  
  149.           
  150.         return $rs;  
  151.     }  
  152.   
  153.     function find($table,$where=,$field=‘*’,$order=,$limit=,$group=)  
  154.     {  
  155.         $sql=$this->_map($table,$where,$field,$order,$limit,$group);  
  156.           
  157.         return $this->_find($sql);  
  158.     }  
  159.       
  160.     function findAll($table,$where=,$field=‘*’,$order=,$limit=,$group=)  
  161.     {  
  162.         $sql=$this->_map($table,$where,$field,$order,$limit,$group);  
  163.         //echo $sql;  
  164.         return $this->_findAll($sql);  
  165.     }  
  166.       
  167.     function fullText($table,$key,$str,$where=,$field=‘*’,$limit=,$group=)  
  168.     {  
  169.         $order=emptyempty($order)?:‘order by ‘.$order;  
  170.         $limit=emptyempty($limit)?:‘limit ‘.mysql_escape_string($limit);  
  171.         $group=emptyempty($group)?:‘group by ‘.$group;  
  172.         $field=emptyempty($field)?‘*’:$field;  
  173.         $w="where MATCH ($key) against (‘$str’) ".$where;  
  174.           
  175.         if(is_array($table)){  
  176.             $table1=conf(‘dbprefix’).$table[0];  
  177.             //echo $table1;  
  178.             $count=count($table);  
  179.             $joinleft=;  
  180.             array_shift($table);  
  181.             foreach($table as $v){  
  182.                 foreach($v as $k2=>$v2){  
  183.                     $k2=conf(‘dbprefix’).$k2;  
  184.                     foreach($v2 as $k3=>$v3){  
  185.                         $l="$table1.$k3=$k2.$v3";  
  186.                     }  
  187.                     $joinleft.="left join $k2 on $l ";  
  188.                 }  
  189.             }  
  190.             $sql="select $field from $table1 $joinleft $w $order $group $limit";  
  191.         }else{  
  192.             $table=conf(‘dbprefix’).$table;  
  193.             $sql="select $field from $table $w  $order $group $limit";  
  194.         }  
  195.         //echo $sql;  
  196.         $rs=$this->query($sql);  
  197.         $row=$rs->fetchall(PDO::FETCH_ASSOC);  
  198.         return $row;  
  199.     }  
  200.       
  201.     function dbCache($time,$func,$table,$where=,$field=‘*’,$order=,$limit=,$group=)  
  202.     {  
  203.         if($func!=‘find’ && $func!=‘findAll’return false;  
  204.         if(emptyempty($time)){  
  205.             return $this->$func($table,$where,$field,$order,$limit,$group);  
  206.         }  
  207.         $tableStr=is_array($table)?serialize($table):$table;  
  208.         $whereStr=is_array($where)?serialize($where):$where;  
  209.         $file=conf(‘cacheDir’).‘/’.$func.‘.’.md5($tableStr.$whereStr.$field.$order.$limit.$group).‘.php’;  
  210.           
  211.         if(file_exists($file)){  
  212.             if(time()-filemtime($file)<$time){  
  213.                 $content=file_get_contents($file);  
  214.                 $arr=unserialize(substr($content,13));  
  215.                 $this->cacheNum++;  
  216.                 return $arr;  
  217.             }else{  
  218.                 return $this->_dbWriteCache($file,$func,$table,$where,$field,$order,$limit,$group);  
  219.             }  
  220.         }else{  
  221.             return $this->_dbWriteCache($file,$func,$table,$where,$field,$order,$limit,$group);  
  222.         }  
  223.     }  
  224.       
  225.     private function _dbWriteCache($file,$func,$table,$where,$field,$order,$limit,$group)  
  226.     {  
  227.         fclose(fopen($file"w"));  
  228.         $arr=$this->$func($table,$where,$field,$order,$limit,$group);  
  229.         $content=‘<?php exit;?>’.serialize($arr);  
  230.         if(file_put_contents($file,$content)){  
  231.             return $arr;  
  232.         }else{  
  233.             $this->error=‘缓存写入出错!’;  
  234.             return false;  
  235.         }  
  236.     }  
  237.   
  238.     function count($table,$where=,$order=,$group=)  
  239.     {  
  240.         $tableCache=$this->tableCache($table);  
  241.         $tableCache=$tableCache[$table];  
  242.         $sql=$this->_map($table,$where,‘count(‘.conf(‘dbprefix’).$table.‘.’.$tableCache[‘key’].‘)’,$order,,$group);  
  243.         //echo $sql;  
  244.         return $this->_count($sql);  
  245.     }  
  246.       
  247.       
  248.       
  249.     private function _count($sql)  
  250.     {  
  251.         $rs=$this->query($sql);  
  252.         $count=$rs->fetchColumn();  
  253.         $count=emptyempty($count)?0:$count;  
  254.         return $count;  
  255.     }  
  256.       
  257.     private function _find($sql)  
  258.     {  
  259.         $rs=$this->query($sql);  
  260.         $row=$rs->fetch(PDO::FETCH_ASSOC);  
  261.         return $row;  
  262.     }  
  263.       
  264.     private function _findAll($sql)  
  265.     {  
  266.         $rs=$this->query($sql);  
  267.         //echo $sql;  
  268.         $row=$rs->fetchall(PDO::FETCH_ASSOC);  
  269.         return $row;  
  270.     }  
  271.       
  272.   
  273.     /** 
  274.     +———————————————————- 
  275.     * 指定表名,条件,字段,排序,个数等组合sql 
  276.     +———————————————————- 
  277.     * @return string 
  278.     +———————————————————- 
  279.     */    
  280.     private function _map($table,$where=,$field=‘*’,$order=,$limit=,$group=)  
  281.     {  
  282.         $order=emptyempty($order)?:‘order by ‘.$order;  
  283.         $limit=emptyempty($limit)?:‘limit ‘.mysql_escape_string($limit);  
  284.         $group=emptyempty($group)?:‘group by ‘.$group;  
  285.         $field=emptyempty($field)?‘*’:$field;  
  286.         $w=;  
  287.           
  288.         if(!emptyempty($where)){  
  289.             if(is_array($where)){  
  290.                 $w.=‘where’;  
  291.                 foreach($where as $k=>$v){  
  292.                     $w.=" $k=’$v’ and";  
  293.                 }  
  294.                 $w=substr($w,0,strlen($w)-3);  
  295.             }elseif(!preg_match ("/where/i",$where) && !is_array($table)){  
  296.               
  297.                 $tableCache=$this->tableCache($table);  
  298.                 $w=" where `".$tableCache[$table][‘key’]."`=’".mysql_escape_string($where)."’";  
  299.                 unset($tableCache);  
  300.             }else{  
  301.                   
  302.                 $w=$where;  
  303.             }  
  304.         }  
  305.           
  306.         if(is_array($table)){  
  307.             $table1=conf(‘dbprefix’).$table[0];  
  308.             //echo $table1;  
  309.             $count=count($table);  
  310.             $joinleft=;  
  311.             array_shift($table);  
  312.             foreach($table as $v){  
  313.                 foreach($v as $k2=>$v2){  
  314.                     $k2=conf(‘dbprefix’).$k2;  
  315.                     foreach($v2 as $k3=>$v3){  
  316.                         $l="$table1.$k3=$k2.$v3";  
  317.                     }  
  318.                     $joinleft.="left join $k2 on $l ";  
  319.                 }  
  320.             }  
  321.             $sql="select $field from $table1 $joinleft $w $order $group $limit";  
  322.         }else{  
  323.             $table=conf(‘dbprefix’).$table;  
  324.             $sql="select $field from $table $w  $order $group $limit";  
  325.         }  
  326.         //echo $sql;  
  327.         return $sql;  
  328.     }  
  329.       
  330.     /** 
  331.     +———————————————————- 
  332.     * 读取指定表的主键及字段,如缓存文件里不存在指定表的信息,则写入 
  333.     +———————————————————- 
  334.     * @param string $table 表名 
  335.     +———————————————————- 
  336.     * @return array 
  337.     +———————————————————- 
  338.     */  
  339.       
  340.     private function tableCache($table)  
  341.     {  
  342.         $this->tableCacheFile=conf(‘cacheDir’).‘/table.inc.php’;  
  343.       
  344.         if(file_exists($this->tableCacheFile)){  
  345.             $tableCache=@file_get_contents($this->tableCacheFile);  
  346.             $tableCache=unserialize(str_replace(‘<?php exit;?>’,,$tableCache));  
  347.             if(!isset($tableCache[$table])){  
  348.                 $arr=$this->_tableCache($table);  
  349.                 $tableCache=@array_merge($tableCache,$arr);  
  350.                 //dump($tableCache);  
  351.                 if(!$this->_writeTableCache($tableCache)){  
  352.                     $this->error=‘数据表缓存写入出错 TABLE:’.$table;  
  353.                 }  
  354.             }  
  355.         }else{  
  356.             $tableCache=$this->_tableCache($table);  
  357.             if(!$this->_writeTableCache($tableCache)){  
  358.                 $this->error=‘数据表缓存写入出错 TABLE:’.$table;  
  359.             }  
  360.         }  
  361.         //dump($tableCache);  
  362.         return $tableCache;  
  363.     }  
  364.       
  365.     /** 
  366.     +———————————————————- 
  367.     * 通过表名,获取些表的主键及所有字段 
  368.     +———————————————————- 
  369.     * @param string $table 表名 
  370.     +———————————————————- 
  371.     * @return array 
  372.     +———————————————————- 
  373.     */    
  374.     private function _tableCache($table)  
  375.     {  
  376.         $rs=$this->query("describe $table");  
  377.         $row=$rs->fetchall(PDO::FETCH_ASSOC);  
  378.         $tmp=array();  
  379.         foreach($row as $v){  
  380.             //echo $v[‘Field’];  
  381.             if($v[‘Key’]==‘PRI’)$key=$v[‘Field’];  
  382.             $tmp[]=$v[‘Field’];  
  383.         }  
  384.         $cache=array($table=>array(‘key’=>$key,‘field’=>$tmp));  
  385.         return $cache;  
  386.     }  
  387.       
  388.      /** 
  389.      +———————————————————- 
  390.      * 把数据表的字段及主键序列化写入缓存文件 
  391.      +———————————————————- 
  392.      * @param array $arr 数据表字段组成的数组 
  393.      +———————————————————- 
  394.      * @return bool 
  395.      +———————————————————- 
  396.      */   
  397.       
  398.     private function _writeTableCache($arr)  
  399.     {  
  400.         $content=‘<?php exit;?>’.serialize($arr);  
  401.         fclose(fopen($this->tableCacheFile,‘w’));  
  402.         if(file_put_contents($this->tableCacheFile,$content)){  
  403.             return true;  
  404.         }else{  
  405.             return false;  
  406.         }  
  407.     }  
  408.       
  409.   
  410.     /** 
  411.      +———————————————————- 
  412.      * 析构函数回调 
  413.      +———————————————————- 
  414.      */   
  415.     
  416.     function __destruct()  
  417.     {  
  418.         $this->db=null;  
  419.         define(‘QUERYNUM’,$this->queryNum);  
  420.         if(conf(‘debug’)){  
  421.             foreach ($this->querySql as $v){  
  422.                 $sql.=$v.‘<br />’;  
  423.             }  
  424.             define(‘QUERYSQL’,$sql);  
  425.             define(‘CACHENUM’,$this->cacheNum);  
  426.         }  
  427.     }  
  428.   
  429. }  
  430. //fetch(‘PDO_FETCH_ASSOC’)  
  431.   
  432. ?>  

test.php (演示)

PHP代码
  1. <?php  
  2. require_once(‘db.class.php’);  
  3. if(!defined(‘APP_PATH’)) define(‘APP_PATH’, dirname(__FILE__));  
  4. $charset=conf(‘charset’)==‘utf8’?‘utf-8’:conf(‘charset’);  
  5. header("content-type:text/html; charset=$charset");   
  6.   
  7. function config($configNew)  
  8. {  
  9.     $config=array(  
  10.             ‘cacheDir’=>APP_PATH.‘/’.‘cache’,  
  11.             ‘charset’=>‘utf8’,  
  12.             ‘dbType’=>‘mysql’,  
  13.             ‘sessionType’=>‘data’,  
  14.             ‘tplFilename’=>‘.html’,  
  15.             ‘dbLink’=>‘pdo’,  
  16.             ‘dbHost’=>,  
  17.             ‘dbName’=>,  
  18.             ‘dbUser’=>,  
  19.             ‘dbPass’=>,  
  20.             ‘dbprefix’=>,  
  21.             );  
  22.     $conf=array_merge($config,$configNew);  
  23.     return $conf;  
  24. }  
  25.   
  26. function conf($key)  
  27. {  
  28.     global $config;  
  29.     return $config[$key];  
  30. }  
  31. $config=config(array(‘dbHost’=>‘localhost’,‘dbName’=>‘rb’,‘dbUser’=>‘root’,‘dbPass’=>‘root’));  
  32. $db=new db();  
  33.   
  34. $list=$db->dbCache(100,‘findAll’,‘xzy_article_title’,,,‘aid desc’,20);  
  35. if(emptyempty($list)) exit;  
  36. echo ‘<ul>’;  
  37. foreach($list as $v){  
  38.     echo ‘<li>’.$v[‘title’].‘ [‘.date(‘Y-m-d’,$v[‘addtime’]).‘]</li>’;  
  39. }  
  40. echo ‘</ul>’;  
  41. ?>  

生成的数据缓存:
aac.jpg