一、使用缓存
要开启Smarty的缓存,只需将caching设为true,并指定cache_dir即可.
使用cache_lefetime指定缓存生存时间,单位为秒,要对相同页面生成多个不同的缓存,在display或fetch中加入第二参数cache_id,如:
二、清除缓存
三、使用自定义缓存方式
设置cache_handler_func使用自定义的函数处理缓存,如:
该函数的一般是根椐$action来判断缓存当前操作:
一般使用md5($tpl_file.$cache_id.$compile_id)作为唯一的cache_id
如果需要,可使用gzcompress和gzuncompress来压缩和解压
四、局部关闭缓存
要在某些区域使缓存失效(只对需要的缓存),有几种方法:
inser:
定义一个inser标签要使用的处理函数,函数名格式为:insert_xx(array $params, object &$smarty)其中的xx是insert的name,也就是说,如果你定义的函数为insert_abc,则模板中使用方法为{insert name=’abc’}
参数通过$params传入
也可以做成insert插件,文件名命名为:insert.xx.php,函数命名为:smarty_insert_aa($params,&$smarty),xx定义同上register_block:
模板写法:{name}内容{/name}
写成block插件:
1)定义一件插件函数:block.cacheless.php,放在smarty的plugins目录
block.cacheless.php的内容如下:
2) 编写程序及模板
示例程序:testCacheLess.php
所用的模板:cache.tpl
已经缓存的:{$smarty.now}
{cacheless}
没有缓存的:{$smarty.now}
{/cacheless}
前一阵子网站新上了相册功能,可最近总发现有一些用户上传的图片文件链接失效,代码检查了很多次,测试也做的比较充分了,但还是会出现上传失败的问题,很是郁闷,今天终于找到了解决办法。
从备份源中找到了用户上传失败的JPG图片,进行上传测试,上传完成后页面提示:
Warning: imagecreatefromjpeg(): ‘/tmp/lalala’ is not a valid JPEG file in /path/upload.php on line 1
出现这个Warning是由于GD函数库检测发现是非标准JPEG图片格式导致。
解决方法,如果PHP版本 > 5.1.3,可以在php.ini中增加:
gd.jpeg_ignore_warning = 1
在 MIME 类型中有 image/jpeg 与 image/pjpeg 两种,GD库只认识前者的传统格式,后者是 progressive JPEG 的缩写,啥是pjpeg昵?
这个链接中有详细的解释:
http://www.faqs.org/faqs/jpeg-faq/part1/section-11.html
另外,php.net 中也有相关问题的详细讨论,有兴趣的朋友可以进去看看:
http://bugs.php.net/bug.php?id=29878
关闭整体目录的PHP解析权限
关闭路径为f:/www/site/easy2run/的PHP解析
对于某一个特定网址(虚拟主机VirtualHost)进行PHP解析限制
关闭IP为127.0.0.1的PHP解析
PHP本身有一个rmdir()函数可以用来删除目录,不过要求必须是空目录。
发送HTML邮件时的PHP代码,编写时参考了发送MIME邮件教程。
MIME信息头有:
MIME-Version:
这个头提供了所用MIME的版本号。这个值习惯上为1.0。
Content-Type:
它定义了数据的类型,以便数据能被适当的处理。有效的类型有:text,image,audio,video,applications,multipart和message。注意任何一个二进制附件都应该被叫做application/octet-stream。这个头的一些用例为:image/jpg, application/mswork,multipart/mixed,这只是很少的一部分。
Content-Transfer-Encoding:
这是所有头中最重要的一个,因为它说明了对数据所执行的编码方式,客户/MUA将用它对附件进行解码。对于每个附件,可以使用7bit,8bit,binary ,quoted-printable,base64和custom中的一种编码方式。7bit编码是用在US ASCII字符集上的常用的一种编码方式,也就是,保持它的原样。8bit和binary编码一般不用。对人类可读的标准文本,如果传输要经过对格式有影响的网关时对其进行保护,可以使用quoted printable。Base64是一种通用方法,在需要决定使用哪一种编码方法时,它提供了一个不用费脑子的选择;它通常用在二进制,非文本数据上。注意,任何非7bit数据必须用一种模式编码,这样它就可以通过Internet邮件网关!
Content-ID:
如果Content-Type是message/external-body或multipart/alternative时,这个头就有用了。它超出了本文的范围。
Content-Description:
这是一个可选的头。它是任何信息段内容的自由文本描述。描述必须使用us-ascii码。
Content-Disposition:
一个试验性的头,它用于给客户程序/MUA提供提示,来决定是否在行内显示附件或作为单独的附件。
MIME段头(出现在实际的MIME附件部分的头),除了MIME-Version头,可以拥有以上任何头字段。如果一个MIME头是信息块的一部分,它将作用于整个信息体。例如,如果Content-Transfer-Encoding显示在信息(指整个信息)头中,它应用于整个信息体,但是如果它显示在一个MIME段里,它”只能”用于那个段中。
|inline
很喜欢其中的两篇文章!
第一篇
《PHP中的面向对象和面向过程》
推荐等级:
还是学生时代时,我的C++老师就给我讲过这两个概念,但那会儿对这些东西根本不感兴趣,相对于学习书本上的知识我更喜欢,吼吼~~~
现在工作了,每天基本上就是和电脑、代码打交道,才懂得了什么叫书到用时方恨少……
第二篇 更喜欢了
《编程之道》
推荐等级:
摘录一些其中一些经典话语!
Design
Book Three
编程大师如是说:
“程序被测试时再去改变它的设计已经太晚了。”
Mainteance
Book Five
编程大师如是说:“既使一个程序只有三行长,也总有一天需要去维护它”
5.2
经理问程序员要多长时间才能完成他的项目。
“明天。”
“太不着边际了,老实说,要多久?”
程序员想了一想说。“还有一些新的功能要加进去,可能至少要两个星期吧。”
“即使两个星期恐怕也太夸张了,什么时候你只要告诉我说程序已经完成就好了。”
几年后,这个经理已经退休了,在他的离职午餐上,他发现这些程序员在他的终端前睡着了,他整夜都在编程。
5.4
一个好的农民不会不管他的庄稼。
一个好的老师不会不管哪怕是最差的学生。
一个好的父亲不会让他的任何一个孩子挨饿。
一个好的程序员不应拒绝维护他的程序。
Management
Book Six
编程大师如是说:
“增加程序员,减少经理–这样他们都可提高效率。”
6.1
为什么程序员没有效率,因为他们把时间都浪费在开会上了。
为什么程序员难于管理?因为管理者的干预太多了。
为什么程序员一个接一个地辞职,因为他们累坏了。
在糟糕的管理下工作,他们享受不到工作的乐趣。
6.3
一个经理将被解雇,但他手下的一个程序员写了一个流行的软件并且销路很旺。所以经理保住了他的工作。
经理为程序员分红,但程序员拒绝了,他说:“我写程序是因为写程序很有趣,所以我并没想过得资金”。
这位经理说,“这位程序员,不管他现在是什么位置,他都能理解一个雇员的职责所在。我们要把他提升为管理顾问”。
这位程序员又一次拒绝了,他说:“我是一个程序员所以我可以编程,如果我被提升了,除了浪费别人的时间什么也做不了,现在我可以走了吗?我还有一个程序没写完。”
6.4
经理对程序员说,“你们的工作时间是早上9 点到正午12 点。”
所有的程序员都很不满。
经理又说:“好吧,那随你们的便,只要能按时完成任务。”
程序员们这下满意了,他们中午上班,一直工作到凌晨。
7.4
编程大师从一个项目转到另一个项目而毫无顾虑,任何管理上的变动都不能影响他,他不会被解雇,即使项目被取消了。
为什么呢?
他了解了道。
Hardware and
Software
Book Eight
编程大师如是说:
风不动则草不动,没有软件,硬件只是一堆发热的电子器件
8.2
有一天编程大师碰见了一个正玩掌上游戏机的编程新手,他说:“给我看一下?”
新手把游戏机递给大师,“我看到上面说明了三种难度的玩法:容易,中等,高难”,大师说,“但是每个这样的游戏机都有另外一种玩法,此时游戏机既不是想着怎么赢你,也不是怎么被你赢。”
“那么请问大师”,初学者说,“这种玩法到底是怎样玩的呢?”
大师把游戏机摔到地下然后用脚踩碎它,突然初学者明白了。
Epilogue
Book Nine
编程大师如是说:
“现在是你出师的时候了。”