PHP缓存 Cache Lite源码总结

PHP缓存 Cache Lite源码总结

1、【设置参数的方法】
在构造方法中调用对象方法setOption设置类私有变量的值,从而完成对象的初始化操作。
在setOption方法中通过判断$name是否为$availableOptions数组中的一员来设置初始值。
感觉有些坏味道

2、【缓存文件命名规则】
命名规则对fileNameProtection参数有两种设置方法
如果此参数为真,则对于$group和$id进行md5加密,否则直接使用这两个字段
默认情况下使用md5加密后的名称
如下所示代码:

1
2
3
4
5
 if ($this->_fileNameProtection) {
         $suffix = 'cache_'.md5($group).'_'.md5($id);
 } else {
         $suffix = 'cache_'.$group.'_'.$id;
  }

3、【缓存路径设置规则】
如果设置了hashedDirectoryLevel参数,则会在用户所给的缓存地址(cacheDir参数)后添加多层(hashedDirectoryLevel层)目录,所有的目录以cache_开头
默认hashedDirectoryLevel的值为0,即不添加嵌套目录
如下所示代码:

1
2
3
4
5
6
7
        $root = $this->_cacheDir;    //    用户所给的缓存地址
        if ($this->_hashedDirectoryLevel>0) {
            $hash = md5($suffix);
            for ($i=0 ; $i<$this->_hashedDirectoryLevel ; $i++) {
                $root = $root . 'cache_' . substr($hash, 0, $i + 1) . '/';
            }   
        }

4、【基于内存的缓存】
在缓存参数中我们可以看到有一个memoryCaching参数,此参数默认情况下为false,
对于这个内存缓存,我有些疑惑:

1、基于apache2服务器的PHP页面,每次访问都会有一个apache线程处理这个请求,而在每个线程中,这些内存缓存都是以对象属性的形式存在,则在各线程间如何共享?这样存在的意义是什么?
2、如果是在一次执行中进行缓存,那这样做的意义又有多大呢?


5、【过期时间的控制】
在每次读取缓存时间都会调用_setRefreshTime方法刷新此前时间,
$this->_refreshTime = time() – $this->_lifeTime;
然后在取数据时判断缓存文件的创建时间是否比_refreshTime大

1
2
3
     if ((file_exists($this->_file)) && (@filemtime($this->_file) > $this->_refreshTime)) {
                    $data = $this->_read();
               }

6、【_write函数中的坏味道】
在_write函数和_setFileName函数之间有重复代码
个人觉得可以将此提取出来。

7、【caching参数的必要性】
此参数控制全局的缓存的打开与关闭,在调试程序时十分有用

8、【自动清除旧缓存的控制】
automaticCleaningFactor参数控制是否自动清除旧缓存,
如果此参数的值大于1则会进行自动清除,只是在程序中针对自动清除有一个随机数,
可以理解为 1 / automaticCleaningFactor的机率进行自动清除旧缓存

9、【……】
很轻便的缓存类,如果是简单应用,值得一试!

EOF

PHP in Action Objects, Design, Agility读后总结

PHP in Action Objects, Design, Agility读后总结

经过了一个月的辛苦,终于把这本书看完了,觉得受益良多!
觉得自己对PHP5中的一些以前没有注意到的细节有了更多的了解,例如PHP4和php5中的对于对象复制的问题,PHP中的方法重载,访问控制,类方法,虚类和虚方法,类提示及接口等
另外就PHP中面向对象的what,how,why有了更清楚的认识,特别是一些设计原则的应用有了更深刻的认识
但是对于第二部分的测试和重构,觉得说得有些浅,至少我觉得有些用不上,
特别需要提到的是第三部分,构建WEB页面,其中就模板引擎,表单验证,MVC模式,数据抽象进行了详细的说明
这一章,让我对于那些框架性的东西有了更深层次的理解,
比如,对于数据抽象,可以联想到yii框架中的数据库类,很好的做到了书中提到的几个观点;
比如,模板引擎,让我对于正在使用的框架模板有了更清楚的认识。
比如,表单验证,对比黑夜路人的TMPHP框架中的那些工具类等等
特别是对于控制器的说明:让我明白自己正在使用的框架中对于控制器的错误使用;
总体来说:这是一本好书,值得一看。应该不止看一遍。

第一章:PHP and modern software development(PHP与现代软件开发)
简单介绍了PHP的一些历史和特点,PHP 5中的面向对象,设计模式,重构、敏捷开发以及测试驱动开发等等
第二章:Objects in PHP(PHP中的对象)
本章首先稍微详细的介绍了PHP中的面向对象,以及一些简单的DEMO,然后是PHP中的异常处理,以及PHP4和php5中的对于对象复制的问题和PHP中的方法重载,
在这一章中对于PHP的面向对象知识有一些补充;
第三章:Using PHP classes effectively(有效使用PHP类)
本章就PHP类的使用作了详细介绍,其中包括访问控制,类方法,虚类和虚方法,类提示及接口,
在这里对PHP中的类和接口的相关知识作了详细介绍,如果基础不好,可以多看几遍
第四章:Understanding objects and classes(理解对象和类)
本章就使用对象和类的 why,how,what作了介绍,其中说明了面向对象的优点,设计原则,以及使用的地方
如果有时间希望可以再看一遍

EOF

在nokia s60中使用python将收件箱中的内容导出保存为文本

在nokia s60中使用python将收件箱中的内容导出保存为文本

由于手机收到139邮箱的邮件信息比较多,想把它删除,但是又不能全选后全部删除
所以使用python写了一个简单的程序读取收件箱的内容,并将其存储到指定位置
并且根据联系人的手机号码分别创建文件

【程序说明】
此程序是根据s60提供的python API实现
其中用到了inbox和contacts

1、程序取收件箱的所有短信,
2、遍历,针对每条短信,
3、通过contacts对象取出联系人的电话,
4、将短信内容写入以联系人电话命名的txt文件中
5、删除短信

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
import inbox
from datetime import datetime
import time
import contacts
 
def get_mobile_number_by_name(db, name):
    found = db.find(name)
 
    #如果在联系人中可以找到,则返回号码,否则直接返回name
    mobile_number = found[0].find('mobile_number')[0].value if len(found)  > 0 else name
    return mobile_number
 
 
def write_mess(name, mess):
    filename = 'e:/data/inbox/' + name + '.txt'
    f = open(filename, 'a+')
    f.write(mess.encode('utf-8'))
    f.close()
 
inbox_obj = inbox.Inbox()
m = inbox_obj.sms_messages()
db = contacts.open()
 
k = 0
for i in m:
    k += 1
    name = inbox_obj.address(i)
    content = inbox_obj.content(i)
 
    #格式化时间
    format = '%Y-%m-%d %H:%M:%S'
    result = datetime.fromtimestamp(inbox_obj.time(i))
    ltime = result.strftime(format)
 
    #输出内容,调试用
    print name, content, ltime
    mobile_number = get_mobile_number_by_name(db, name)
 
    #对于
    if (mobile_number[0:6] != '106581'):
        write_mess(mobile_number, ltime + content + "\r\n")
 
    # 删除短信
    inbox_obj.delete(i)
 
    #一次执行10条,此处为测试用
    if k > 10:
        break

注意:此程序为个人所用,会删除收件箱内的所有短信,如果出现问题本人概不负责^_^!
此程序在nokia e63型号机器上测试通过,使用python1.9.7 for s60

EOF