memcache是个好东西
标题是个废话,不好就不会有那么多人用了。
一直在考虑利用PHP+mysql自己架构一个简单的类似memcache的简单应用,原理比较简单,基本可实现缓存的键值分配、过期的设置、数据的存储等等。功能上无非就是写入和读取。简单点说其实也就是利用一个查询的集去写入缓存。每次查询到公共部分的时候直接获取结果。这样虽然也是要经过数据库查询,但对于某些多次进行的相同查询的时候效果也是比较明显的。当然不会有类似memcache的分布式架构,仅仅是一个小型的应用,适用于不方便安装memcache的时候。属于项目级的一个数据层的小型缓存机制。可惜无法理解底层的内存操作技术,否则直接写入到内存可能效果会非常好,因为基于的功能仅仅为读、写没有memcache那么复杂的应用,应该效果会好一些^_^
尝试写了一下感觉还不错,呵呵,对于小型的项目应用自信还可以应付。最近状态不错。继续加油~~忙完手里的项目赶快忙自己的……
PHP的正规表达式中内置的通用字符簇
总忘记这些东西,每次需要用到的时候都是现找,懒的时候就用其他方法绕过去。
字符簇
|
含义
|
“[[:alpha:]]” | 任何字母 |
“[[:digit:]]” | 任何数字 |
“[[:alnum:]]” | 任何字母和数字 |
“[[:space:]]” | 任何白字符 |
“[[:upper:]]” | 任何大写字母 |
“[[:lower:]]” | 任何小写字母 |
“[[:punct:]]” | 任何标点符号 |
“[[:xdigit:]]” | 任何16进制的数字,相当于[0-9a-fA-F] |
[转]用phpxref生成PHP项目的交叉参考文档
PHPXref -PHP Cross Referencing Documentation
Generator。通过遍历项目所有的文件为PHP项目生成文档的工具,生成的文档格式支持html以及gz方式的压缩文件,同时在文档中包含项目中设计到的基类、方法、函数、变量、注释、甚至涉及到的时间表结构甚至相互include、require到的文件等等,使用中我还发现它对smarty的模板文件的支持也很好。而注释则支持PHPDocumentor风格的注释,同时支持基于javascript的客户端的搜索。phpxref是用perl编写的,对于windows平台,它自己内嵌了TinyPerl 所以无需事先安装perl。所以要做的事情大多就是:
汉语词性分析
最近一直利用晚上时间在研究分词,不过中文分词实在是个麻烦的技术,个人能力也十分有限,特别对于底层技术还有很多缺憾,目前只能利用已有的字典文件进行分词,没有神经智能可言:(不过应付一些提取关键词以及查找分类什么的还稍微有点用途,有点不太好的就是效率不是很高,还得继续钻研啊……
在网络找到一个词典,很不错,词频、词重以及词性都有了,不过词性有的看不明白,通过网络整理到了一个比较全的北大的标注标准:
Microsoft Expression Web 2 简体中文体验
微软可能计划利用Microsoft Expression Web 2替代FrontPage(这里怀念一下FrontPage最初的HTML基础绝大多数还是来自FrontPage代码模式中的),刚刚下载到Microsoft Expression Web 2的30天试用版,将全部安装与体验过程截图。值得一提的是,Microsoft Expression Web 2支持PHP代码的开发,虽然不如专业的IDE那么强大,不过对于函数的代码提示还是比较清晰速度也比较快。美中不足的是这个软件继承了微软那庞大的身躯,安装文件达到500M多,安装后占用磁盘空间能达到接近800M多。
申请Key的地址:http://www.microsoft.com/expression/productkey.aspx
利用数组排序
前一阵写个小代码,因为涉及到的数据库数据不是很多,我将全部数据都写入到一个缓存数组中,这样进行列表的时候不会再次进行数据库查询(虽然数据不多,但由于整个系统的数据库压力很大负载比较高因此能不去查询数据库就尽量不去查询)。
array_multisort — 对多个数组或多维数组进行排序
说明
bool array_multisort ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )如果成功则返回 TRUE,失败则返回 FALSE。
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
输入数组被当成一个表的列并以行来排序――这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。
本函数的参数结构有些不同寻常,但是非常灵活。第一个参数必须是一个数组。接下来的每个参数可以是数组或者是下面列出的排序标志。
排序顺序标志:
SORT_ASC – 按照上升顺序排序
SORT_DESC – 按照下降顺序排序
排序类型标志:
SORT_REGULAR – 将项目按照通常方法比较
SORT_NUMERIC – 将项目按照数值比较
SORT_STRING – 将项目按照字符串比较
每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 – 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。
不过,由于需要对数组进行各种方式排序,所以开始的时候觉得有点麻烦,想到常用的一个函数sort()可以简单的进行排序根据php函数的命名规则我想会不会有多数组的呢?哈哈,于是查询了一下array_multi_sort没有?再试array_multisort,哈哈,果然存在一个array_multisort(),详细看了一下说明就是我需要的函数。
另外为了加强记忆和理解在搜索引擎上搜索了一下,才发现学无止境啊,这个函数其实应该算做经常性和须灵活使用的函数之列。想起以前做的一个小项目,也涉及到数组排序问题,记得当时没考虑内置函数,自己写了一个函数那个复杂程序实在是头痛,现在想来真的是浪费时间:(
DBCheck build 20080425发布!
之前给客户做的一个小工具,自Discuz!3.1.2以来一直有人使用,因此一直不断得随着Discuz!更新而更新。
本次Discuz!升级到了6.1.0,因此,DBCheck的数据基准校验包(db_pack.php)也随之升级了。
功能上没时间做新的扩展——而且目前觉得也没太大必要,呵呵,这个工具几乎就是一次性的,大家都是为了查看自己的数据结构是否有问题,检查完之后也就不用了^_^
下载地址还是在“深海(Deepseath)Discuz!风格演示论坛”:http://www.exinqing.net/discuz/viewthread.php?tid=172
至于模板MSNCool过几天再弄,近期事情实在太多了,手里的项目还在继续赶:(
忙过这阵好好弄一下:)
PHP删除非空目录
PHP内置的函数有一个rmdir()是用来删除目录的。但是这个函数根据手册:
尝试删除 dirname 所指定的目录。 该目录必须是空的,而且要有相应的权限。如果成功则返回 TRUE,失败则返回 FALSE
因此可以自己写的函数来弥补rmdir的不足,思路很简单:先检查目录下有没有文件或文件夹,如果有,就用递归删除目录下的所有文件和文件夹,然后删除此目录。
代码如下:<?php
function d_rmdir($dirname) {
if(!is_dir($dirname)) {
return false;
}
$handle = @opendir($dirname);
while(($file = @readdir($handle)) !== false){
if($file != '.' && $file != '..'){
$dir = $dirname . '/' . $file;
is_dir($dir) ? d_rmdir($dir) : @unlink($dir);
}
}
closedir($handle);
return rmdir($dirname) ;
}
?>
PHP中的GBK编码和UTF-8编码
1. GBK (GB2312/GB18030)
\x00-\xff GBK双字节编码范围
\x20-\x7f ASCII
\xa1-\xff 中文
\x80-\xff 中文
2. UTF-8 (Unicode)
\u4e00-\u9fa5 (中文)
\x3130-\x318F (韩文
\xAC00-\xD7A3 (韩文)
\u0800-\u4e00 (日文)
ps: 韩文是大于[\u9fa5]的字符
正则例子:
preg_replace(“/([\x80-\xff])/”,”",$str);
preg_replace(“/([u4e00-u9fa5])/”,”",$str);