盘符及文件夹的隐藏(用注册表)
Submitted by on 2006, September 30, 10:36 PM
(1) 盘符的隐藏:
HKEY_CURRENT_USER \Software\Microsoft\Windows\CurrentVersion\Policies\Explorer下建立DWORD键值“NoDrives”,16进制数缺省时是00000000。改成10进制数,如果你要隐藏C盘,就把00000000改为4;隐藏D盘,就改为8;隐藏C、D盘,就改为12。依次类推。删除“NoDrives”后就可以恢复所有驱动器的正常显示。
(2) 隐藏文件夹:
1.完全隐藏
第一步,把文件夹(最好用英文名)的属性设为隐藏。
第二步,进入注册表(运行regedit),将HKEY_LOCAL_MACHINE主键下子键Software/Microsoft/Windows/CurrentVerssion/explorer/Advanced/Folder/Hidden/SHOWALL下的值CheckedValue改为0。
第三步,查看(工具)-文件夹选项-查看-选中“显示所有文件”。
这样就无法看隐藏属性的文件夹了。只能在地址栏中输入完整的路径进入该文件夹。
中秋快到了
Submitted by on 2006, September 30, 12:55 AM
名片设计好了……
Submitted by on 2006, September 28, 10:10 PM
PHP生成MYSQL语句函数
Submitted by on 2006, September 23, 9:26 PM
简单的功能没有写成类了,感觉使用函数的方式会更简便。
| 代码: |
/* * 创建插入数据的SQL语句 * $table_name : 表名 * $fields_arr : 字段/值数组,例如: $fields_arr = array("Username" => "$Username","Password" => "$Password"); */ function create_insert_sql($table_name, $fields_arr) { foreach ($fields_arr as $key=>$val) { if (!empty($keys) && !empty($vals)) { $keys .= ", "; $vals .= ", "; } $keys .= "`$key`"; $vals .= ""$val""; } return "insert into `$table_name` ($keys) values ($vals)"; } /* * 创建修改数据的SQL语句 * $table_name : 表名 * $fields_arr : 字段/值数组,例如: $fields_arr = array("Username" => "$Username", "Password" => "$Password"); * $condition : SQL语句条件,例如: Where `id`="$id" */ function create_update_sql($table_name, $fields_arr, $condition) { foreach ($fields_arr as $key=>$val) { if (!empty($sql_str)) { $sql_str .= ", "; } $sql_str .= "`$key`="$val""; } return "Update `$table_name` SET $sql_str $condition"; } /* * 创建SQL搜索子句 * $search_arr : SQL搜索数组 * $par_junk : and , 将返回 and (...) 形式子句 * or , 将返回 or (...) 形式子句 * 空 , 将返回 ... 子句 * 例 : * $search_arr[] = array( "field" => "title", "keyword" => "aa", "condition" => "like", "junk" => "and" ); * $search_arr[] = array( "field" => "title", "keyword" => "bb", "condition" => "=", "junk" => "or" ); * $search_arr[] = array( "field" => "title", "keyword" => "cc", "condition" => ">", "junk" => "and" ); * create_search_sql($search_arr,"and") * 将返回 : and (`title` like "%aa%" or `title`="bb" and `title`>"cc") * 注 : * 数组各字段不能为空 * field 字段名 * keyword 搜索关键字 * condition 查询条件 like , = , > , < , <> * junk 条件查询关系 and , or */ function create_search_sql($search_arr,$par_junk="") { $first = true; foreach ($search_arr as $key=>$val) { if (is_array($val)) { $junk = ($val["junk"]!="and" && $val["junk"]!="or") ? "" : $val["junk"]; $field = $val["field"]; $condition = $val["condition"]; $keyword = $val["keyword"]; if (!empty($field) && !empty($condition) && !empty($keyword)) { if ($first) { $junk = ""; $first = false; } else { $junk = " $junk"; } switch ($condition) { // like , < , > , = , <> , case "like": $sql_clause .= "$junk `$field` like "%$keyword%""; break; case "<": case ">": case "=": case "<>": $sql_clause .= "$junk `$field`$condition"$keyword""; break; } } } } if (!empty($sql_clause) && ($par_junk=="and" || $par_junk=="or")) { $sql_clause = "$par_junk ($sql_clause)"; } return $sql_clause; } |
PHP连接ACCESS数据库
Submitted by on 2006, September 23, 9:24 PM
| 代码: |
| <?PHP
//创建ADO连接 $conn = @new COM("ADODB.Connection") or die ("ADO连接失败!"); $connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("temp/TempData.mdb"); $conn->Open($connstr); //创建记录集查询 $rs = @new COM("ADODB.RecordSet"); $rs->Open("select * from blog_Content",$conn,1,3); echo $rs->Fields["log_Title"]->Value; //输出log_Title字段 echo "<br/>"; $rs->Movenext(); //将记录集指针下移 echo $rs->Fields["log_Title"]->Value; $rs->close(); ?> |
这只是个简单的方法,同样我们还可以Microsoft.Jet.OLEDB.4.0的方法连接,速度会更快一些。
注:conn = @new COM("ADODB.Connection") or die ("ADO连接失败!");
需要注意一下,这里 COM 必须使用大写,之前使用小写 Windows XP 居然出现非法操作,另这里使用了一个@符号,他的作用主要是容错!
其他的数据库操作方法类似于ASP,就不作多的介绍了~
CDONTS和Jmail的使用
Submitted by on 2006, September 21, 3:04 AM
CDONTS
<%
Set cdomail = Server.CreateObject("CDONTS.NewMail") "建立邮件对象
cdomail.Subject = "Mail Subject" "邮件标题
cdomail.From = "Sender"s Mail" "发件人的地址
cdomail.To = "Email will from" "收件人的地址
cdomail.Body = "Mail Body" "邮件的内容
cdomail.Send "执行发送
%>
这种方法发送邮件是最简单的,同时也带来一定的问题,就是很少有服务器会开这项服务!
我们写程序,一般情况下都是说要代码模块化,这样方便维护,同时也方便移植。因此,我在这里将这个发邮件的写成一个子程,在调用的时候可以直接调用(当然,如果你高兴写成函数的话也是可以的,这个主要是看个人兴趣):
<%
"参数说明
"Subject : 邮件标题
"MailAddress : 发件服务器的地址,如smtp.163.com
"Email : 收件人邮件地址
"Sender : 发件人姓名
"Content : 邮件内容
"Fromer : 发件人的邮件地址
Sub SendAction(subject, mailaddress, email, sender, content, fromer)
Set jmail = Server.CreateObject("JMAIL.SMTPMail") "创建一个JMAIL对象
jmail.silent = true "JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
jmail.logging = true "启用使用日志
jmail.Charset = "GB2312" "邮件文字的代码为简体中文
jmail.ContentType = "text/html" "邮件的格式为HTML的
jmail.ServerAddress = mailaddress "发送邮件的服务器
jmail.AddRecipient Email "邮件的收件人
jmail.SenderName = sender "邮件发送者的姓名
jmail.Sender = fromer "邮件发送者的邮件地址
jmail.Priority = 1 "邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Subject = subject "邮件的标题
jmail.Body = content "邮件的内容
"由于没有用到密抄跟抄送,这里屏蔽掉这两句,如果您有需要的话,可以在这里恢复
"jmail.AddRecipientBCC Email "密件收件人的地址
"jmail.AddRecipientCC Email "邮件抄送者的地址
jmail.Execute() "执行邮件发送
jmail.Close "关闭邮件对象
End Sub
"调用此Sub的例子
Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromer
strSubject = "这是一封用JMAIL发送的测试邮件"
strContent = "JMail组件发送测试成功!"
strEmail = "xxx@xxx.com"
strFromer = "xxx@xxx.com"
strMailAddress = "mail.xxx.com"
Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)
%>
----------------------------------------------------------
Jmail
<%
Set jmail = Server.CreateObject("JMAIL.SMTPMail") "创建一个JMAIL对象
jmail.silent = true "JMAIL不会抛出例外错误,返回的值为FALSE跟TRUE
jmail.logging = true "启用使用日志
jmail.Charset = "GB2312" "邮件文字的代码为简体中文
jmail.ContentType = "text/html" "邮件的格式为HTML的
jmail.ServerAddress = "Server Address" "发送邮件的服务器
jmail.AddRecipient Email "邮件的收件人
jmail.SenderName = "SenderName" "邮件发送者的姓名
jmail.Sender = "Email Address" "邮件发送者的邮件地址
jmail.Priority = 1 "邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Subject = "Mail Subject" "邮件的标题
jmail.Body = "Mail Body" "邮件的内容
jmail.AddRecipientBCC Email "密件收件人的地址
jmail.AddRecipientCC Email "邮件抄送者的地址
jmail.Execute() "执行邮件发送
jmail.Close "关闭邮件对象
%>
w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件,有些方法需要身份验证的(如163、yahoo等),可以用下面的方法解决:
<%
Set jmail = Server.CreateObject("JMAIL.Message") "建立发送邮件的对象
jmail.silent = true "屏蔽例外错误,返回FALSE跟TRUE两值j
jmail.logging = true "启用邮件日志
jmail.Charset = "GB2312" "邮件的文字编码为国标
jmail.ContentType = "text/html" "邮件的格式为HTML格式
jmail.AddRecipient Email "邮件收件人的地址
jmail.From = "Email From for Sender" "发件人的E-MAIL地址
jmail.MailServerUserName = "UserName of Email" "登录邮件服务器所需的用户名
jmail.MailServerPassword = "Password of Email" "登录邮件服务器所需的密码
jmail.Subject = "Mail Subject" "邮件的标题
jmail.Body = "Mail Body" "邮件的内容
jmail.Prority = 1 "邮件的紧急程序,1 为最快,5 为最慢, 3 为默认值
jmail.Send("Server Address") "执行邮件发送(通过邮件服务器地址)
jmail.Close() "关闭对象
%>
Jmail的Prority属性可能在早于4.3版本之前不支持.
ASP 简体转繁体
Submitted by on 2006, September 20, 7:40 PM
| 代码: |
<% if request("f")="" then response.end end if function f(content) dim s,t,c,d,i s="万,与,丑,专,业,丛,东,丝,丢,两,严,丧,个,丬,丰,临,为,丽,举,么,义,乌,乐,乔,习,乡,书,买,乱,争,于,亏,云,亘,亚,产,亩,亲,亵,亸,亿,仅,从,仑,仓,仪,们,价,众,优,伙,会,伛,伞,伟,传,伤,伥,伦,伧,伪,伫,体,余,佣,佥,侠,侣,侥,侦,侧,侨,侩,侪,侬,俣,俦,俨,俩,俪,俭,债,倾,偬,偻,偾,偿,傥,傧,储,傩,儿,兑,兖,党,兰,关,兴,兹,养,兽,冁,内,冈,册,写,军,农,冢,冯,冲,决,况,冻,净,凄,凉,凌,减,凑,凛,几,凤,凫,凭,凯,击,凼,凿,刍,划,刘,则,刚,创,删,别,刬,刭,刽,刿,剀,剂,剐,剑,剥,剧,劝,办,务,劢,动,励,劲,劳,势,勋,勐,勚,匀,匦,匮,区,医,华,协,单,卖,卢,卤,卧,卫,却,卺,厂,厅,历,厉,压,厌,厍,厕,厢,厣,厦,厨,厩,厮,县,叁,参,叆,叇,双,发,变,叙,叠,叶,号,叹,叽,吁,后,吓,吕,吗,吣,吨,听,启,吴,呒,呓,呕,呖,呗,员,呙,呛,呜,咏,咔,咙,咛,咝,咤,咴,咸,哌,响,哑,哒,哓,哔,哕,哗,哙,哜,哝,哟,唛,唝,唠,唡,唢,唣,唤,唿,啧,啬,啭,啮,啰,啴,啸,喷,喽,喾,嗫,嗬,嗳,嘘,嘤,嘱,噜,噼,嚣,嚯,团,园,囱,围,囵,国,图,圆,圣,圹,场,坂,坏,块,坚,坛,坜,坝,坞,坟,坠,垄,垅,垆,垒,垦,垧,垩,垫,垭,垯,垱,垲,垴,埘,埙,埚,埝,埯,堑,堕,塆,塬,墙,壮,声,壳,壶,壸,处,备,复,够,头,夸,夹,夺,奁,奂,奋,奖,奥,妆,妇,妈,妩,妪,妫,姗,姜,娄,娅,娆,娇,娈,娱,娲,娴,婳,婴,婵,婶,媪,嫒,嫔,嫱,嬷,孙,学,孪,宁,宝,实,宠,审,宪,宫,宽,宾,寝,对,寻,导,寿,将,尔,尘,尝,尧,尴,尸,尽,层,屃,屉,届,属,屡,屦,屿,岁,岂,岖,岗,岘,岙,岚,岛,岭,岳,岽,岿,峃,峄,峡,峣,峤,峥,峦,崂,崃,崄,崭,嵘,嵚,嵛,嵝,嵴,巅,巩,巯,币,帅,师,帏,帐,帘,帜,带,帧,帮,帱,帻,帼,幂,幞,干,并,幺,广,庄,庆,庐,庑,库,应,庙,庞,废,庼,廪,开,异,弃,张,弥,弪,弯,弹,强,归,当,录,彟,彦,彻,径,徕,御,忆,忏,忧,忾,怀,态,怂,怃,怄,怅,怆,怜,总,怼,怿,恋,恳,恶,恸,恹,恺,恻,恼,恽,悦,悫,悬,悭,悯,惊,惧,惨,惩,惫,惬,惭,惮,惯,愍,愠,愤,愦,愿,慑,慭,憷,懑,懒,懔,戆,戋,戏,戗,战,戬,户,扎,扑,扦,执,扩,扪,扫,扬,扰,抚,抛,抟,抠,抡,抢,护,报,担,拟,拢,拣,拥,拦,拧,拨,择,挂,挚,挛,挜,挝,挞,挟,挠,挡,挢,挣,挤,挥,挦,捞,损,捡,换,捣,据,捻,掳,掴,掷,掸,掺,掼,揸,揽,揿,搀,搁,搂,搅,携,摄,摅,摆,摇,摈,摊,撄,撑,撵,撷,撸,撺,擞,攒,敌,敛,数,斋,斓,斗,斩,断,无,旧,时,旷,旸,昙,昼,昽,显,晋,晒,晓,晔,晕,晖,暂,暧,札,术,朴,机,杀,杂,权,条,来,杨,杩,杰,极,构,枞,枢,枣,枥,枧,枨,枪,枫,枭,柜,柠,柽,栀,栅,标,栈,栉,栊,栋,栌,栎,栏,树,栖,样,栾,桊,桠,桡,桢,档,桤,桥,桦,桧,桨,桩,梦,梼,梾,检,棂,椁,椟,椠,椤,椭,楼,榄,榇,榈,榉,槚,槛,槟,槠,横,樯,樱,橥,橱,橹,橼,檐,檩,欢,欤,欧,歼,殁,殇,残,殒,殓,殚,殡,殴,毁,毂,毕,毙,毡,毵,氇,气,氢,氩,氲,汇,汉,污,汤,汹,沓,沟,没,沣,沤,沥,沦,沧,沨,沩,沪,沵,泞,泪,泶,泷,泸,泺,泻,泼,泽,泾,洁,洒,洼,浃,浅,浆,浇,浈,浉,浊,测,浍,济,浏,浐,浑,浒,浓,浔,浕,涂,涌,涛,涝,涞,涟,涠,涡,涢,涣,涤,润,涧,涨,涩,淀,渊,渌,渍,渎,渐,渑,渔,渖,渗,温,游,湾,湿,溃,溅,溆,溇,滗,滚,滞,滟,滠,满,滢,滤,滥,滦,滨,滩,滪,漤,潆,潇,潋,潍,潜,潴,澜,濑,濒,灏,灭,灯,灵,灾,灿,炀,炉,炖,炜,炝,点,炼,炽,烁,烂,烃,烛,烟,烦,烧,烨,烩,烫,烬,热,焕,焖,焘,煅,煳,煺,熘,爱,爷,牍,牦,牵,牺,犊,犟,犭,状,犷,犸,犹,狈,狍,狝,狞,独,狭,狮,狯,狰,狱,狲,猃,猎,猕,猡,猪,猫,猬,献,獭,玑,玙,玚,玛,玮,环,现,玱,玺,珉,珏,珐,珑,珰,珲,琎,琏,琐,琼,瑶,瑷,璇,璎,瓒,瓮,瓯,电,画,畅,畲,畴,疖,疗,疟,疠,疡,疬,疮,疯,疱,疴,痈,痉,痒,痖,痨,痪,痫,痴,瘅,瘆,瘗,瘘,瘪,瘫,瘾,瘿,癞,癣,癫,癯,皑,皱,皲,盏,盐,监,盖,盗,盘,眍,眦,眬,着,睁,睐,睑,瞒,瞩,矫,矶,矾,矿,砀,码,砖,砗,砚,砜,砺,砻,砾,础,硁,硅,硕,硖,硗,硙,硚,确,硷,碍,碛,碜,碱,碹,磙,礼,祎,祢,祯,祷,祸,禀,禄,禅,离,秃,秆,种,积,称,秽,秾,稆,税,稣,稳,穑,穷,窃,窍,窑,窜,窝,窥,窦,窭,竖,竞,笃,笋,笔,笕,笺,笼,笾,筑,筚,筛,筜,筝,筹,签,简,箓,箦,箧,箨,箩,箪,箫,篑,篓,篮,篱,簖,籁,籴,类,籼,粜,粝,粤,粪,粮,糁,糇,紧,絷,纟,纠,纡,红,纣,纤,纥,约,级,纨,纩,纪,纫,纬,纭,纮,纯,纰,纱,纲,纳,纴,纵,纶,纷,纸,纹,纺,纻,纼,纽,纾,线,绀,绁,绂,练,组,绅,细,织,终,绉,绊,绋,绌,绍,绎,经,绐,绑,绒,结,绔,绕,绖,绗,绘,给,绚,绛,络,绝,绞,统,绠,绡,绢,绣,绤,绥,绦,继,绨,绩,绪,绫,绬,续,绮,绯,绰,绱,绲,绳,维,绵,绶,绷,绸,绹,绺,绻,综,绽,绾,绿,缀,缁,缂,缃,缄,缅,缆,缇,缈,缉,缊,缋,缌,缍,缎,缏,缐,缑,缒,缓,缔,缕,编,缗,缘,缙,缚,缛,缜,缝,缞,缟,缠,缡,缢,缣,缤,缥,缦,缧,缨,缩,缪,缫,缬,缭,缮,缯,缰,缱,缲,缳,缴,缵,罂,网,罗,罚,罢,罴,羁,羟,羡,翘,翙,翚,耢,耧,耸,耻,聂,聋,职,聍,联,聩,聪,肃,肠,肤,肷,肾,肿,胀,胁,胆,胜,胧,胨,胪,胫,胶,脉,脍,脏,脐,脑,脓,脔,脚,脱,脶,脸,腊,腌,腘,腭,腻,腼,腽,腾,膑,臜,舆,舣,舰,舱,舻,艰,艳,艹,艺,节,芈,芗,芜,芦,苁,苇,苈,苋,苌,苍,苎,苏,苘,苹,茎,茏,茑,茔,茕,茧,荆,荐,荙,荚,荛,荜,荞,荟,荠,荡,荣,荤,荥,荦,荧,荨,荩,荪,荫,荬,荭,荮,药,莅,莜,莱,莲,莳,莴,莶,获,莸,莹,莺,莼,萚,萝,萤,营,萦,萧,萨,葱,蒇,蒉,蒋,蒌,蓝,蓟,蓠,蓣,蓥,蓦,蔷,蔹,蔺,蔼,蕲,蕴,薮,藁,藓,虏,虑,虚,虫,虬,虮,虽,虾,虿,蚀,蚁,蚂,蚕,蚝,蚬,蛊,蛎,蛏,蛮,蛰,蛱,蛲,蛳,蛴,蜕,蜗,蜡,蝇,蝈,蝉,蝎,蝼,蝾,螀,螨,蟏,衅,衔,补,衬,衮,袄,袅,袆,袜,袭,袯,装,裆,裈,裢,裣,裤,裥,褛,褴,襁,襕,见,观,觃,规,觅,视,觇,览,觉,觊,觋,觌,觍,觎,觏,觐,觑,觞,触,觯,詟,誉,誊,讠,计,订,讣,认,讥,讦,讧,讨,让,讪,讫,训,议,讯,记,讱,讲,讳,讴,讵,讶,讷,许,讹,论,讻,讼,讽,设,访,诀,证,诂,诃,评,诅,识,诇,诈,诉,诊,诋,诌,词,诎,诏,诐,译,诒,诓,诔,试,诖,诗,诘,诙,诚,诛,诜,话,诞,诟,诠,诡,询,诣,诤,该,详,诧,诨,诩,诪,诫,诬,语,诮,误,诰,诱,诲,诳,说,诵,诶,请,诸,诹,诺,读,诼,诽,课,诿,谀,谁,谂,调,谄,谅,谆,谇,谈,谊,谋,谌,谍,谎,谏,谐,谑,谒,谓,谔,谕,谖,谗,谘,谙,谚,谛,谜,谝,谞,谟,谠,谡,谢,谣,谤,谥,谦,谧,谨,谩,谪,谫,谬,谭,谮,谯,谰,谱,谲,谳,谴,谵,谶,谷,豮,贝,贞,负,贠,贡,财,责,贤,败,账,货,质,贩,贪,贫,贬,购,贮,贯,贰,贱,贲,贳,贴,贵,贶,贷,贸,费,贺,贻,贼,贽,贾,贿,赀,赁,赂,赃,资,赅,赆,赇,赈,赉,赊,赋,赌,赍,赎,赏,赐,赑,赒,赓,赔,赕,赖,赗,赘,赙,赚,赛,赜,赝,赞,赟,赠,赡,赢,赣,赪,赵,赶,趋,趱,趸,跃,跄,跖,跞,践,跶,跷,跸,跹,跻,踊,踌,踪,踬,踯,蹑,蹒,蹰,蹿,躏,躜,躯,车,轧,轨,轩,轪,轫,转,轭,轮,软,轰,轱,轲,轳,轴,轵,轶,轷,轸,轹,轺,轻,轼,载,轾,轿,辀,辁,辂,较,辄,辅,辆,辇,辈,辉,辊,辋,辌,辍,辎,辏,辐,辑,辒,输,辔,辕,辖,辗,辘,辙,辚,辞,辩,辫,边,辽,达,迁,过,迈,运,还,这,进,远,违,连,迟,迩,迳,迹,适,选,逊,递,逦,逻,遗,遥,邓,邝,邬,邮,邹,邺,邻,郁,郄,郏,郐,郑,郓,郦,郧,郸,酝,酦,酱,酽,酾,酿,释,里,鉅,鉴,銮,錾,钆,钇,针,钉,钊,钋,钌,钍,钎,钏,钐,钑,钒,钓,钔,钕,钖,钗,钘,钙,钚,钛,钝,钞,钟,钠,钡,钢,钣,钤,钥,钦,钧,钨,钩,钪,钫,钬,钭,钮,钯,钰,钱,钲,钳,钴,钵,钶,钷,钸,钹,钺,钻,钼,钽,钾,钿,铀,铁,铂,铃,铄,铅,铆,铈,铉,铊,铋,铌,铍,铎,铏,铐,铑,铒,铓,铔,铕,铖,铗,铘,铙,铚,铛,铜,铝,铞,铟,铠,铡,铢,铣,铤,铥,铦,铧,铨,铩,铪,铫,铬,铭,铮,铯,铰,铱,铲,铳,铴,铵,银,铷,铸,铹,铺,铻,铼,铽,链,铿,销,锁,锂,锃,锄,锅,锆,锇,锈,锉,锊,锋,锌,锍,锎,锏,锐,锑,锒,锓,锔,锕,锖,锗,锘,错,锚,锛,锜,锝,锞,锟,锠,锡,锢,锣,锤,锥,锦,锧,锨,锩,锪,锫,锬,锭,键,锯,锰,锱,锲,锳,锴,锵,锶,锷,锸,锹,锺,锻,锼,锽,锾,锿,镀,镁,镂,镃,镄,镅,镆,镇,镈,镉,镊,镋,镌,镍,镎,镏,镐,镑,镒,镓,镔,镕,镖,镗,镘,镙,镚,镛,镜,镝,镞,镟,镠,镡,镢,镣,镤,镥,镦,镧,镨,镩,镪,镫,镬,镭,镮,镯,镰,镱,镲,镳,镴,镵,镶,长,门,闩,闪,闫,闬,闭,问,闯,闰,闱,闲,闳,间,闵,闶,闷,闸,闹,闺,闻,闼,闽,闾,闿,阀,阁,阂,阃,阄,阅,阆,阇,阈,阉,阊,阋,阌,阍,阎,阏,阐,阑,阒,阓,阔,阕,阖,阗,阘,阙,阚,阛,队,阳,阴,阵,阶,际,陆,陇,陈,陉,陕,陧,陨,险,随,隐,隶,隽,难,雏,雠,雳,雾,霁,霉,霭,靓,静,靥,鞑,鞒,鞯,鞴,韦,韧,韨,韩,韪,韫,韬,韵,页,顶,顷,顸,项,顺,须,顼,顽,顾,顿,颀,颁,颂,颃,预,颅,领,颇,颈,颉,颊,颋,颌,颍,颎,颏,颐,频,颒,颓,颔,颕,颖,颗,题,颙,颚,颛,颜,额,颞,颟,颠,颡,颢,颣,颤,颥,颦,颧,风,飏,飐,飑,飒,飓,飔,飕,飖,飗,飘,飙,飚,飞,飨,餍,饤,饥,饦,饧,饨,饩,饪,饫,饬,饭,饮,饯,饰,饱,饲,饳,饴,饵,饶,饷,饸,饹,饺,饻,饼,饽,饾,饿,馀,馁,馂,馃,馄,馅,馆,馇,馈,馉,馊,馋,馌,馍,馎,馏,馐,馑,馒,馓,馔,馕,马,驭,驮,驯,驰,驱,驲,驳,驴,驵,驶,驷,驸,驹,驺,驻,驼,驽,驾,驿,骀,骁,骂,骃,骄,骅,骆,骇,骈,骉,骊,骋,验,骍,骎,骏,骐,骑,骒,骓,骔,骕,骖,骗,骘,骙,骚,骛,骜,骝,骞,骟,骠,骡,骢,骣,骤,骥,骦,骧,髅,髋,髌,鬓,魇,魉,鱼,鱽,鱾,鱿,鲀,鲁,鲂,鲄,鲅,鲆,鲇,鲈,鲉,鲊,鲋,鲌,鲍,鲎,鲏,鲐,鲑,鲒,鲓,鲔,鲕,鲖,鲗,鲘,鲙,鲚,鲛,鲜,鲝,鲞,鲟,鲠,鲡,鲢,鲣,鲤,鲥,鲦,鲧,鲨,鲩,鲪,鲫,鲬,鲭,鲮,鲯,鲰,鲱,鲲,鲳,鲴,鲵,鲶,鲷,鲸,鲹,鲺,鲻,鲼,鲽,鲾,鲿,鳀,鳁,鳂,鳃,鳄,鳅,鳆,鳇,鳈,鳉,鳊,鳋,鳌,鳍,鳎,鳏,鳐,鳑,鳒,鳓,鳔,鳕,鳖,鳗,鳘,鳙,鳛,鳜,鳝,鳞,鳟,鳠,鳡,鳢,鳣,鸟,鸠,鸡,鸢,鸣,鸤,鸥,鸦,鸧,鸨,鸩,鸪,鸫,鸬,鸭,鸮,鸯,鸰,鸱,鸲,鸳,鸴,鸵,鸶,鸷,鸸,鸹,鸺,鸻,鸼,鸽,鸾,鸿,鹀,鹁,鹂,鹃,鹄,鹅,鹆,鹇,鹈,鹉,鹊,鹋,鹌,鹍,鹎,鹏,鹐,鹑,鹒,鹓,鹔,鹕,鹖,鹗,鹘,鹙,鹚,鹛,鹜,鹝,鹞,鹟,鹠,鹡,鹢,鹣,鹤,鹥,鹦,鹧,鹨,鹩,鹪,鹫,鹬,鹭,鹯,鹰,鹱,鹲,鹳,鹴,鹾,麦,麸,黄,黉,黡,黩,黪,黾,鼋,鼌,鼍,鼗,鼹,齄,齐,齑,齿,龀,龁,龂,龃,龄,龅,龆,龇,龈,龉,龊,龋,龌,龙,龚,龛,龟" t="萬,與,醜,專,業,叢,東,絲,丟,兩,嚴,喪,個,爿,豐,臨,為,麗,舉,麼,義,烏,樂,喬,習,鄉,書,買,亂,爭,於,虧,雲,亙,亞,產,畝,親,褻,嚲,億,僅,從,侖,倉,儀,們,價,眾,優,夥,會,傴,傘,偉,傳,傷,倀,倫,傖,偽,佇,體,餘,傭,僉,俠,侶,僥,偵,側,僑,儈,儕,儂,俁,儔,儼,倆,儷,儉,債,傾,傯,僂,僨,償,儻,儐,儲,儺,兒,兌,兗,黨,蘭,關,興,茲,養,獸,囅,內,岡,冊,寫,軍,農,塚,馮,沖,決,況,凍,淨,淒,涼,淩,減,湊,凜,幾,鳳,鳧,憑,凱,擊,氹,鑿,芻,劃,劉,則,剛,創,刪,別,剗,剄,劊,劌,剴,劑,剮,劍,剝,劇,勸,辦,務,勱,動,勵,勁,勞,勢,勳,猛,勩,勻,匭,匱,區,醫,華,協,單,賣,盧,鹵,臥,衛,卻,巹,廠,廳,曆,厲,壓,厭,厙,廁,廂,厴,廈,廚,廄,廝,縣,三,參,靉,靆,雙,發,變,敘,疊,葉,號,歎,嘰,籲,後,嚇,呂,嗎,唚,噸,聽,啟,吳,嘸,囈,嘔,嚦,唄,員,咼,嗆,嗚,詠,哢,嚨,嚀,噝,吒,噅,鹹,呱,響,啞,噠,嘵,嗶,噦,嘩,噲,嚌,噥,喲,嘜,嗊,嘮,啢,嗩,唕,喚,呼,嘖,嗇,囀,齧,囉,嘽,嘯,噴,嘍,嚳,囁,呵,噯,噓,嚶,囑,嚕,劈,囂,謔,團,園,囪,圍,圇,國,圖,圓,聖,壙,場,阪,壞,塊,堅,壇,壢,壩,塢,墳,墜,壟,壟,壚,壘,墾,坰,堊,墊,埡,墶,壋,塏,堖,塒,塤,堝,墊,垵,塹,墮,壪,原,牆,壯,聲,殼,壺,壼,處,備,複,夠,頭,誇,夾,奪,奩,奐,奮,獎,奧,妝,婦,媽,嫵,嫗,媯,姍,薑,婁,婭,嬈,嬌,孌,娛,媧,嫻,嫿,嬰,嬋,嬸,媼,嬡,嬪,嬙,嬤,孫,學,孿,寧,寶,實,寵,審,憲,宮,寬,賓,寢,對,尋,導,壽,將,爾,塵,嘗,堯,尷,屍,盡,層,屭,屜,屆,屬,屢,屨,嶼,歲,豈,嶇,崗,峴,嶴,嵐,島,嶺,嶽,崠,巋,嶨,嶧,峽,嶢,嶠,崢,巒,嶗,崍,嶮,嶄,嶸,嶔,崳,嶁,脊,巔,鞏,巰,幣,帥,師,幃,帳,簾,幟,帶,幀,幫,幬,幘,幗,冪,襆,幹,並,么,廣,莊,慶,廬,廡,庫,應,廟,龐,廢,廎,廩,開,異,棄,張,彌,弳,彎,彈,強,歸,當,錄,彠,彥,徹,徑,徠,禦,憶,懺,憂,愾,懷,態,慫,憮,慪,悵,愴,憐,總,懟,懌,戀,懇,惡,慟,懨,愷,惻,惱,惲,悅,愨,懸,慳,憫,驚,懼,慘,懲,憊,愜,慚,憚,慣,湣,慍,憤,憒,願,懾,憖,怵,懣,懶,懍,戇,戔,戲,戧,戰,戩,戶,紮,撲,扡,執,擴,捫,掃,揚,擾,撫,拋,摶,摳,掄,搶,護,報,擔,擬,攏,揀,擁,攔,擰,撥,擇,掛,摯,攣,掗,撾,撻,挾,撓,擋,撟,掙,擠,揮,撏,撈,損,撿,換,搗,據,撚,擄,摑,擲,撣,摻,摜,摣,攬,撳,攙,擱,摟,攪,攜,攝,攄,擺,搖,擯,攤,攖,撐,攆,擷,擼,攛,擻,攢,敵,斂,數,齋,斕,鬥,斬,斷,無,舊,時,曠,暘,曇,晝,曨,顯,晉,曬,曉,曄,暈,暉,暫,曖,劄,術,樸,機,殺,雜,權,條,來,楊,榪,傑,極,構,樅,樞,棗,櫪,梘,棖,槍,楓,梟,櫃,檸,檉,梔,柵,標,棧,櫛,櫳,棟,櫨,櫟,欄,樹,棲,樣,欒,棬,椏,橈,楨,檔,榿,橋,樺,檜,槳,樁,夢,檮,棶,檢,欞,槨,櫝,槧,欏,橢,樓,欖,櫬,櫚,櫸,檟,檻,檳,櫧,橫,檣,櫻,櫫,櫥,櫓,櫞,簷,檁,歡,歟,歐,殲,歿,殤,殘,殞,殮,殫,殯,毆,毀,轂,畢,斃,氈,毿,氌,氣,氫,氬,氳,彙,漢,汙,湯,洶,遝,溝,沒,灃,漚,瀝,淪,滄,渢,溈,滬,濔,濘,淚,澩,瀧,瀘,濼,瀉,潑,澤,涇,潔,灑,窪,浹,淺,漿,澆,湞,溮,濁,測,澮,濟,瀏,滻,渾,滸,濃,潯,濜,塗,湧,濤,澇,淶,漣,潿,渦,溳,渙,滌,潤,澗,漲,澀,澱,淵,淥,漬,瀆,漸,澠,漁,瀋,滲,溫,遊,灣,濕,潰,濺,漵,漊,潷,滾,滯,灩,灄,滿,瀅,濾,濫,灤,濱,灘,澦,濫,瀠,瀟,瀲,濰,潛,瀦,瀾,瀨,瀕,灝,滅,燈,靈,災,燦,煬,爐,燉,煒,熗,點,煉,熾,爍,爛,烴,燭,煙,煩,燒,燁,燴,燙,燼,熱,煥,燜,燾,煆,糊,退,溜,愛,爺,牘,犛,牽,犧,犢,強,犬,狀,獷,獁,猶,狽,麅,獮,獰,獨,狹,獅,獪,猙,獄,猻,獫,獵,獼,玀,豬,貓,蝟,獻,獺,璣,璵,瑒,瑪,瑋,環,現,瑲,璽,瑉,玨,琺,瓏,璫,琿,璡,璉,瑣,瓊,瑤,璦,璿,瓔,瓚,甕,甌,電,畫,暢,佘,疇,癤,療,瘧,癘,瘍,鬁,瘡,瘋,皰,屙,癰,痙,癢,瘂,癆,瘓,癇,癡,癉,瘮,瘞,瘺,癟,癱,癮,癭,癩,癬,癲,臒,皚,皺,皸,盞,鹽,監,蓋,盜,盤,瞘,眥,矓,著,睜,睞,瞼,瞞,矚,矯,磯,礬,礦,碭,碼,磚,硨,硯,碸,礪,礱,礫,礎,硜,矽,碩,硤,磽,磑,礄,確,鹼,礙,磧,磣,堿,镟,滾,禮,禕,禰,禎,禱,禍,稟,祿,禪,離,禿,稈,種,積,稱,穢,穠,穭,稅,穌,穩,穡,窮,竊,竅,窯,竄,窩,窺,竇,窶,豎,競,篤,筍,筆,筧,箋,籠,籩,築,篳,篩,簹,箏,籌,簽,簡,籙,簀,篋,籜,籮,簞,簫,簣,簍,籃,籬,籪,籟,糴,類,秈,糶,糲,粵,糞,糧,糝,餱,緊,縶,糸,糾,紆,紅,紂,纖,紇,約,級,紈,纊,紀,紉,緯,紜,紘,純,紕,紗,綱,納,紝,縱,綸,紛,紙,紋,紡,紵,紖,紐,紓,線,紺,絏,紱,練,組,紳,細,織,終,縐,絆,紼,絀,紹,繹,經,紿,綁,絨,結,絝,繞,絰,絎,繪,給,絢,絳,絡,絕,絞,統,綆,綃,絹,繡,綌,綏,絛,繼,綈,績,緒,綾,緓,續,綺,緋,綽,緔,緄,繩,維,綿,綬,繃,綢,綯,綹,綣,綜,綻,綰,綠,綴,緇,緙,緗,緘,緬,纜,緹,緲,緝,縕,繢,緦,綞,緞,緶,線,緱,縋,緩,締,縷,編,緡,緣,縉,縛,縟,縝,縫,縗,縞,纏,縭,縊,縑,繽,縹,縵,縲,纓,縮,繆,繅,纈,繚,繕,繒,韁,繾,繰,繯,繳,纘,罌,網,羅,罰,罷,羆,羈,羥,羨,翹,翽,翬,耮,耬,聳,恥,聶,聾,職,聹,聯,聵,聰,肅,腸,膚,膁,腎,腫,脹,脅,膽,勝,朧,腖,臚,脛,膠,脈,膾,髒,臍,腦,膿,臠,腳,脫,腡,臉,臘,醃,膕,齶,膩,靦,膃,騰,臏,臢,輿,艤,艦,艙,艫,艱,豔,艸,藝,節,羋,薌,蕪,蘆,蓯,葦,藶,莧,萇,蒼,苧,蘇,檾,蘋,莖,蘢,蔦,塋,煢,繭,荊,薦,薘,莢,蕘,蓽,蕎,薈,薺,蕩,榮,葷,滎,犖,熒,蕁,藎,蓀,蔭,蕒,葒,葤,藥,蒞,蓧,萊,蓮,蒔,萵,薟,獲,蕕,瑩,鶯,蓴,蘀,蘿,螢,營,縈,蕭,薩,蔥,蕆,蕢,蔣,蔞,藍,薊,蘺,蕷,鎣,驀,薔,蘞,藺,藹,蘄,蘊,藪,槁,蘚,虜,慮,虛,蟲,虯,蟣,雖,蝦,蠆,蝕,蟻,螞,蠶,蠔,蜆,蠱,蠣,蟶,蠻,蟄,蛺,蟯,螄,蠐,蛻,蝸,蠟,蠅,蟈,蟬,蠍,螻,蠑,螿,蟎,蠨,釁,銜,補,襯,袞,襖,嫋,褘,襪,襲,襏,裝,襠,褌,褳,襝,褲,襇,褸,襤,繈,襴,見,觀,覎,規,覓,視,覘,覽,覺,覬,覡,覿,覥,覦,覯,覲,覷,觴,觸,觶,讋,譽,謄,訁,計,訂,訃,認,譏,訐,訌,討,讓,訕,訖,訓,議,訊,記,訒,講,諱,謳,詎,訝,訥,許,訛,論,訩,訟,諷,設,訪,訣,證,詁,訶,評,詛,識,詗,詐,訴,診,詆,謅,詞,詘,詔,詖,譯,詒,誆,誄,試,詿,詩,詰,詼,誠,誅,詵,話,誕,詬,詮,詭,詢,詣,諍,該,詳,詫,諢,詡,譸,誡,誣,語,誚,誤,誥,誘,誨,誑,說,誦,誒,請,諸,諏,諾,讀,諑,誹,課,諉,諛,誰,諗,調,諂,諒,諄,誶,談,誼,謀,諶,諜,謊,諫,諧,謔,謁,謂,諤,諭,諼,讒,諮,諳,諺,諦,謎,諞,諝,謨,讜,謖,謝,謠,謗,諡,謙,謐,謹,謾,謫,譾,謬,譚,譖,譙,讕,譜,譎,讞,譴,譫,讖,穀,豶,貝,貞,負,貟,貢,財,責,賢,敗,賬,貨,質,販,貪,貧,貶,購,貯,貫,貳,賤,賁,貰,貼,貴,貺,貸,貿,費,賀,貽,賊,贄,賈,賄,貲,賃,賂,贓,資,賅,贐,賕,賑,賚,賒,賦,賭,齎,贖,賞,賜,贔,賙,賡,賠,賧,賴,賵,贅,賻,賺,賽,賾,贗,贊,贇,贈,贍,贏,贛,赬,趙,趕,趨,趲,躉,躍,蹌,蹠,躒,踐,躂,蹺,蹕,躚,躋,踴,躊,蹤,躓,躑,躡,蹣,躕,躥,躪,躦,軀,車,軋,軌,軒,軑,軔,轉,軛,輪,軟,轟,軲,軻,轤,軸,軹,軼,軤,軫,轢,軺,輕,軾,載,輊,轎,輈,輇,輅,較,輒,輔,輛,輦,輩,輝,輥,輞,輬,輟,輜,輳,輻,輯,轀,輸,轡,轅,轄,輾,轆,轍,轔,辭,辯,辮,邊,遼,達,遷,過,邁,運,還,這,進,遠,違,連,遲,邇,逕,跡,適,選,遜,遞,邐,邏,遺,遙,鄧,鄺,鄔,郵,鄒,鄴,鄰,鬱,郤,郟,鄶,鄭,鄆,酈,鄖,鄲,醞,醱,醬,釅,釃,釀,釋,裏,钜,鑒,鑾,鏨,釓,釔,針,釘,釗,釙,釕,釷,釺,釧,釤,鈒,釩,釣,鍆,釹,鍚,釵,鈃,鈣,鈈,鈦,鈍,鈔,鍾,鈉,鋇,鋼,鈑,鈐,鑰,欽,鈞,鎢,鉤,鈧,鈁,鈥,鈄,鈕,鈀,鈺,錢,鉦,鉗,鈷,缽,鈳,鉕,鈽,鈸,鉞,鑽,鉬,鉭,鉀,鈿,鈾,鐵,鉑,鈴,鑠,鉛,鉚,鈰,鉉,鉈,鉍,鈮,鈹,鐸,鉶,銬,銠,鉺,鋩,錏,銪,鋮,鋏,鋣,鐃,銍,鐺,銅,鋁,銱,銦,鎧,鍘,銖,銑,鋌,銩,銛,鏵,銓,鎩,鉿,銚,鉻,銘,錚,銫,鉸,銥,鏟,銃,鐋,銨,銀,銣,鑄,鐒,鋪,鋙,錸,鋱,鏈,鏗,銷,鎖,鋰,鋥,鋤,鍋,鋯,鋨,鏽,銼,鋝,鋒,鋅,鋶,鐦,鐧,銳,銻,鋃,鋟,鋦,錒,錆,鍺,鍩,錯,錨,錛,錡,鍀,錁,錕,錩,錫,錮,鑼,錘,錐,錦,鑕,鍁,錈,鍃,錇,錟,錠,鍵,鋸,錳,錙,鍥,鍈,鍇,鏘,鍶,鍔,鍤,鍬,鍾,鍛,鎪,鍠,鍰,鎄,鍍,鎂,鏤,鎡,鐨,鎇,鏌,鎮,鎛,鎘,鑷,钂,鐫,鎳,鎿,鎦,鎬,鎊,鎰,鎵,鑌,鎔,鏢,鏜,鏝,鏍,鏰,鏞,鏡,鏑,鏃,鏇,鏐,鐔,钁,鐐,鏷,鑥,鐓,鑭,鐠,鑹,鏹,鐙,鑊,鐳,鐶,鐲,鐮,鐿,鑔,鑣,鑞,鑱,鑲,長,門,閂,閃,閆,閈,閉,問,闖,閏,闈,閑,閎,間,閔,閌,悶,閘,鬧,閨,聞,闥,閩,閭,闓,閥,閣,閡,閫,鬮,閱,閬,闍,閾,閹,閶,鬩,閿,閽,閻,閼,闡,闌,闃,闠,闊,闋,闔,闐,闒,闕,闞,闤,隊,陽,陰,陣,階,際,陸,隴,陳,陘,陝,隉,隕,險,隨,隱,隸,雋,難,雛,讎,靂,霧,霽,黴,靄,靚,靜,靨,韃,鞽,韉,韝,韋,韌,韍,韓,韙,韞,韜,韻,頁,頂,頃,頇,項,順,須,頊,頑,顧,頓,頎,頒,頌,頏,預,顱,領,頗,頸,頡,頰,頲,頜,潁,熲,頦,頤,頻,頮,頹,頷,頴,穎,顆,題,顒,顎,顓,顏,額,顳,顢,顛,顙,顥,纇,顫,顬,顰,顴,風,颺,颭,颮,颯,颶,颸,颼,颻,飀,飄,飆,飆,飛,饗,饜,飣,饑,飥,餳,飩,餼,飪,飫,飭,飯,飲,餞,飾,飽,飼,飿,飴,餌,饒,餉,餄,餎,餃,餏,餅,餑,餖,餓,餘,餒,餕,餜,餛,餡,館,餷,饋,餶,餿,饞,饁,饃,餺,餾,饈,饉,饅,饊,饌,饢,馬,馭,馱,馴,馳,驅,馹,駁,驢,駔,駛,駟,駙,駒,騶,駐,駝,駑,駕,驛,駘,驍,罵,駰,驕,驊,駱,駭,駢,驫,驪,騁,驗,騂,駸,駿,騏,騎,騍,騅,騌,驌,驂,騙,騭,騤,騷,騖,驁,騮,騫,騸,驃,騾,驄,驏,驟,驥,驦,驤,髏,髖,髕,鬢,魘,魎,魚,魛,魢,魷,魨,魯,魴,魺,鮁,鮃,鯰,鱸,鮋,鮓,鮒,鮊,鮑,鱟,鮍,鮐,鮭,鮚,鮳,鮪,鮞,鮦,鰂,鮜,鱠,鱭,鮫,鮮,鮺,鯗,鱘,鯁,鱺,鰱,鰹,鯉,鰣,鰷,鯀,鯊,鯇,鮶,鯽,鯒,鯖,鯪,鯕,鯫,鯡,鯤,鯧,鯝,鯢,鯰,鯛,鯨,鯵,鯴,鯔,鱝,鰈,鰏,鱨,鯷,鰮,鰃,鰓,鱷,鰍,鰒,鰉,鰁,鱂,鯿,鰠,鼇,鰭,鰨,鰥,鰩,鰟,鰜,鰳,鰾,鱈,鱉,鰻,鰵,鱅,鰼,鱖,鱔,鱗,鱒,鱯,鱤,鱧,鱣,鳥,鳩,雞,鳶,鳴,鳲,鷗,鴉,鶬,鴇,鴆,鴣,鶇,鸕,鴨,鴞,鴦,鴒,鴟,鴝,鴛,鴬,鴕,鷥,鷙,鴯,鴰,鵂,鴴,鵃,鴿,鸞,鴻,鵐,鵓,鸝,鵑,鵠,鵝,鵒,鷳,鵜,鵡,鵲,鶓,鵪,鶤,鵯,鵬,鵮,鶉,鶊,鵷,鷫,鶘,鶡,鶚,鶻,鶖,鶿,鶥,鶩,鷊,鷂,鶲,鶹,鶺,鷁,鶼,鶴,鷖,鸚,鷓,鷚,鷯,鷦,鷲,鷸,鷺,鸇,鷹,鸌,鸏,鸛,鸘,鹺,麥,麩,黃,黌,黶,黷,黲,黽,黿,鼂,鼉,鞀,鼴,齇,齊,齏,齒,齔,齕,齗,齟,齡,齙,齠,齜,齦,齬,齪,齲,齷,龍,龔,龕,龜" c=split(s,",") d=split(t,",") for i=0 to 2555 content=replace(content,c(i),d(i)) next f=content end function Set fso = Server.CreateObject("Scripting.FileSystemObject") set d = fso.opentextfile(server.mappath(request("f")),1,True) response.write f(d.ReadAll) set fso = nothing d.close %> |
如何理解PHP模板引擎SMARTY
Submitted by on 2006, September 17, 10:53 AM
一、MVC需要模板
MVC最早是在SmallTalk语言的开发过程中总结出的一种设计模式,MVC分别代 表了"模型"、"视图"和"控制",目的就是让不同的开发角色在大中型项目中各司 其职。在网络应用程序的开发中,可以用下图来表示各概念之间的关系。
该图展示了一个简单的WEB应用程序,用户在浏览器上看到信息是数据库服务 器上的内容,但在这之前经过了应用服务器加工。开发人员负责的就是建立数 据结构、处理数据的逻辑以及表示数据的方法。
96年CGI在中国开始流行的时候,早期的WEB程序员都是从HTML开始自学成材 的,在PERL中print一行行的HTML并不是一件难事,但是随着网络的一步步提 速,页面大小也从当初的二、三十K暴涨了十倍。写CGI程序就产生了一个迫切 的要求:分开PERL和HTML源码。于是,社会进步体现在开发小组内部的分工 上。由于美工和程序员对互相的工作并不是十分熟悉,在进行合作的过程中需 要用一种约定的"语言"进行交流。
这种语言并不是我们的母语或者英语,术语叫做"模板",逻辑和表示依靠它联 系。它是结合了HTML和脚本语言特征的一种表达方式。通过这种方式,表示层 可以按照用户所希望的格式来显示经过逻辑层处理过的数据。如果你有 Windows平台下MFC的开发经验,那么一定会很熟悉Document/Document Template/View的封装,这就是一个很典型的MVC例子。对于Web应用来说,个 人认为J2EE中的EJB/servlets/JSP是最强大的,当然还有简洁优美的Structs。 另一个很有名的实现就是COM/DCOM+ASP,这个组合在我国是最多人使用 的。
通过几种MVC实现在WEB应用程序里的对比,可以得到一个关于模板的概念: 一组插入了HTML的脚本或者说是插入了脚本HTML,通过这种插入的内容来表 示变化的数据。下面给出一个模板文件的例子,这个模板经过处理后在浏览器 里显示"Hello, world!"
| 代码: |
| <html>
<head> <title>$greetings</title> </head> <body> $greetings <body> </html> |
这里暂且省略处理方式,在后面做专门对比讨论。
二、为什么选SMARTY?
对PHP来说,有很多模板引擎可供选择,比如最早的PHPLIB template和后起之 秀Fast template,经过数次升级,已经相当成熟稳定。如果你对目前手中的模 板引擎很满意,那么......也请往下看,相信你作为一个自由软件爱好者或者追求 效率和优雅的开发者,下面的SMARTY介绍多少会有点意思。
除了个人偏好的影响,我一直倾向于使用官方标准的实现,比如APACHE的XML 引擎Axis。好处就是可以获得尽可能好的兼容性(比如早期MFC对于Win3x的兼 容性就比其它的应用程序框架好,当然现在各种版本都很完善了)。SMARTY发 布之前我一直使用的是PEAR 中的Integrated Template eXtension。这个引擎和 PHPLIB template、Fast template几乎是兼容的,从模板的语法到对模板的处理 同出一辙:都是将模板读入内存然后调用parse()函数,用数据对预置的标记进 行替换。
下面看看SMARTY是怎么做的。接到request后,先判断是否第一次请求该url, 如果是,将该url所需的模板文件"编译"成php脚本,然后redirect;如果不是, 就是说该url的模板已经被"编译"过了,检查不需要重编译后可以马上redirect, 重编译条件可以自己设定为固定时限,默认的是模板文件被修改。
怎么样,看起来是不是有点眼熟?想起来了──这不就是JSP的原理嘛!的确, 这种"编译"用在PHP这样的解释性脚本引擎上显得匪夷所思,但是仔细想 想,JAVA不也是由JVM解释执行的吗?这就叫"没有做不到,只有想不到"。
既然谈到了JAVA,就再对PHP的未来发表一点看法。PHP官方网站上宣布了要 在2003年年底发布PHP5.0版。这个版本拥有很多崭新的特性:比如异常处理, 命名空间,更加面向对象等等。可以说越来越向JAVA靠拢,SMARTY也是新特 性之一,使得PHP更适用于大中型项目的开发。但是似乎离我当初选择它的原 因──灵巧易用──越来越远了。但就一个软件的生存周期来看,PHP正处在 成长期,开发者赋予它更多的功能,以期能胜任商业应用是利大于弊的。作为 PHP的忠实用户,肯定不希望PHP总是被人指责"能力不足"吧?
为什么选择SMARTY,仅仅因为它很像JSP?当然有更为充分的理由。首先,除 了第一次编译的成本比较高之外,只要不修改模板文件,编译好的cache脚本就 随时可用,省去了大量的parse()时间;其次SMARTY像PHP一样有丰富的函数 库,从统计字数到自动缩进、文字环绕以及正则表达式都可以直接使用;如果 觉得不够,比如需要数据结果集分页显示的功能,SMARTY还有很强的扩展能 力,可以通过插件的形式进行扩充。
事实胜于雄辩。我设计了一个测试程序,通过速度和开发难度这两个因素对比 了一下SMARTY和PHPLIB template,选PHPLIB template的原因是在patrick的 文章《在PHP世界中选择最合适的模板》中有一个PHPLIB template对Fast template 的竞赛,结果PHPLIB template大获全胜,这使得SMARTY有了一个很好的对 手。在测试之前,先谈一下在安装过程中需要注意的问题。
三、可能遇到的问题
在SMARTY的官方网站上,有详尽的用户手册,可以选择在线HTML和PDF格式 的版本。这里就不再涉及手册上已有的内容,只是把初次使用可能遇到的问题 做个解释。
第一个问题就很要命:提示说找不到所需文件?并不是每一个人都按照 SMARTY默认目录结构来写应用的。这里需要手工指定,假设目录结构如下:
就需要在index.php里指定目录结构:
| 代码: |
| $smart->template_dir = "smarty/templates/";
$smart->compile_dir = "smarty/templates_c/"; $smart->config_dir = "smarty/configs/"; $smart->cache_dir = "smarty/cache/"; |
第一个问题解决了,紧接着就是第二个:我刚用Dreamweaver生成的漂亮模板 怎么不能用?并不是模板文件有什么问题,而是因为SMARTY默认的标记分隔 符是{},不巧的是Javascript肯定包含这个标记。好在我们可以用任意字符当作 分隔符,再加上这两句:
| 代码: |
| $smart->left_delimiter = "{/";
$smart->right_delimiter = "/}"; |
这下安装就基本完成,没问题了。
四、反衬和类比
先构思一下对测试的设计。主要的评比因素当然是速度了。为了进行速度测 试,采取了算术平均数的作法。在测试页面中重复将页面生成N遍,再对比总页 面生成时间。另一个重要因素是易用性(至于扩展性不用比较已经有结果了),所 以使用的模板不能太小。我用的是我个人主页的的页面,一个用 Firework+Dreamweaver生成的HTML文件,大小约7K。其中的变量设置也采取 最常用的区块,在PHPLIB template里叫block,而SMARTY则称section。别小看 这称呼的不同,易用性标准分两块:模板文件和脚本文件的语法是否简明易 用。
下面就深入到测试中来。先看看两种模板文件的语法:蓝条左边是PHPLIB template的模板,右边属于SMARTY。个人偏好是不一样的,所以这里不作评 论。着重对比一下脚本里的处理语句,先看PHPLIB template的:
| 代码: |
| $tpl->set_file(""phplib"", ""bigfile.htm"");
$tpl->set_block(""phplib"", ""row"", ""rows""); for ($j = 0; $j < 10; $j++){ $tpl->set_var(""tag"" ,"$j"); $tpl->parse(""rows"", ""row"", true); } $tpl->parse(""out"", ""phplib""); $tpl->p(""out""); |
下面是SMARTY的:
| 代码: |
| $smart->assign(""row"",$row);
$smart->display(""bigfile.htm""); |
SMARTY只用了tags和row两个变量,而PHPLIB template则多了模板文件的 handler,还有一个莫名其妙的out。说实在的这个out我当初学的时候就不知道 为什么要存在,现在看起来,还是别扭。为什么SMARTY少那么多处理语句 呢?答案是工作由引擎完成了。如果你喜欢钻研源程序,可以发现在 Smarty_compiler.class.php里有一个名叫_compile_tag()的函数,由它负责把 section这个标签转换成php语句。这不是一个普通的标签,它带有参数和数 据,节省了脚本编程的工作量,而模板标签上的工作量相差又不大,可以判定 在易用性上SMARTY高出一畴。
下面该轮到我们最关注的速度了,毕竟对于一个熟练的web开发者来说,掌握再 困难的工具不过是时间问题,何况模板引擎这种学习曲线平缓的技术。而速度 则是web应用程序的生命,尤其是模板引擎使用在并发访问量很大的站点上,这 点就更重要了。测试开始前,我觉得PHPLIB template会在这一环节上胜出,因 为它经历了很多次升级,已经基本没有什么bug,而且SMARTY的引擎个头太 大,不像它的对手只有两个文件。
果然,测试结果如下图,PHPLIB template有25%的速度优势:
但不会一直这样,我又按了一次刷新,这次得到了不一样的结果:
PHPLIB基本没变化,但是SMARTY提高了25%的速度。继续刷新,得到的都是 类似于第二次的结果:SMARTY比PHPLIB template 快上近10%。我想这就是编 译型比解释型快的原理了。SMARTY引擎本身就很大,加上还要把模板编译成 php文件,速度当然比不上小巧的PHPLIB template。但这只是第一次的情况。 第二次接到请求的时候,SMARTY发现该模板已经被编译过了,于是最耗时的 一步被跳过了,而对手还要按部就班地进行查找和替换工作。这是编译原理里 讲到的很经典的"用空间换时间"例子。
五、结论
结论就是如果你已经爱上SMARTY了,那么还等什么呢?当然并不是说它就全 能,就如同我用MVC模式来写我的个人网站,非但没有减少工作量,反而总是 要为不同层次间的耦合劳神。
SMARTY不适合什么呢?举个手册里的经典例子:天气预报网站。我还想到一 个:股市大盘。在这种网站上用SMARTY会由于经常的重编译而效率偏低,还 是PHPLIB template更为适合。
本文并不是为了对比两种引擎,而是为了说明SMARTY的优势。使用它最有意 义之处在于它是PHP新体系的一部份,作为一支独立的力量,除了.NET和JAVA ONE这两大体系之外,大中型web开发还有别的选择。这对于GNU项目来说, 其意义无异于刘邓大军千里跃进大别山。
纯编码实现Access数据库的建立或压缩
Submitted by on 2006, September 17, 6:13 AM
| 代码: |
<% "#######以下是一个类文件,下面的注解是调用类的方法################################################ "# 注意:如果系统不支持建立Scripting.FileSystemObject对象,那么数据库压缩功能将无法使用 "# Access 数据库类 "# CreateDbFile 建立一个Access 数据库文件 "# CompactDatabase 压缩一个Access 数据库文件 "# 建立对象方法: "# Set a = New DatabaseTools "# by (萧寒雪) s.f. "######################################################################################### Class DatabaseTools Public function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath) "建立数据库文件 "If DbVer is 0 Then Create Access97 dbFile "If DbVer is 1 Then Create Access2000 dbFile On error resume Next If Right(SavePath,1)<>"\" or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\" If Left(dbFileName,1)="\" or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName))) If DbExists(SavePath & dbFileName) Then Response.Write ("对不起,该数据库已经存在!") CreateDBfile = False Else Dim Ca Set Ca = Server.CreateObject("ADOX.Catalog") If Err.number<>0 Then Response.Write ("无法建立,请检查错误信息 " & Err.number & " " & Err.Description) Err.Clear Exit function End If If DbVer=0 Then call Ca.Create("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName) Else call Ca.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName) End If Set Ca = Nothing CreateDBfile = True End If End function Public function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath) "压缩数据库文件 "0 为access 97 "1 为access 2000 On Error resume next If Right(SavePath,1)<>"\" or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\" If Left(dbFileName,1)="\" or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid(dbFileName,2,Len(dbFileName))) If DbExists(SavePath & dbFileName) Then Response.Write ("对不起,该数据库已经存在!") CompactDatabase = False Else Dim Cd Set Cd =Server.CreateObject("JRO.JetEngine") If Err.number<>0 Then Response.Write ("无法压缩,请检查错误信息 " & Err.number & " " & Err.Description) Err.Clear Exit function End If If DbVer=0 Then call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True") Else call Cd.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName & ".bak.mdb;Jet OLEDB;Encrypt Database=True") End If "删除旧的数据库文件 call DeleteFile(SavePath & dbFileName) "将压缩后的数据库文件还原 call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName) Set Cd = False CompactDatabase = True End If end function Public function DbExists(byVal dbPath) "查找数据库文件是否存在 On Error resume Next Dim c Set c = Server.CreateObject("ADODB.Connection") c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath If Err.number<>0 Then Err.Clear DbExists = false else DbExists = True End If set c = nothing End function Public function AppPath() "取当前真实路径 AppPath = Server.MapPath("./") End function Public function AppName() "取当前程序名称 AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables("SCRIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME"))) End Function Public function DeleteFile(filespec) "删除一个文件 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If Err.number<>0 Then Response.Write("删除文件发生错误!请查看错误信息 " & Err.number & " " & Err.Description) Err.Clear DeleteFile = False End If call fso.DeleteFile(filespec) Set fso = Nothing DeleteFile = True End function Public function RenameFile(filespec1,filespec2) "修改一个文件 Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If Err.number<>0 Then Response.Write("修改文件名时发生错误!请查看错误信息 " & Err.number & " " & Err.Description) Err.Clear RenameFile = False End If call fso.CopyFile(filespec1,filespec2,True) call fso.DeleteFile(filespec1) Set fso = Nothing RenameFile = True End function End Class %> |
asp模板引擎终结者(WEB开发之ASP模式)
Submitted by on 2006, September 17, 6:08 AM
写于:2006/3/5
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://sunli.cnblogs.com/a...
关键词:ASP 模板
摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一 般ASP模板加载模板文件(加载组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。
摘要: 阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一般ASP模板加载模板文件(加载
组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性。
内容:
内容:
当前,WEB开发已经变得非常火爆,因为各种应用,已经约来越要求表现层和逻辑层的分离.ASP和HTML夹在一起程序将变得难于维护,可读性也差。在PHP领域,模板引擎已经非常普遍,如phplib,SMARTY,等等.有使用替换方式的,也有编译方式的(SMARTY),它们都较好的实现了逻辑层和表现层的分离.由于PHP的影响,在ASP界有人借鉴phplib等使用替换的方法开发出asp的模板类,由于ASP在字符处理上性能并不是很强大,所以在速度上受到影响,这样的模板在目前的应用也不是很广泛。如:
1<!--template.html-->
2<html>
3<head>
4<title>{$title}</title>
5</head>
6<body>
7{$body}
8</body>
9</html>
1<!--Template.asp-->
2<%
3TemplateCode=Load("template.html")"自定义函数,装载模板文件到TemplateCode
4TemplateCode=Replace(TemplateCode,"{$title}","asp模板引擎终结者")"替换模板
5TemplateCode=Replace(TemplateCode,"{$body}","asp模板引擎终结者内容")"替换模板
6Response.Write TemplateCode
7%> 上面的例子只是初步展示了当前ASP模板的思想,有ASP版的CMS系统已经嵌入了对模板的逻辑控制,虽然能够实现逻辑和界面的分离,但是这种模板存在的问题就是模板需要每次都用ASP解析一次,程序相当于解析两次,而且当要替换的内容很多的时候,将会降低性能.而且装载模板需要服务器支持一种组件(FSO,ADODB,XMLHTTP均可实现).
借鉴于编译型的模板,我在ASP中引进这种思路.提出一种应用在ASP中的功能和性能都很优良的模板体系.下面用代码表示:
1 <!--template.html-->
2 <html>
3 <head>
4 <title><%=title%></title>
5 </head>
6 <body>
7 <!--<%
8 "If逻辑控制,当然这里对于FOR,While 循环也一样处理,是不是觉得很简单呢,
9 "对逻辑进行html注释,在DW(Dreamweaver)下就不会应为逻辑控制的asp占位符产生变形,对于其他的变量将显示一个asp标记,便于修改
10 IF Catalog="music" Then
11 %>-->
12 <%=music%>
13 <!--<%Else%>-->
14 <%=book%>
15 <!--<%End If%>-->
16 </body>
17 </html>
1 <!--Template.asp-->
2 <%
3 title="asp模板引擎终结者"
4 Catalog="music"
5 music="音乐"
6 book="书"
7 %>
8 <!--#include file="template.html"-->思路:asp文件进行常规的逻辑处理,运算,不用管显示层,当然需要显示的变量需要和显示层结合(PHP也一样),在模板文件中用<%%>直接控制变量的显示和逻辑的控制,不显示的逻辑控制符用html注释符<!---->注释掉,当然,不注释也是可以的.这样在ASP文件的最后"<!--#include file="template.html"-->"就实现了模板和ASP文件的结合,实现了代码和表现层的分离,这里并没有用ASP去Load模板,然后替换,浪费不必要ASP资源.这些处理全部都省去了。你会发现写ASP文件变得更加方便,因为你再也不需要在其中控制替换,逻辑显示的行为。在ASP中直接执行肯定比替换要来得迅速和稳定.况且,加载模板的时候你必须还要加载一个组件.
写到这里,你也许明白了这种模板的精髓了,它只是一种设计模式,不是一个用模板类来处理的模板引擎。

