<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>臭皮匠 &#187; Web开发</title>
	<atom:link href="http://guogoul.com/category/web_dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://guogoul.com</link>
	<description></description>
	<lastBuildDate>Fri, 29 Oct 2010 00:24:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>担心部署分布式 Memcached 导致问题</title>
		<link>http://guogoul.com/2010/10/27/memcached-danger/</link>
		<comments>http://guogoul.com/2010/10/27/memcached-danger/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 12:09:08 +0000</pubDate>
		<dc:creator>shanfeng</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://guogoul.com/?p=264</guid>
		<description><![CDATA[Memcached在很多时候都是作为数据库前端cache使用的,大大降低数据库压力，使系统执行效率提升.
memcached虽然称为“分布式”缓存服务器，但服务器端并没有“分布式”功能,memcached的分布式，则是完全由客户端程序库实现的.
客户端实现分布是memcached分布式的一个特点.这个特点提供了开发者,最大的自由度,但也容易导致问题的的发生.
以Php::Memcache为例子:

$memcache = new Memcache;
$memcache-&#62;addServer(&#8217;192.168.123.4&#8242;, 11211);
$memcache-&#62;addServer(&#8217;192.168.123.6&#8242;, 11211);
$memcache-&#62;addServer(&#8217;192.168.123.7&#8242;, 11211);
$memcache-&#62;set(&#8221;justfortest2&#8243;,7);
情况1.   192.168.123.6 服务器不太稳定,当192.168.123.6请求失败的时候 .memcache可能会去请求192.168.123.7.  这样会导致数据可能cache在多个服务器中,数据的不一致问题就会产生.
情况2.  如果在写代码过程中addserver的顺序出错,或者增加,或者减少server.那么数据分布情况就会改变. 由于php::memcache中的分布式算法是基于服务器数量以及添加的顺序的.  当然频道增加server,或者 减少server是很少存,但是addserver的顺序就不太好约束了.  为了保证数据一致性,服务器的增加与减少最好是重启一下所有缓存.
建议:
1. 尽量把缓存放到单机上面,
2. 在压力大的情况下为了缓解网络连接压力,或者增加缓存空间大小.做了分布式缓存.这样就得做好机器的监控.检查机器的稳定情况,保证缓存服务器的正常工作
参考:  http://gihyo.jp/dev/feature/01/memcached/0004
]]></description>
		<wfw:commentRss>http://guogoul.com/2010/10/27/memcached-danger/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>APC cause problems</title>
		<link>http://guogoul.com/2010/01/05/apc_problems/</link>
		<comments>http://guogoul.com/2010/01/05/apc_problems/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 04:24:24 +0000</pubDate>
		<dc:creator>shanfeng</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[apc]]></category>

		<guid isPermaLink="false">http://guogoul.com/?p=235</guid>
		<description><![CDATA[看技术文档的时候很多作者的警告明知很重要，但经常被我们当作耳边风。不是我们有意把它们忘记，只是很多事情只是经历过之后才能铭记在心。
============================================
    APC will probably be 20-30% faster, but if you are writing to it frequently it can cause problems. The APC cache is best for things that change very rarely. And by very rarely I mean days, not hours or minutes.
    Because of the way APC does an anonymous [...]]]></description>
		<wfw:commentRss>http://guogoul.com/2010/01/05/apc_problems/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mysql: logs-slave-updates备忘</title>
		<link>http://guogoul.com/2009/07/13/logs-slave-updates/</link>
		<comments>http://guogoul.com/2009/07/13/logs-slave-updates/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 14:06:07 +0000</pubDate>
		<dc:creator>shanfeng</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[replication]]></category>
		<category><![CDATA[slave]]></category>

		<guid isPermaLink="false">http://guogoul.com/?p=184</guid>
		<description><![CDATA[
 --logs-slave-updates
通常情况，从服务器从主服务器接收到的更新不记入它的二进制日志。该选项告诉从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志。为了使该选项生效，还必须用--logs-bin选项启动从服务器以启用二进制日志。如果想要应用链式复制服务器，应使用--logs-slave-updates。例如，可能你想要这样设置：
A -> B -> C
也就是说，A为从服务器B的主服务器，B为从服务器C的主服务器。为了能工作，B必须既为主服务器又为从服务器。你必须用--logs-bin启动A和B以启用二进制日志，并且用--logs-slave-updates选项启动B。

以上是摘自mysql对于logs-slave-updates启动选项的描述。
当然logs-slave-upates也可以写入my.cnf :
//////////////////
log_slave_updates=1
//////////////////
当然在这种机制下可能有的同学会存在这么个问题：
如果a->b   b->a   这样的双master架构下，a,b都打开log_slave_updates选项会不会出现无限循环的状态。
mysql已经考滤到了这个问题，每条bin-log都会记录执行语句的源server_id.当slave读到语句的server_id等于本身的ID的时候，不会忽略执行，所以我们不用担心a,b会不会无限循环下去。

基于以上这种情况，mysql的replication集群将更加灵活，你如果需要可以做成各种各样的链式复制。比如 a->b   b->a     b中设置log_slave_updates后还可以b->c.   这样a,c中的数据也是一致的。    
测试部分my.cnf

 26 [mysqld2]
 27 pid-file        = /home/shanfeng/mysql/data2/mysqld2.pid
 28 socket          = /home/shanfeng/mysql/data2/mysqld2.sock
 [...]]]></description>
		<wfw:commentRss>http://guogoul.com/2009/07/13/logs-slave-updates/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>优化web服务器tcp半连接</title>
		<link>http://guogoul.com/2009/06/23/tcp_tw_reuse/</link>
		<comments>http://guogoul.com/2009/06/23/tcp_tw_reuse/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 15:46:43 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sysctrl]]></category>

		<guid isPermaLink="false">http://john.renren.in/?p=116</guid>
		<description><![CDATA[在繁忙的web服务器上,很常见的问题是大量tcp 半连接的存在占用系统的大量资源。有效的减少半连接对优化服务器响应有着重要的作用。
实践步骤：
1。执行 /bin/netstat -n &#124; awk &#8216;/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}&#8217;
2。vi /etc/sysctl.conf   添加如下两行:

1)net.ipv4.tcp_tw_reuse = 1     //允许将TIME-WAIT sockets重新用于新的TCP连接
2)net.ipv4.tcp_tw_recycle = 1  //开启TCP连接中TIME-WAIT sockets的快速回收

