Uncategories

浅析Discuz,uchome中模板实现原理

Posted in Uncategories on 6月 29th, 2009 by 飘(piao2010) – Be the first to comment

Dizcuz模板和uc home 中的模板是一样的,由 parse_template函数实现(比起smarty可真是超轻量级了).

解析过程并不复杂,主要是读取模板文件(.htm),用规则表达式替换标记为PHP标准语法,最终生成一个标准的PHP文件,保存到缓存目录。而在主文件(.php)中获取数据,最后有个调用 include(template(”*.htm”))

template 调 用 parse_template 将模板缓存为 .php文件,返回文件名给 include()函数,include可以动态包含文件,所以得到了完整的.php. 如果缓存中已经有该文件,直接从缓存读取,所以修改了模板,就要 清除缓存,重新生成,否则,还会显示原来的。

Asp中的 include 不可以动态包含,所以通常是将模板文件解析成块,通过替换该块,实现的。当然有的模板比如kudzu Asp引擎,是将模板解析为节点树,每种节点都有相应的处理插件,从根节点开始执行,遍历节点树,最后生成静态内容,保存到文件后直接输出。

SQL连接语句

Posted in Uncategories on 6月 27th, 2009 by 飘(piao2010) – Be the first to comment

有两表a和b,前两字段完全相同:(id int,name varchar(10)…)
id name
———– ———-
1 a
2 b
3 c

以下的查询语句,你知道它的运行结果吗?:
1.
select * from a left join b on a.id=b.id where a.id=1
2.
select * from a left join b on a.id=b.id and a.id=1
3.
select * from a left join b on a.id=b.id and b.id=1
4.
select * from a left join b on a.id=1

结果:
id name id name
———– ———– ———– ———–
1 10 1 10

(1 row(s) affected)
read more »

PHP 中的数据库缓存原理

Posted in Uncategories on 6月 22nd, 2009 by 飘(piao2010) – Be the first to comment

如果后台应用接收到浏览器端的查询请求后,每次都与数据库连接读取数据,势必增加数据库的负担。而往往有大量的请求是重复的,我们可以把这些重复的信息采用缓存技术保存下来,重复使用,这样,在某些情况下可以大大提高程序的性能。 read more »

优化PHP代码的40条建议

Posted in Uncategories on 6月 22nd, 2009 by 飘(piao2010) – Be the first to comment

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。 read more »

常用的正则表达式

Posted in Uncategories on 6月 22nd, 2009 by 飘(piao2010) – Be the first to comment

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

匹配空行的正则表达式:\n[\s| ]*\r

匹配HTML标记的正则表达式:/< (.*)>.*< \/\1>|< (.*) \/>/

匹配首尾空格的正则表达式:(^\s*)|(\s*$)

匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

sql语句:^(select|drop|delete|create|update|insert).*$

1、非负整数:^\d+$

2、正整数:^[0-9]*[1-9][0-9]*$

3、非正整数:^((-\d+)|(0+))$

4、负整数:^-[0-9]*[1-9][0-9]*$

5、整数:^-?\d+$

6、非负浮点数:^\d+(\.\d+)?$

7、正浮点数:^((0-9)+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

8、非正浮点数:^((-\d+\.\d+)?)|(0+(\.0+)?))$

9、负浮点数:^(-((正浮点数正则式)))$

10、英文字符串:^[A-Za-z]+$

11、英文大写串:^[A-Z]+$

12、英文小写串:^[a-z]+$

13、英文字符数字串:^[A-Za-z0-9]+$

14、英数字加下划线串:^\w+$

15、E-mail地址:^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$

16、URL:^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$
或:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\’:+!]*([^<>\"\"])*$

17、邮政编码:^[1-9]\d{5}$

18、中文:^[\u0391-\uFFE5]+$

19、电话号码:^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$

20、手机号码:^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$
read more »

学习编程的一点忠告,尽可能的坚持!

Posted in Uncategories on 6月 22nd, 2009 by 飘(piao2010) – Be the first to comment

转载自cgeek’s blog
不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
浮躁的人容易问:XX有钱途吗;——建议你去抢银行; read more »