3。运行sysctl -p

4。执行 /bin/netstat -n &#124; awk &#8216;/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}&#8217;
如果对于TIME_WAIT较高的服务器来说应该很快就会看到效果
]]></description>
		<wfw:commentRss>http://guogoul.com/2009/06/23/tcp_tw_reuse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>nginx静态压缩(ngx_http_gzip_static_module)</title>
		<link>http://guogoul.com/2009/06/14/ngx_http_gzip_static_module/</link>
		<comments>http://guogoul.com/2009/06/14/ngx_http_gzip_static_module/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 12:29:27 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://john.renren.in/?p=123</guid>
		<description><![CDATA[在搭建squid网页加速的时候，对于大的css 或者js要进行压缩,然后再进行缓存,这样能够提高减小下载量提高页面响应速度。如果你用的是squid 3.0以前的版本并且用的是 ngnix server的话可能会碰到如下问题： 不用squid直接打开页面则客户端返回的是压缩的状态，如果启用squid加速会发现下载下来的页面不是压缩状态。这里面主要是没有启动ngnix 的静态缓存模块(ngx_http_gzip_static_module)导致。打开静态缓存问题就解决了
1.nginx编译选项
./configure --with-http_gzip_static_module
2.修改nginx.conf

gzip_static on;
gzip_http_version   1.1;
gzip_proxied        expired no-cache no-store private auth;
gzip_disable        "MSIE [1-6] \.";
gzip_vary           on;

参考：
1.http://wiki.nginx.org/NginxHttpGzipStaticModule
2.http://bbs.chinaunix.net/viewthread.php?tid=1329820
]]></description>
		<wfw:commentRss>http://guogoul.com/2009/06/14/ngx_http_gzip_static_module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>imagick PHP扩展的安装( ubuntu版)</title>
		<link>http://guogoul.com/2008/11/13/imagick-php/</link>
		<comments>http://guogoul.com/2008/11/13/imagick-php/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 10:42:01 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[imagick]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.guogoul.com/2008/11/13/imagick-php%e6%89%a9%e5%b1%95%e7%9a%84%e5%ae%89%e8%a3%85-ubuntu%e7%89%88/</guid>
		<description><![CDATA[本文原来写在csdn下面,因为近期用到了imagick.现迁移回来加深记忆.
===&#62;
在ubuntu下安装imagick的php扩展，还算比较的简单。用以下方法屡试不爽
1，编译PHP
    编译过程不在多说，可以看其它相关php编译的文章
2.安装ImageMagick(此步骤不知可不可以省略大家可以试一下，因为我的机器原本装有此工具。由于时间关系没有测试)
  sudo apt-get install imagemagick
3.安装imagemagick 的lib 供php调用
    sudo apt-get install libmagick++9-dev
4. 进入到编译好的php的bin目录
    cd php的bin目录

5.调用当前的pecl安装imagick
    pecl install imagick
6.修改php.ini.重启apache服务器
    在php.ini中添加: extension = imagick.so
7.测试

]]></description>
		<wfw:commentRss>http://guogoul.com/2008/11/13/imagick-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>关于web系统扩展的几点记录</title>
		<link>http://guogoul.com/2008/11/01/sys_web_extend/</link>
		<comments>http://guogoul.com/2008/11/01/sys_web_extend/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 06:27:02 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[技巧]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.guogoul.com/2008/11/01/sys_web_extend/</guid>
		<description><![CDATA[注:本文只谈系统的可扩展点，并不涉及相关技术的具体实现。
可扩展性的定义特性: 1.系统可以容纳使用率的增加，可以简单的理解为用户数的增加2.系统可以容纳数据集的增加。3.系统可维护。
误区:
1.可扩展不是指原始速度，性能和可扩性是不同的问题2.可扩展性与是否选择某种语言无关。3.可扩展性与特定的技术是无关的。
扩展的几个方向与要点:
一,扩展硬件平台硬件扩展大体上可以分为两类：1.垂直扩展:原理：很简单当机器性能不足时买一台更大，更强，更猛的机器代替。优点:设计容易实现，只需在本地机器上构建系统。一定体系稳定，只要换好的机器就行。不足: 成本不是线性增加的，可能是指数级的。尽管你很有钱，不担心钱的问题,不过由于单台机器的能力有限的，那么这种模型最终会受到限制。2.水平扩展:原理:不断的增加更多的硬件,不同垂直扩展的是增长不需要超级强劲的机器，只要很多常规机器。优点:能够混用不同服务器并且能够配备最便宜服务器的应用程序，将一直保持成本上的优势。不足:添加减少机器可能比较容易，但不会过于简单.你将要花费大量的管理成本。3.冗余:不管是垂直扩展还是水平扩展，机器都有可能发生故障，这样的话给机器做完全热备是必要的，当一个组件故障时，其他组件自动接手它的工作。
二,负载平衡
1. DNS负载平衡这个最简单的平衡方案，同时存在不少的问题.1)做法:在 DNS中给一个域添加多个IP,这样请求域名解析的时候分随机的返回不同的IP地址实现平衡的目的2）问题： 更新dns的速度比较缓慢，如果要移除一台坏的机器比较的困难了,另一个问题就是无法实现精确控制，也不能定制化平衡。总得来说DNS负载不是一个好的方案。
2.VIP:这个名词比较有意思，记得有一回去yahoo,技术人员与我谈代码发布时谈到了VIP的一个问题，我就有点乱了，VIP===》贵宾？。还冒出了MVP之类的概念.：VIP是虚拟IP的意思，一个VIP是由负载平衡器提供的一个IP地址，背后其实有多个实际的IP地址在处理请求.负载平衡器也被称作虚拟服务器。
3.硬件方式的负载平衡:1)别名:web交换机,内容交换机,内容路由器.2)特点:非常的昂贵。
4.软件方式的负载平衡:1)前一段时间才知道lvs(http://www.linuxvirtualserver.org)是一个给linux打上内核补丁的负载平衡操作系统，不过lvs是为了处理极为复杂的负载情况，对于一般平衡就没有必要。
2)第四层与第7层负载平衡注意这个第字。刚接触的时候不理解，直接看成四层，与7层。呵呵，7层比4层多三层当然7层要牛很多。第7层的确比第4层更灵活，但原因绝对不是7比4大.第4层与第7层指的是网络分层.传统的负载平衡是在第四层处理的,用户的请求来源与目标IP地址与端口在这一层被捕获，有了这些信息就可以把这个连接引导到后台正常的端口上。最简单的第四层负载采用的是循环算法(round robin)。就是把请请求循环发送到生产服务器上。除了循环之外，也可以做随机算法。在两种方法中都可以加上权重，对权重比较高的生产服务器，只要有队列中重复出现几次那么被分配到流量的比重就越高。第7层负载比第4层负载出现的晚，它比第4层更加易活。因为第7层负载平衡器检测HTTP请求，这能够查看请求和请求的标头，并将这些信息纳入平衡策略的考虑中。这样就可以做基于URL平衡，可以确保对特定资源的所有请求都被调度到同一台机器上，这样的方便在同一台机器上做缓存，提高缓存命中率。这就是比第四层优秀的原因之一.听说apache的mod_rewrite模块加上一些脚本就可以做第7层的负载，具体我没有实施过，不过试过用ngnix做过第4层负载平衡，十分简单:)
三,扩展Mysql1.可以从主从(master-slave)复制方面考滤提高并行读写性能,当然选表的存储引引擎也很关键，MyISAM能非常快地进行读写操作，但是无法同时快速度的读写操作,而且也不支持事务操作，现在好像比较流行InnoDB。不过innoDB不提供fulltext索引,innoDB的占用的硬盘空间大约会是Myisam的3倍左右。
2.数据库分区也是数据库扩展的重要因素。不合理的数据库分区将会影响以后数据库的扩展.
四,缓存扩展在缓存的选择上我觉得分存式的缓存memcached(http://memcachedb.org/)是一个无可挑剔解决方案，可以解决大多数的问题
五,存储系统的扩展:&#160;目前只用过NFS,NFS在实际生产过程中还是存在很多不足。请各位有识之士,留下宝贵意见.!



]]></description>
		<wfw:commentRss>http://guogoul.com/2008/11/01/sys_web_extend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>数据的安全性与一致性中的几个要点</title>
		<link>http://guogoul.com/2008/10/21/web_data/</link>
		<comments>http://guogoul.com/2008/10/21/web_data/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 15:27:48 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[技巧]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.guogoul.com/2008/10/21/web_data/</guid>
		<description><![CDATA[数据完整性的原则：应用程序内部的数据是有用的，换句话说就是引入的数据在边界处被过滤，以过滤后的结果存储，在输出数据的时不再需要做任何处理。在过滤数据时要分清好的，有效的，无效的数据的处理。
基于以上原则在做web程序设计是要注意以下几点:
1.过滤不支持的编码格式&#160;&#160; 如果你的整个体系里面用的是utf-8编码，那么你就在数据输入的时候过滤或者转化掉其他编码的字符.&#160;&#160; 相关php方法: utf8_encode($input)， iconv（&#8221;utf-8&#8243;,&#8221;utf-8&#8243;,$str）;注后者要装iconv扩展
2.过滤控制字符&#160; 很多时候输入中含有控制字符，这此控制字符虽然是有效的数据，但不是良好的数据。这时候最好把控制字符给过滤掉，可以简单的把小于0&#215;20的 ascii字符过滤之。&#160;&#160; 相关方法:&#160;&#160;&#160; 1. preg_replace(&#8217;!\p{C}!u&#8217;,&#8221;,$data)//清除所有控制字符&#160;&#160;&#160; 2.preg_replace(&#8217;!\r\n?&#8217;,'\n&#8217;,$input) //统一所有平台的回车，还省空间
3.过滤html&#160; html的过滤比较头痛，可以用strip_tags()进行过滤，所有的html标签，但是想有选择的过滤html就比较惨了。这时个可以要你写比较复杂的正则表达式。&#160; 注：把所有的外部来源的数据当成是感染过的数据是重要的，只有你自己消除感染的数据才是安全的。&#160; 有时间 可以看一下lib_filter(http://code.iamcal.com/php/lib_filter) 
4.防止sql注入攻击:&#160; 原则:不要赋于用户超出他们所需的权限。&#160; web应用程序永远也不应该需要create,drop,alter权限，如果需要，那么很可能是在基本程序设计上有问题。&#160; 对于只读的数据库，没有必要发放insert ,updata,delete 权限。&#160; 字符串型过滤相关php方法:&#160; AddSlashes() ，mysql_escape_string()&#160; 整形过滤 : interval(input)&#160; 注意如果用到like或者rlike操作时还要过滤相关字符串中的“%”与“_”两个符号。&#160; &#160; 数据净化原则:净化代码在物理位置上应该和使用数据的代码相邻，避免过早净化，就可以快速查看代码，确认是否正确进行了转义了数据。
&#160; 
]]></description>
		<wfw:commentRss>http://guogoul.com/2008/10/21/web_data/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>简单Basic验证</title>
		<link>http://guogoul.com/2008/08/18/basic-authorized/</link>
		<comments>http://guogoul.com/2008/08/18/basic-authorized/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 00:25:20 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[basic]]></category>

		<guid isPermaLink="false">http://www.guogoul.com/2008/08/18/%e7%ae%80%e5%8d%95basic%e9%aa%8c%e8%af%81/</guid>
		<description><![CDATA[if (!isset($_SERVER['PHP_AUTH_USER']) &#124;&#124; !isset($_SERVER['PHP_AUTH_PW']) &#124;&#124;
           $_SERVER['PHP_AUTH_USER'] != &#8216;ADMIN_USERNAME&#8217; &#124;&#124;$_SERVER['PHP_AUTH_PW'] != &#8216;ADMIN_PASSWORD&#8217;) {
			Header(&#8221;WWW-Authenticate: Basic realm=\&#8221;Login\&#8221;");
			Header(&#8221;HTTP/1.0 401 Unauthorized&#8221;);
			echo &#60;&#60;&#60;eob
Rejected!
				Wrong Username or Password!
EOB;
			exit;
}
]]></description>
		<wfw:commentRss>http://guogoul.com/2008/08/18/basic-authorized/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>smarty局部页面缓存</title>
		<link>http://guogoul.com/2008/08/03/smarty_1/</link>
		<comments>http://guogoul.com/2008/08/03/smarty_1/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 13:59:34 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.guogoul.com/2008/08/03/smarty_1/</guid>
		<description><![CDATA[web2.0网站速度优化的最好方案是减少数据库访问.
缓存是减少数据库访问的最佳方案.
有两种最基本缓存的方式
1.页面缓存
1.1 如果你用的是smarty做为ui模板的话.页面缓存十分的方便
require(&#8217;Smarty.class.php&#8217;);
$smarty = new Smarty;
$smarty-&#62;caching = 1;
if(!$smarty-&#62;is_cached(&#8217;index.tpl&#8217;)) {
    // No cache available, do variable assignments here.
    $contents = get_database_contents();
    $smarty-&#62;assign($contents);
}
$smarty-&#62;display(&#8217;index.tpl&#8217;);
以上为最基本的缓存方案,对于同一个tpl,根据不同的参数可以缓存多个.
$smarty-&#62;is_cached(&#8217;index.tpl&#8217;,params); //根据参数判断
$smarty-&#62;display(&#8217;index.tpl&#8217; ,params);//根据参数显示
以上实现了整个页面的缓存
很多时候为了优化用户的体验,需要对局部即时显示.最方便的方案是对即时显示的部分做一下块标记.每次刷新时重新显示些块就可
index.php:
caching = 1;
function smarty_block_dynamic($param, $content, &#38;$smarty) {
    return $content;
}
$smarty-&#62;register_block(&#8217;dynamic&#8217;, &#8217;smarty_block_dynamic&#8217;, false);
$smarty-&#62;display(&#8217;index.tpl&#8217;);
?&#62;
index.tpl is:
Page created: {&#8217;0&#8242;&#124;date_format:&#8217;%D %H:%M:%S&#8217;}
{dynamic}
Now is: {&#8217;0&#8242;&#124;date_format:&#8217;%D %H:%M:%S&#8217;}
&#8230; do other stuff &#8230;
{/dynamic}
官方介绍
1.2: [...]]]></description>
		<wfw:commentRss>http://guogoul.com/2008/08/03/smarty_1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

