<?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>Michael`s blog &#187; PHP / Zend</title>
	<atom:link href="http://www.toplee.com/blog/category/%e6%8a%80%e6%9c%af/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.toplee.com/blog</link>
	<description>活到老，学到老 ...   @ IT，业界，互联网</description>
	<lastBuildDate>Mon, 19 Jul 2010 05:38:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>BSD下Pecl报告undefined function preg_match()错误处理</title>
		<link>http://www.toplee.com/blog/794.html</link>
		<comments>http://www.toplee.com/blog/794.html#comments</comments>
		<pubDate>Sat, 14 Mar 2009 03:41:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[php pecl]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/?p=794</guid>
		<description><![CDATA[默认情况下，BSD的ports安装的PECL命令，会出现错误： # pecl Fatal error: Call to undefined function preg_match() in &#8230; 问题的原因是出在 /usr/local/bin/pecl 的最后一行： exec $PHP -C -n -q $INCARG -d output_buffering=1 -d safe_mode=0 &#8230; 这行代码里面的 -n 参数表示不加载PHP的配置文件 php.ini ，因此 pcre.so 就不会被加载而导致错误， ，你只要改一下这行代码，去掉 -n 参数即可搞定。]]></description>
			<content:encoded><![CDATA[<p>默认情况下，BSD的ports安装的PECL命令，会出现错误：<br />
# pecl<br />
Fatal error: Call to undefined function preg_match() in &#8230;</p>
<p>问题的原因是出在 /usr/local/bin/pecl  的最后一行：</p>
<p>exec $PHP -C -n -q $INCARG -d output_buffering=1 -d safe_mode=0 &#8230;</p>
<p>这行代码里面的 -n 参数表示不加载PHP的配置文件 php.ini ，因此 pcre.so 就不会被加载而导致错误，<br />
，你只要改一下这行代码，去掉 -n 参数即可搞定。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/794.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>三道PHP面试题</title>
		<link>http://www.toplee.com/blog/610.html</link>
		<comments>http://www.toplee.com/blog/610.html#comments</comments>
		<pubDate>Tue, 26 Aug 2008 17:15:15 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/?p=610</guid>
		<description><![CDATA[有三道PHP的面试题，除了第三题需要一些经验和对HTTP协议理解外，前面两题其实很简单，但是很少遇到有人答正确的，大部分人我想都不是技术问题，而是思考是否严谨的问题。 1. 下面语句输出什么？为什么？ if ($a=$b)&#160; printf(“a==b”); else&#160; printf(“a!=b”)；2. $array[‘anykey’]和$array[anykey]有什么区别？3. 写出使用telnet命令通过GET的方式访问http://www.toplee.com/index.php 得到页面返回的方法（不是用PHP实现，用dos或者unix命令行实现）。]]></description>
			<content:encoded><![CDATA[<p>有三道PHP的面试题，除了第三题需要一些经验和对HTTP协议理解外，前面两题其实很简单，但是很少遇到有人答正确的，大部分人我想都不是技术问题，而是思考是否严谨的问题。</p>
<div class="hl-surround"><div class="hl-main">1. 下面语句输出什么？为什么？ <br />if ($a=$b)&nbsp; printf(“a==b”); <br />else&nbsp; printf(“a!=b”)；<br />2. $array[‘anykey’]和$array[anykey]有什么区别？<br />3. 写出使用telnet命令通过GET的方式访问http://www.toplee.com/index.php 得到页面返回的方法（不是用PHP实现，用dos或者unix命令行实现）。</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/610.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>验证码图片升级</title>
		<link>http://www.toplee.com/blog/575.html</link>
		<comments>http://www.toplee.com/blog/575.html#comments</comments>
		<pubDate>Sun, 15 Jun 2008 06:11:14 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[心情 / 生活]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/?p=575</guid>
		<description><![CDATA[想当初6.cn用一种开放的心态看待互联网，希望大家在一种友好、整洁的环境下共同发展，也希望让用户用起来更简单方便，一直不在任何地方提供“常见”的验证码，从去年开始，频繁开始受到各种恶意的攻击和注册，于是迫不得已加入第一个版本的验证码图片，那是一个简单、易辨认的图片 昨天6.cn的验证码被攻破，于是迫不得以，又对验证码进行了升级，这次仍然首先考虑的是用户体验，让用户更容易辨认，想想google、qq等网站的验证码，真的是大多数时间我都是靠猜的，别说机器辨认了，人都很难，这次6.cn的验证码图片加入了更多干扰元素，背景颜色和干扰的曲线都是随机产生的，但总的来说还是比较好辨认 （实在看不清，可以刷新页面更新） 互联网就是这样，没有什么干净的东西可以独善其身。]]></description>
			<content:encoded><![CDATA[<p>想当初6.cn用一种开放的心态看待互联网，希望大家在一种友好、整洁的环境下共同发展，也希望让用户用起来更简单方便，一直不在任何地方提供“常见”的验证码，从去年开始，频繁开始受到各种恶意的攻击和注册，于是迫不得已加入第一个版本的验证码图片，那是一个简单、易辨认的图片 <img src="http://www.toplee.com/blog/wp-content/uploads/2008/06/sessimg_v1.jpg" alt="PHP验证码图片" title="sessimg_v1" width="60" height="20" class="alignnone size-full wp-image-576" /></p>
<p>昨天6.cn的验证码被攻破，于是迫不得以，又对验证码进行了升级，这次仍然首先考虑的是用户体验，让用户更容易辨认，想想google、qq等网站的验证码，真的是大多数时间我都是靠猜的，别说机器辨认了，人都很难，这次6.cn的验证码图片加入了更多干扰元素，背景颜色和干扰的曲线都是随机产生的，但总的来说还是比较好辨认 <img src="http://6.cn/sessimg.php?s=wreg" alt="PHP验证码第二版" /> （实在看不清，可以刷新页面更新）</p>
<p>互联网就是这样，没有什么干净的东西可以独善其身。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/575.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ZF 1.5x的一点变化</title>
		<link>http://www.toplee.com/blog/542.html</link>
		<comments>http://www.toplee.com/blog/542.html#comments</comments>
		<pubDate>Sat, 26 Apr 2008 08:23:29 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/542.html</guid>
		<description><![CDATA[今天把Zend Framework升级到了1.5.1最新版，发现有些连接访问出错，查官方文档发现是因为Action里面的“驼峰命名”方式的改变导致。 原来的情况是这样：假如我们有个 aaaBbbController::cccDddAction这么一个东西，访问的url可以是 /aaabbb/cccddd/ 也可以是 /aaaBbb/cccDdd/ 现在的情况是这样：要么把方法写成 aaabbbController::cccdddAction 统一的小写，要么url里面改成这样 /aaa.bbb/ccc.ddd/ 或者 /aaa-bbb/ccc-ddd/ 我还没有来得及搞明白这样改进的好处是什么。 官方文档： 7.13.1. Migrating from 1.0.x to 1.5.0 or newer CamelCasedNamingConventions]]></description>
			<content:encoded><![CDATA[<p>今天把Zend Framework升级到了1.5.1最新版，发现有些连接访问出错，查官方文档发现是因为Action里面的“驼峰命名”方式的改变导致。</p>
<p>原来的情况是这样：假如我们有个 aaaBbbController::cccDddAction这么一个东西，访问的url可以是 /aaabbb/cccddd/ 也可以是 /aaaBbb/cccDdd/<br />
现在的情况是这样：要么把方法写成 aaabbbController::cccdddAction 统一的小写，要么url里面改成这样 /aaa.bbb/ccc.ddd/ 或者 /aaa-bbb/ccc-ddd/ </p>
<p>我还没有来得及搞明白这样改进的好处是什么。</p>
<p>官方文档：<br />
<a href="http://framework.zend.com/manual/en/zend.controller.migration.html" target="_blank">7.13.1. Migrating from 1.0.x to 1.5.0 or newer</a><br />
<a href="http://framework.zend.com/manual/en/zend.controller.basics.html" target="_blank">CamelCasedNamingConventions</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/542.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PHP6测试版发布</title>
		<link>http://www.toplee.com/blog/540.html</link>
		<comments>http://www.toplee.com/blog/540.html#comments</comments>
		<pubDate>Thu, 17 Apr 2008 16:28:47 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/540.html</guid>
		<description><![CDATA[[转载]去年在巴黎举行的PHP开发者大会中，PHP6开发的消息开始流传开来， 于PHP大会讨论的PHP6，将有很大幅度的变化，但这只是草案阶段， 并不代表所有会议的机率都会随着PHP6的发布而包含记录中所有的变更 也就是说，在发布PHP6之前，还是会有异动的情形，但是可以确定的是 下面所列的数项变化，将会随着PHP6一同面世（当然不是百分百乐，） 赶快来看看这些新特性吧 1.支持Unicode 支持Unicode是有其必然，虽然Unicode占用较多的空间，但Unicode带来 的便利性，远超过占用空间的缺点，尤其在国际化的今天，硬件设备越来 越强大，网速也大幅度的提升，这么一点小小的缺点是可以忽略的。另外 一点，PHP也可以在.ini文件中设定是否开启支持Unicode，决定权在你自己， 这是一个不错的点子，关掉Unicode的支持，PHP的性能并不会有大幅度的 提升，主要的影响在于需要引用字符串的函数。 2.Register Globals 将被移除 这是一个重要的决定，说多新进的PHP开发者会觉得Register Globals满 方便的，但是却忽略了Register Globals会带来程序上安全性的隐患，大 多数的主机上此项功能是关闭的，印象中从PHP4.3.x版开始时，此项默认 设置值即是关闭状态，PHP6正式移除Register Globals也代表着如果程序 是由PHP3时代的产物，将完全无法使用，除了改写一途外，别无他法。相 信现在的PHP世界里，仍使用PHP3时代所产生的程序应该是少之又少。 3.Magic Quotes 将消失 Magic Quotes主要是自动转义需要转义的字符，此项功能移除叶符合大多 数PHP开发者的心声。 4.Safe Mode 取消 老实说，这个模式不知道哪里不好，取消就取消吧，反正也用不到 5.’var’ 别名为 ‘public’ 在类中的var声明变成public的别名，相信是为了兼容PHP5而作的决定， PHP6现在也可以称作为OO语言了。 6.通过引用返回将出错 现在透过引用返回编译器将会报错 例如$a =&#038; new b()、function &#038;c()， OO语言默认就是引用，所以不需要再使用&#038;了。 7.zend.ze1 compatbility mode 将被移去 Zend.ze1相容模式将被移去，PHP5是为兼容旧有PHP4，所以在.ini中可选择是否 开启相容模式，原因在于PHP5使用的是第二代解析引擎，但是相容模式并不是百 分之百能解析PHP4语法，所以旧时代的产物，移除。 [...]]]></description>
			<content:encoded><![CDATA[<p>[转载]去年在巴黎举行的PHP开发者大会中，PHP6开发的消息开始流传开来，<br />
于PHP大会讨论的PHP6，将有很大幅度的变化，但这只是草案阶段，<br />
并不代表所有会议的机率都会随着PHP6的发布而包含记录中所有的变更<br />
也就是说，在发布PHP6之前，还是会有异动的情形，但是可以确定的是<br />
下面所列的数项变化，将会随着PHP6一同面世（当然不是百分百乐，）<br />
赶快来看看这些新特性吧<br />
<span id="more-540"></span><br />
1.支持Unicode<br />
支持Unicode是有其必然，虽然Unicode占用较多的空间，但Unicode带来<br />
的便利性，远超过占用空间的缺点，尤其在国际化的今天，硬件设备越来<br />
越强大，网速也大幅度的提升，这么一点小小的缺点是可以忽略的。另外<br />
一点，PHP也可以在.ini文件中设定是否开启支持Unicode，决定权在你自己，<br />
这是一个不错的点子，关掉Unicode的支持，PHP的性能并不会有大幅度的<br />
提升，主要的影响在于需要引用字符串的函数。</p>
<p>2.Register Globals 将被移除<br />
这是一个重要的决定，说多新进的PHP开发者会觉得Register Globals满<br />
方便的，但是却忽略了Register Globals会带来程序上安全性的隐患，大<br />
多数的主机上此项功能是关闭的，印象中从PHP4.3.x版开始时，此项默认<br />
设置值即是关闭状态，PHP6正式移除Register Globals也代表着如果程序<br />
是由PHP3时代的产物，将完全无法使用，除了改写一途外，别无他法。相<br />
信现在的PHP世界里，仍使用PHP3时代所产生的程序应该是少之又少。</p>
<p>3.Magic Quotes 将消失<br />
Magic Quotes主要是自动转义需要转义的字符，此项功能移除叶符合大多<br />
数PHP开发者的心声。</p>
<p>4.Safe Mode 取消<br />
老实说，这个模式不知道哪里不好，取消就取消吧，反正也用不到</p>
<p>5.’var’ 别名为 ‘public’<br />
在类中的var声明变成public的别名，相信是为了兼容PHP5而作的决定，<br />
PHP6现在也可以称作为OO语言了。</p>
<p>6.通过引用返回将出错<br />
现在透过引用返回编译器将会报错 例如$a =&#038; new b()、function &#038;c()，<br />
OO语言默认就是引用，所以不需要再使用&#038;了。</p>
<p>7.zend.ze1 compatbility mode 将被移去<br />
Zend.ze1相容模式将被移去，PHP5是为兼容旧有PHP4，所以在.ini中可选择是否<br />
开启相容模式，原因在于PHP5使用的是第二代解析引擎，但是相容模式并不是百<br />
分之百能解析PHP4语法，所以旧时代的产物，移除。 </p>
<p>8.Freetype 1 and GD 1 support 将不见<br />
这两个是很久的Libs，所以不再支持，GD1早已被现在的GD2取代了。</p>
<p>9.dl() 被移到 SAPI 中<br />
dl()主要是让设计师加载extension Libs，现在被移到 SAPI 中</p>
<p>10.Register Long Array 去除<br />
从PHP5起默认是关闭，再PHP6中正式移除。</p>
<p>11.一些Extension的变更<br />
例如 XMLReader 和 XMLWriter 将不再是以Extension的方式出现，他们将被移入<br />
到PHP的核心之中，并且默认是开启，ereg extension将被放入PECL，代表着它将<br />
被移出PHP核心，这也是为了让路给新的正则表达式extension，<br />
此外，Fileinfo extension 也将被导入PHP的核心之中。</p>
<p>12.APC将被导入核心<br />
这是一个提高PHP性能的功能，现在它将被放入PHP核心中，并且可以选择是否启用APC</p>
<p>13.告别ASP风格的起始标签<br />
原来是为了取悦ASP开发者转向使用PHP，现今已经不再需要这种做法了，</p>
<p>最后，别期望PHP6的性能可以全面超过PHP5，有可能的是PHP6的执行效率会比<br />
PHP5还要来的慢的，但是可以预期的是，PHP开发小组将会努力的完善PHP5，超<br />
越PHP5。<br />
那么，对PHP6有兴趣的朋友现在可以到PHP官方网站上下载，试试这些功能是否真的已经<br />
在PHP6中体现出来了，下载地址http://snaps.php.net/ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/540.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>基于libmemcached开发php的扩展模块</title>
		<link>http://www.toplee.com/blog/533.html</link>
		<comments>http://www.toplee.com/blog/533.html#comments</comments>
		<pubDate>Wed, 26 Mar 2008 03:02:07 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[libmemcached]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[pecl]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/533.html</guid>
		<description><![CDATA[PHP有个pecl memcached扩展，这是大家默认的选择，对绝大多数应用来说，其实已经够用了，出于学习研究的目的，在朋友小叶的要求下，尝试了利用libmemcached模块来开发一个PHP的扩展。 对于memcached，不在这里多说了，更多的文档可以参照我另外的blog文章或者去memcached官方，在官方文档中，我们可以找到各种语言的APIs，包括已有的pecl memcached API，另外还有Ruby、Perl、C#等API，这次需要用的是C的API，据小叶说，有另外的测试证明基于C API中libmemcached写的Ruby扩展性能比基于libevant写的PHP Pecl Memcached效率高出20倍，这个真实性不去考证了，只准备测试一下用libmemcached来写另外一个PHP的扩展。 这里准备按照最常规的流程来完成这个PHP扩展的开发。目前完整的模块还未写完，只完成了一个测试接口和connect()接口，请有兴趣的朋友随时关注我的更新。]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.php.net" target="_blank">PHP</a>有个<a href="http://pecl.php.net/package/memcache" target="_blank">pecl memcached</a>扩展，这是大家默认的选择，对绝大多数应用来说，其实已经够用了，出于学习研究的目的，在朋友小叶的要求下，尝试了利用<a href="http://tangent.org/552/libmemcached.html" target="_blank">libmemcached</a>模块来开发一个PHP的扩展。</p>
<p>对于<a href="http://www.danga.com/memcached" target="_blank">memcached</a>，不在这里多说了，更多的文档可以参照我另外的blog文章或者去<a href="http://www.danga.com/memcached" target="_blank">memcached</a>官方，在官方文档中，我们可以找到各种语言的<a href="http://danga.com/memcached/apis.bml" target="_blank">APIs</a>，包括已有的pecl memcached API，另外还有Ruby、Perl、C#等API，这次需要用的是C的API，据小叶说，有另外的测试证明基于C API中libmemcached写的Ruby扩展性能比基于libevant写的PHP Pecl Memcached效率高出20倍，这个真实性不去考证了，只准备测试一下用libmemcached来写另外一个PHP的扩展。</p>
<p>这里准备按照最常规的流程来完成这个PHP扩展的开发。目前完整的模块还未写完，只完成了一个测试接口和connect()接口，请有兴趣的朋友随时关注我的更新。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/533.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>变态有趣的Zend Framework用法</title>
		<link>http://www.toplee.com/blog/512.html</link>
		<comments>http://www.toplee.com/blog/512.html#comments</comments>
		<pubDate>Fri, 28 Dec 2007 16:25:13 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[6.cn]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/512.html</guid>
		<description><![CDATA[　　通常，使用ZF的人都对Controller很感兴趣，尤其是Rewrite和Router功能很吸引人，不过因为一些特殊原因，比如大项目中涉及大量的rewirte条件，导致全部交给php来处理有些难以接受，这个时候就可能会放弃掉ZF的Index.php文件， 而采用传统的PHP文件结构，这时的ZF如何使用呢？ 　　前一段时间完成的6.cn 的专辑改造 (http://6.cn/zj)，完全基于了ZF来实现，但却没有使用ZF的index.php文件，在目录结构上，完全参照了ZF标准的Models、Views、Controllers模式开发，只不过调用的地方直接调用Controller里面的Action，这相当于把Controller当作了一个普通的类来使用，这个方法经过使用，发现虽然有些变态，其实还是挺有趣和挺方便的。有兴趣的朋友可以尝试一下，感觉似乎更灵活，有时index.php会带来很多思路上的束缚]]></description>
			<content:encoded><![CDATA[<p>　　通常，使用ZF的人都对Controller很感兴趣，尤其是Rewrite和Router功能很吸引人，不过因为一些特殊原因，比如大项目中涉及大量的rewirte条件，导致全部交给php来处理有些难以接受，这个时候就可能会放弃掉ZF的Index.php文件， 而采用传统的PHP文件结构，这时的ZF如何使用呢？</p>
<p>　　前一段时间完成的6.cn 的专辑改造 (http://6.cn/zj)，完全基于了ZF来实现，但却没有使用ZF的index.php文件，在目录结构上，完全参照了ZF标准的Models、Views、Controllers模式开发，只不过调用的地方直接调用Controller里面的Action，这相当于把Controller当作了一个普通的类来使用，这个方法经过使用，发现虽然有些变态，其实还是挺有趣和挺方便的。有兴趣的朋友可以尝试一下，感觉似乎更灵活，有时index.php会带来很多思路上的束缚 <img src='http://www.toplee.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/512.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>PHP 大文件上传进度条实现</title>
		<link>http://www.toplee.com/blog/463.html</link>
		<comments>http://www.toplee.com/blog/463.html#comments</comments>
		<pubDate>Mon, 27 Aug 2007 08:37:50 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[uploadprogress]]></category>
		<category><![CDATA[上传进度]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/463.html</guid>
		<description><![CDATA[　　目前我知道的方法有两种，一种是使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现（http://pecl.php.net/package/apc），另外一种方法是使用PECL扩展模块uploadprogress实现（http://pecl.php.net/package/uploadprogress） 我这里举两个分别实现的例子供参考，更灵活的应用根据自己需要来修改。 　　APC实现方法： 安装APC，参照官方文档安装，可以使用PECL模块安装方法快速简捷，这里不说明 配置php.ini，设置参数 apc.rfc1867=1 ，使APC支持上传进度条功能，在APC源码说明文档里面有说明 代码范例： if ($_SERVER['REQUEST_METHOD'] == 'POST') {&#160; //上传请求&#160;&#160; &#160;$status = apc_fetch('upload_' . $_POST['APC_UPLOAD_PROGRESS']);&#160;&#160; &#160;$status['done'] = 1;&#160;&#160; &#160;echo json_encode($status);&#160; //输出给用户端页面里的ajax调用，相关文档请自己寻找&#160;&#160; &#160;exit;} elseif (isset($_GET['progress_key'])) {&#160; &#160;//读取上传进度&#160;&#160; &#160;$status = apc_fetch('upload_'.$_GET['progress_key']);&#160;&#160; &#160;echo json_encode($status);&#160;&#160; &#160;exit;} else {&#160;&#160; &#160;//其他代码，比如上传表单等} 　　uploadprogress 模块实现方法： 使用PECL模块安装方法安装该模块 php.ini里面设置 uploadprogress.file.filename_template = &#8220;/tmp/upd_%s.txt&#8221; 代码范例： if($_SERVER['REQUEST_METHOD']=='POST') {&#160;&#160; &#160;if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>　　目前我知道的方法有两种，一种是使用PHP的创始人 Rasmus Lerdorf  写的APC扩展模块来实现（http://pecl.php.net/package/apc），另外一种方法是使用PECL扩展模块uploadprogress实现（http://pecl.php.net/package/uploadprogress） 我这里举两个分别实现的例子供参考，更灵活的应用根据自己需要来修改。</p>
<p>　　APC实现方法：</p>
<ul>
<li>安装APC，参照官方文档安装，可以使用PECL模块安装方法快速简捷，这里不说明</li>
<li>配置php.ini，设置参数 apc.rfc1867=1 ，使APC支持上传进度条功能，在APC源码说明文档里面有说明</li>
<li> 代码范例：
<div class="hl-surround"><div class="hl-main"><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: #00008b;">$_SERVER</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">REQUEST_METHOD</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> == </span><span style="color: #8b0000;">'</span><span style="color: Red;">POST</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp; </span><span style="color: #ffa500;">//上传请求</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$status</span><span style="color: Gray;"> = </span><span style="color: Blue;">apc_fetch</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">upload_</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">APC_UPLOAD_PROGRESS</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$status</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">done</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> = </span><span style="color: Maroon;">1</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">echo</span><span style="color: Gray;"> </span><span style="color: Blue;">json_encode</span><span style="color: Olive;">(</span><span style="color: #00008b;">$status</span><span style="color: Olive;">)</span><span style="color: Gray;">;&nbsp; </span><span style="color: #ffa500;">//输出给用户端页面里的ajax调用，相关文档请自己寻找</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">exit</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">elseif</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Green;">isset</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">progress_key</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;">&nbsp; &nbsp;</span><span style="color: #ffa500;">//读取上传进度</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$status</span><span style="color: Gray;"> = </span><span style="color: Blue;">apc_fetch</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">upload_</span><span style="color: #8b0000;">'</span><span style="color: Gray;">.</span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">progress_key</span><span style="color: #8b0000;">'</span><span style="color: Olive;">])</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">echo</span><span style="color: Gray;"> </span><span style="color: Blue;">json_encode</span><span style="color: Olive;">(</span><span style="color: #00008b;">$status</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">exit</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">//其他代码，比如上传表单等</span><span style="color: Gray;"><br /></span><span style="color: Olive;">}</span><span style="color: Gray;"></span></div></div>
</li>
</ul>
<p>　　uploadprogress 模块实现方法：</p>
<ul>
<li>使用PECL模块安装方法安装该模块</li>
<li>php.ini里面设置 uploadprogress.file.filename_template = &#8220;/tmp/upd_%s.txt&#8221;</li>
<li>代码范例：
<div class="hl-surround"><div class="hl-main"><span style="color: Green;">if</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_SERVER</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">REQUEST_METHOD</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">==</span><span style="color: #8b0000;">'</span><span style="color: Red;">POST</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">is_uploaded_file</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">upfile</span><span style="color: #8b0000;">'</span><span style="color: Olive;">][</span><span style="color: #8b0000;">'</span><span style="color: Red;">tmp_name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$upload_dir</span><span style="color: Gray;"> = </span><span style="color: #8b0000;">'</span><span style="color: Red;">your_path/</span><span style="color: #8b0000;">'</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$ext</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; = </span><span style="color: Blue;">strrchr</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">video</span><span style="color: #8b0000;">'</span><span style="color: Olive;">][</span><span style="color: #8b0000;">'</span><span style="color: Red;">name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">.</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$sessid</span><span style="color: Gray;">&nbsp; &nbsp; &nbsp;= </span><span style="color: #00008b;">$_POST</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">UPLOAD_IDENTIFIER</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;"> ;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$tmpfile</span><span style="color: Gray;">&nbsp; &nbsp; = </span><span style="color: #00008b;">$upload_dir</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$sessid</span><span style="color: Gray;">;&nbsp; <br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b;">$sessfile</span><span style="color: Gray;">&nbsp; &nbsp;= </span><span style="color: #00008b;">$upload_dir</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$sessid</span><span style="color: Gray;"> .</span><span style="color: #00008b;">$ext</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">move_uploaded_file</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_FILES</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">upfile</span><span style="color: #8b0000;">'</span><span style="color: Olive;">][</span><span style="color: #8b0000;">'</span><span style="color: Red;">tmp_name</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">,</span><span style="color: #00008b;">$tmpfile</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #ffa500;">//上传成功</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #ffa500;">//上传失败</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #ffa500;">//上传错误</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">elseif</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Gray;">!</span><span style="color: Green;">empty</span><span style="color: Olive;">(</span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">sessid</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Expires: Mon, 26 Jul 1997 05:00:00 GMT</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Last-Modified: </span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;"> . </span><span style="color: Blue;">gmdate</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">D, d M Y H:i:s</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;"> . </span><span style="color: #8b0000;">&quot;</span><span style="color: Red;"> GMT</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Cache-Control: no-store, no-cache, must-revalidate</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Cache-Control: post-check=0, pre-check=0</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: Green;">false</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Pragma: no-cache</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">header</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">Content-Type:text/html;charset=UTF-8</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$unique_id</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$_GET</span><span style="color: Olive;">[</span><span style="color: #8b0000;">'</span><span style="color: Red;">sessid</span><span style="color: #8b0000;">'</span><span style="color: Olive;">]</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$uploadvalues</span><span style="color: Gray;"> = </span><span style="color: Blue;">uploadprogress_get_info</span><span style="color: Olive;">(</span><span style="color: #00008b;">$unique_id</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">if</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: Blue;">is_array</span><span style="color: Olive;">(</span><span style="color: #00008b;">$uploadvalues</span><span style="color: Olive;">))</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Green;">echo</span><span style="color: Gray;"> </span><span style="color: Blue;">json_encode</span><span style="color: Olive;">(</span><span style="color: #00008b;">$uploadvalues</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #ffa500;">//读取进度失败，另外处理逻辑</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Olive;">}</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"> </span><span style="color: Green;">else</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #ffa500;">//显示上传表单</span><span style="color: Gray;"><br /></span><span style="color: Olive;">}</span><span style="color: Gray;"></span></div></div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/463.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>ZF 1.0正式版放出</title>
		<link>http://www.toplee.com/blog/441.html</link>
		<comments>http://www.toplee.com/blog/441.html#comments</comments>
		<pubDate>Mon, 02 Jul 2007 16:16:45 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/441.html</guid>
		<description><![CDATA[　　期待已久的Zend Framework 1.0 正式版终于发布了，刚刚从SVN里面更新的版本是非常巧合的5555，从changelog来看，变化不大，早些时候在1.0 RC版本里面编写的项目基本没有任何改动就可以继续正常运行，相信在未来的版本发布过程中，向前的兼容会做到更好，在0.9.x版之后，ZF团队就一直在努力的提高ZF在未来的向前兼容能力，作为优秀的产品，这是非常重要的。 　　近期有很多基于ZF的项目要启动，1.0正式版的发布对项目的开发提供了更多的保障。]]></description>
			<content:encoded><![CDATA[<p>　　期待已久的Zend Framework 1.0 正式版终于发布了，刚刚从SVN里面更新的版本是非常巧合的5555，从changelog来看，变化不大，早些时候在1.0 RC版本里面编写的项目基本没有任何改动就可以继续正常运行，相信在未来的版本发布过程中，向前的兼容会做到更好，在0.9.x版之后，ZF团队就一直在努力的提高ZF在未来的向前兼容能力，作为优秀的产品，这是非常重要的。</p>
<p>　　近期有很多基于ZF的项目要启动，1.0正式版的发布对项目的开发提供了更多的保障。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/441.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>解决了ZF的两个问题</title>
		<link>http://www.toplee.com/blog/433.html</link>
		<comments>http://www.toplee.com/blog/433.html#comments</comments>
		<pubDate>Wed, 20 Jun 2007 16:43:24 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/433.html</guid>
		<description><![CDATA[　　之前提到Zend Framework的三个问题，有两个问题今天晚上搞明白了。 ErrorController官方文档里面提到的_getRequest(&#8216;error_handler&#8217;)方法不存在的问题，改成 $this->_getParam(&#8216;error_handler&#8217;)即可解决。 Controller里面的init()方法会在基类的构造函数__construct()之前调用的问题，通过阅读 Zend_Controller_Action类里面的100-130行找到解决办法，就是在基类的__construct()里面，把 parent::__construct($request, $response, $invokeArgs); 移到初始化操作之后，比如__construct()的最后一行即可解决。 　　第三个关于 useDefaultControllerAlways 参数导致_forward()方法的controller参数失效的问题不是太紧急，回头再研究。 　　顺便提一下，ZF的Router功能实在太强大了，甚至支持正则匹配，完全可以写出任何你想要的灵活的URL来，赞！]]></description>
			<content:encoded><![CDATA[<p>　　之前提到Zend Framework的三个问题，有两个问题今天晚上搞明白了。</p>
<ul>
<li>ErrorController官方文档里面提到的_getRequest(&#8216;error_handler&#8217;)方法不存在的问题，改成 $this->_getParam(&#8216;error_handler&#8217;)即可解决。</li>
<li>Controller里面的init()方法会在基类的构造函数__construct()之前调用的问题，通过阅读 Zend_Controller_Action类里面的100-130行找到解决办法，就是在基类的__construct()里面，把 parent::__construct($request, $response, $invokeArgs); 移到初始化操作之后，比如__construct()的最后一行即可解决。</li>
</ul>
<p>　　第三个关于 useDefaultControllerAlways 参数导致_forward()方法的controller参数失效的问题不是太紧急，回头再研究。</p>
<p>　　顺便提一下，ZF的Router功能实在太强大了，甚至支持正则匹配，完全可以写出任何你想要的灵活的URL来，赞！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/433.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>最近使用Zend Framework遇到的一些问题</title>
		<link>http://www.toplee.com/blog/432.html</link>
		<comments>http://www.toplee.com/blog/432.html#comments</comments>
		<pubDate>Wed, 20 Jun 2007 15:13:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/432.html</guid>
		<description><![CDATA[　　目前遇到的困惑有这样一些： 使用 $front->setParam(’useDefaultControllerAlways’, true) 后，会导致各个controller里面$this->_forward()方法的controller参数失效，从实际应用中，这种逻辑不合理。 ErrorController按照官方文档会出现$this->_getRequest()方法不存在的错误。 ErrorController::_getRequest() does not exist and was not trapped in __call() 如果继承Zend_Controller_Action抽象类并实现一个自己的Controller基础类，然后每个controller都去继承或者实现这个基类，目的是可以在基础类里面进行一些各个controller里面都会需要的初始化操作，此时会出现一个问题，在访问各个Controller里面的action时，会先调用controller里面的init()方法，然后再去执行基类里面的__contruct()构造函数，这会导致init()方法里面无法得到该构造函数里面进行的初始化结果，这个问题让我曾经郁闷了很久。 　　继续研究中，也希望有朋友分享经验。]]></description>
			<content:encoded><![CDATA[<p>　　目前遇到的困惑有这样一些：</p>
<ul>
<li>使用 $front->setParam(’useDefaultControllerAlways’, true) 后，会导致各个controller里面$this->_forward()方法的controller参数失效，从实际应用中，这种逻辑不合理。 </li>
<li>ErrorController按照官方文档会出现$this->_getRequest()方法不存在的错误。 ErrorController::_getRequest() does not exist and was not trapped in __call() </li>
<li>如果继承Zend_Controller_Action抽象类并实现一个自己的Controller基础类，然后每个controller都去继承或者实现这个基类，目的是可以在基础类里面进行一些各个controller里面都会需要的初始化操作，此时会出现一个问题，在访问各个Controller里面的action时，会先调用controller里面的init()方法，然后再去执行基类里面的__contruct()构造函数，这会导致init()方法里面无法得到该构造函数里面进行的初始化结果，这个问题让我曾经郁闷了很久。</li>
</ul>
<p>　　继续研究中，也希望有朋友分享经验。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/432.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend_Search_Lucene更新Index的方法</title>
		<link>http://www.toplee.com/blog/429.html</link>
		<comments>http://www.toplee.com/blog/429.html#comments</comments>
		<pubDate>Mon, 11 Jun 2007 13:07:47 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/429.html</guid>
		<description><![CDATA[　　在使用Zend Framework的Search_Lucene模块时，假设你有个文档已经加入到索引里面了，而这个文档后来被删除或者被修改了，需要及时更新索引才能保证数据的时效性，以前比较傻的办法就是全部重新创建一次索引，这个开销很大，也不适合大型应用，典型的场景就是论坛的帖子，如果帖子被删除或者修改了，就需要即使更新索引。 　　Zend_Search_Lucene官方文档关于删除和更新一个索引的说明实在太少，我自己琢磨了个简单的办法来实现，大家可以尝试一下，也许有更好的办法，知道的朋友可以告知我。 　　下面是官方文档的说明： &#60;?php$removePath = ...;$hits = $index-&#62;find('path:' . $removePath);foreach ($hits as $hit) {&#160;&#160; &#160;$index-&#62;delete($hit-&#62;id);}?&#62; 　　这里头困惑的是$removePath这个东西，我是没有明白咋回事，下面说说我用的办法。 　　首先，假设我们的文档text都有个唯一的tid字段，那么我们就根据这个tid来作为每次删除和更新的依据，由于Lucene创建索引的时候，（我自己测试的）用数字类型无法成为keyword并且作为索引的字段，于是我们需要转换为字符串，这里我通过md5的方式把tid变成唯一的字符串，通过这个字符串来找到需要删除和更新的索引内容。 //创建索引的时候，部分代码：$index = Zend_Search_Lucene::create($this-&#62;lucne_index); //我类内部表示index路径的变量$doc = new Zend_Search_Lucene_Document();Zend_Search_Lucene_Analysis_Analyzer::setDefault(&#160;&#160; &#160;new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8()); //根据你自己需要配置字符集&#160;$doc-&#62;addField(Zend_Search_Lucene_Field::UnStored('key', md5($tid)));$doc-&#62;addField(Zend_Search_Lucene_Field::Text('title', $title));$doc-&#62;addField(Zend_Search_Lucene_Field::UnStored('content', $content));&#160;$index-&#62;addDocument($doc);$index-&#62;commit();&#160;//删除和更新索引的部分代码：//先删除之$key = md5($tid);$index = Zend_Search_Lucene::open($this-&#62;lucne_index);$query = Zend_Search_Lucene_Search_QueryParser::parse(&#34;key:$key&#34;, 'utf-8');$hits = $index-&#62;find($query);foreach ($hits AS $hit) {&#160;&#160; &#160;$index-&#62;delete($hit-&#62;id);}//重新索引更新后的数据，代码和创建一样$doc-&#62;addField(Zend_Search_Lucene_Field::UnStored('key', md5($tid)));$doc-&#62;addField(Zend_Search_Lucene_Field::Text('title', $title));$doc-&#62;addField(Zend_Search_Lucene_Field::UnStored('content', $content));&#160;$index-&#62;addDocument($doc);$index-&#62;commit(); 　　其实思路就是先找到要更新的内容，删之，然后把新的数据重新添加到索引。 　　抛砖引玉，欢迎交流。]]></description>
			<content:encoded><![CDATA[<p>　　在使用Zend Framework的Search_Lucene模块时，假设你有个文档已经加入到索引里面了，而这个文档后来被删除或者被修改了，需要及时更新索引才能保证数据的时效性，以前比较傻的办法就是全部重新创建一次索引，这个开销很大，也不适合大型应用，典型的场景就是论坛的帖子，如果帖子被删除或者修改了，就需要即使更新索引。<br />
<span id="more-429"></span><br />
　　Zend_Search_Lucene官方文档关于删除和更新一个索引的说明实在太少，我自己琢磨了个简单的办法来实现，大家可以尝试一下，也许有更好的办法，知道的朋友可以告知我。</p>
<p>　　下面是官方文档的说明：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">&lt;?php</span><span style="color: Gray;"><br /></span><span style="color: #00008b;">$removePath</span><span style="color: Gray;"> = ...;<br /></span><span style="color: #00008b;">$hits</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">path:</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> . </span><span style="color: #00008b;">$removePath</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Green;">foreach</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: #00008b;">$hits</span><span style="color: Gray;"> </span><span style="color: Green;">as</span><span style="color: Gray;"> </span><span style="color: #00008b;">$hit</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">delete</span><span style="color: Olive;">(</span><span style="color: #00008b;">$hit</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">id</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: Blue;">?&gt;</span></div></div>
<p>　　这里头困惑的是$removePath这个东西，我是没有明白咋回事，下面说说我用的办法。</p>
<p>　　首先，假设我们的文档text都有个唯一的tid字段，那么我们就根据这个tid来作为每次删除和更新的依据，由于Lucene创建索引的时候，（我自己测试的）用数字类型无法成为keyword并且作为索引的字段，于是我们需要转换为字符串，这里我通过md5的方式把tid变成唯一的字符串，通过这个字符串来找到需要删除和更新的索引内容。</p>
<div class="hl-surround"><div class="hl-main"><span style="color: #ffa500;">//创建索引的时候，部分代码：</span><span style="color: Gray;"><br /></span><span style="color: #00008b;">$index</span><span style="color: Gray;"> = </span><span style="color: Blue;">Zend_Search_Lucene</span><span style="color: Gray;">::</span><span style="color: Blue;">create</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">lucne_index</span><span style="color: Olive;">)</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//我类内部表示index路径的变量</span><span style="color: Gray;"><br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;"> = </span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Zend_Search_Lucene_Document</span><span style="color: Olive;">()</span><span style="color: Gray;">;<br /></span><span style="color: Blue;">Zend_Search_Lucene_Analysis_Analyzer</span><span style="color: Gray;">::</span><span style="color: Blue;">setDefault</span><span style="color: Olive;">(</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">new</span><span style="color: Gray;"> </span><span style="color: Blue;">Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8</span><span style="color: Olive;">())</span><span style="color: Gray;">; </span><span style="color: #ffa500;">//根据你自己需要配置字符集</span><span style="color: Gray;"><br />&nbsp;<br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addField</span><span style="color: Olive;">(</span><span style="color: Blue;">Zend_Search_Lucene_Field</span><span style="color: Gray;">::</span><span style="color: Blue;">UnStored</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">key</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">md5</span><span style="color: Olive;">(</span><span style="color: #00008b;">$tid</span><span style="color: Olive;">)))</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addField</span><span style="color: Olive;">(</span><span style="color: Blue;">Zend_Search_Lucene_Field</span><span style="color: Gray;">::</span><span style="color: Blue;">Text</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$title</span><span style="color: Olive;">))</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addField</span><span style="color: Olive;">(</span><span style="color: Blue;">Zend_Search_Lucene_Field</span><span style="color: Gray;">::</span><span style="color: Blue;">UnStored</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">content</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$content</span><span style="color: Olive;">))</span><span style="color: Gray;">;<br />&nbsp;<br /></span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addDocument</span><span style="color: Olive;">(</span><span style="color: #00008b;">$doc</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">commit</span><span style="color: Olive;">()</span><span style="color: Gray;">;<br />&nbsp;<br /></span><span style="color: #ffa500;">//删除和更新索引的部分代码：</span><span style="color: Gray;"><br /></span><span style="color: #ffa500;">//先删除之</span><span style="color: Gray;"><br /></span><span style="color: #00008b;">$key</span><span style="color: Gray;"> = </span><span style="color: Blue;">md5</span><span style="color: Olive;">(</span><span style="color: #00008b;">$tid</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$index</span><span style="color: Gray;"> = </span><span style="color: Blue;">Zend_Search_Lucene</span><span style="color: Gray;">::</span><span style="color: Blue;">open</span><span style="color: Olive;">(</span><span style="color: #00008b;">$this</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">lucne_index</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$query</span><span style="color: Gray;"> = </span><span style="color: Blue;">Zend_Search_Lucene_Search_QueryParser</span><span style="color: Gray;">::</span><span style="color: Blue;">parse</span><span style="color: Olive;">(</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">key:</span><span style="color: #00008b;">$key</span><span style="color: #8b0000;">&quot;</span><span style="color: Gray;">, </span><span style="color: #8b0000;">'</span><span style="color: Red;">utf-8</span><span style="color: #8b0000;">'</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$hits</span><span style="color: Gray;"> = </span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">find</span><span style="color: Olive;">(</span><span style="color: #00008b;">$query</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Green;">foreach</span><span style="color: Gray;"> </span><span style="color: Olive;">(</span><span style="color: #00008b;">$hits</span><span style="color: Gray;"> </span><span style="color: Green;">AS</span><span style="color: Gray;"> </span><span style="color: #00008b;">$hit</span><span style="color: Olive;">)</span><span style="color: Gray;"> </span><span style="color: Olive;">{</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">delete</span><span style="color: Olive;">(</span><span style="color: #00008b;">$hit</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">id</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: Olive;">}</span><span style="color: Gray;"><br /></span><span style="color: #ffa500;">//重新索引更新后的数据，代码和创建一样</span><span style="color: Gray;"><br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addField</span><span style="color: Olive;">(</span><span style="color: Blue;">Zend_Search_Lucene_Field</span><span style="color: Gray;">::</span><span style="color: Blue;">UnStored</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">key</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: Blue;">md5</span><span style="color: Olive;">(</span><span style="color: #00008b;">$tid</span><span style="color: Olive;">)))</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addField</span><span style="color: Olive;">(</span><span style="color: Blue;">Zend_Search_Lucene_Field</span><span style="color: Gray;">::</span><span style="color: Blue;">Text</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">title</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$title</span><span style="color: Olive;">))</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$doc</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addField</span><span style="color: Olive;">(</span><span style="color: Blue;">Zend_Search_Lucene_Field</span><span style="color: Gray;">::</span><span style="color: Blue;">UnStored</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">content</span><span style="color: #8b0000;">'</span><span style="color: Gray;">, </span><span style="color: #00008b;">$content</span><span style="color: Olive;">))</span><span style="color: Gray;">;<br />&nbsp;<br /></span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">addDocument</span><span style="color: Olive;">(</span><span style="color: #00008b;">$doc</span><span style="color: Olive;">)</span><span style="color: Gray;">;<br /></span><span style="color: #00008b;">$index</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">commit</span><span style="color: Olive;">()</span><span style="color: Gray;">;</span></div></div>
<p>　　其实思路就是先找到要更新的内容，删之，然后把新的数据重新添加到索引。</p>
<p>　　抛砖引玉，欢迎交流。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/429.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.0.0 Release Candidate</title>
		<link>http://www.toplee.com/blog/423.html</link>
		<comments>http://www.toplee.com/blog/423.html#comments</comments>
		<pubDate>Tue, 29 May 2007 01:51:14 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/423.html</guid>
		<description><![CDATA[　　今天凌晨2点关机的时候还看到是0.9.3，早上起来开机发现就是1.0RC版本发布了，令人兴奋！ 　　May 28, 2007 　　This is the final stretch. Zend Framework has come a long way, and evolved into a professional PHP class library that is already used to run many web sites around the world. This Release Candidate gets us even closer to the stable release that everyone has waited for. 　　Some noteworthy improvements [...]]]></description>
			<content:encoded><![CDATA[<p>　　今天凌晨2点关机的时候还看到是0.9.3，早上起来开机发现就是1.0RC版本发布了，令人兴奋！</p>
<p>　　May 28, 2007<br />
　　This is the final stretch. Zend Framework has come a long way, and evolved into a professional PHP class library that is already used to run many web sites around the world. This Release Candidate gets us even closer to the stable release that everyone has waited for. </p>
<p>　　Some noteworthy improvements in this release, include: </p>
<p>　　Zend_Filter_Input, a &#8220;cage&#8221; for validating input data<br />
　　Zend_Validate supports user-definable error messages<br />
　　Zend_Gdata redesigned interface allows a convenient object-oriented usage<br />
　　MVC ViewRenderer makes it much simpler to write controller actions </p>
<p>　　<a href="http://framework.zend.com/download/stable">Download</a> Zend Framework 1.0.0 Release Candidate! </p>
<p>　　The <a href="http://framework.zend.com/changelog">changelog</a> lists changes to the Zend Framework. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/423.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ZF的module不错</title>
		<link>http://www.toplee.com/blog/419.html</link>
		<comments>http://www.toplee.com/blog/419.html#comments</comments>
		<pubDate>Wed, 23 May 2007 04:58:38 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/419.html</guid>
		<description><![CDATA[　　前面使用Zend framework开发的项目不算太复杂，目录结构和controller都相对简单，近期开始的东西涉及到子域名、多子系统，于是重新看了Zf的文档，发现了Controller里面的module功能很不错。 　　先规划如下目录结构： docroot/&#160;&#160; &#160;index.phpapplication/&#160;&#160; &#160;default/&#160;&#160; &#160; &#160; &#160;controllers/&#160;&#160; &#160; &#160; &#160; &#160; &#160;IndexController.php&#160;&#160; &#160;blog/&#160;&#160; &#160; &#160; &#160;controllers/&#160;&#160; &#160; &#160; &#160; &#160; &#160;IndexController.php&#160;&#160; &#160; &#160; &#160;models/&#160;&#160; &#160; &#160; &#160;views/&#160;&#160; &#160;... 　　然后在index.php里面写入类似下面的代码 $front-&#62;setControllerDirectory(array(&#160;&#160; &#160; &#160;'default' =&#62; '/path/to/application/controllers',&#160;&#160; &#160; &#160;'blog'&#160; &#160; =&#62; '/path/to/application/blog/controllers')); 　　可以通过 http://host/blog/controller/action 的方法来访问了。]]></description>
			<content:encoded><![CDATA[<p>　　前面使用Zend framework开发的项目不算太复杂，目录结构和controller都相对简单，近期开始的东西涉及到子域名、多子系统，于是重新看了Zf的文档，发现了Controller里面的module功能很不错。</p>
<p>　　先规划如下目录结构：</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">docroot</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">index</span><span style="color: Gray;">.</span><span style="color: Blue;">php</span><span style="color: Gray;"><br /></span><span style="color: Blue;">application</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp;</span><span style="color: Green;">default</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">controllers</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">IndexController</span><span style="color: Gray;">.</span><span style="color: Blue;">php</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp;</span><span style="color: Blue;">blog</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">controllers</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">IndexController</span><span style="color: Gray;">.</span><span style="color: Blue;">php</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">models</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: Blue;">views</span><span style="color: Gray;">/<br />&nbsp;&nbsp; &nbsp;...</span></div></div>
<p>　　然后在index.php里面写入类似下面的代码</p>
<div class="hl-surround"><div class="hl-main"><span style="color: #00008b;">$front</span><span style="color: Gray;">-&gt;</span><span style="color: Blue;">setControllerDirectory</span><span style="color: Olive;">(</span><span style="color: Green;">array</span><span style="color: Olive;">(</span><span style="color: Gray;"><br />&nbsp;&nbsp; &nbsp; &nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">default</span><span style="color: #8b0000;">'</span><span style="color: Gray;"> =&gt; </span><span style="color: #8b0000;">'</span><span style="color: Red;">/path/to/application/controllers</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,<br />&nbsp;&nbsp; &nbsp; &nbsp;</span><span style="color: #8b0000;">'</span><span style="color: Red;">blog</span><span style="color: #8b0000;">'</span><span style="color: Gray;">&nbsp; &nbsp; =&gt; </span><span style="color: #8b0000;">'</span><span style="color: Red;">/path/to/application/blog/controllers</span><span style="color: #8b0000;">'</span><span style="color: Gray;"><br /></span><span style="color: Olive;">))</span><span style="color: Gray;">;</span></div></div>
<p>　　可以通过 http://host/blog/controller/action 的方法来访问了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/419.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>用zend framework完成了两个项目</title>
		<link>http://www.toplee.com/blog/416.html</link>
		<comments>http://www.toplee.com/blog/416.html#comments</comments>
		<pubDate>Sat, 12 May 2007 09:59:41 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/416.html</guid>
		<description><![CDATA[　　前段时间开始尝试使用zend framework进行真正的项目开发，分别完成了公司内部的客服系统和一个web2.0的项目，两个项目由于一个仅供内网使用，一个正在进行alpha测试，所以均暂时无法提供出来在网上访问，等alpha测试完成进入Beta测试后，我会公布出来。经过这两个项目后，对zend framework的理解加深了不少。 　　Zf的确是个不错的框架，基于它开发的系统逻辑和结构都非常清晰，不同的程序员很容易进行沟通和团队协作，在我的项目中主要采用了 Zend_Acl、Zend_Controller、Zend_Config、 Zend_Db、 Zend_Registry、Zend_Search_Lucene这几个模块，整个的实现完全按照MVC和纯粹的面向对象实现，在项目中整合了Smarty到Zend_View，整合Memcached到Cache，自己继承并扩展了Zend_Controller_Action的功能，主要进行一些针对各个Controller都需要的功能进行统一处理，比如基于Acl进行权限验证。同时我还借用了PEAR的一些组件，比如Http、Benchmark模块。 　　这次的两个项目都基于Zf 0.9.2 实现，最近升级到了0.9.3。最早我一直犹豫是否使用Zf，主要原因是它的Search_Lucene模块对UTF8的支持不够好，加上Zend_Db的部分功能未能满足我的需求，直到0.9.2版的发布我才下了决心使用，在项目中使用的Zend_Lucene全文检索从目前来看，功能和效果都感觉不错，还没有进行大规模的性能测试，而Zend_Db我进行了扩展，增加了对MySQL的Master/Slave以及Cluster的支持。 　　从团队开发、架构设计、代码规范、开发成本和周期等方面考虑，建议有条件的朋友都可以尝试一下Zf，尤其是一些类似MIS系统的BS项目，用Zf一定能事半功倍。在大型商用Web项目开发中，使用Zf也是完全可以的，性能方面等我那个项目投入使用后给出参考数据，我目前自己debug测试的结果来看，效率还是非常不错的，有可能Router方面会稍微多一些消耗，不过应该是可以接受的范围。 　　最后值得一提的是Zend_Config_Ini模块个人感觉很不错，支持数字作key，可以很方便的配置出灵活的配置文件，推荐使用之 　　如果有必要，我考虑后续把我的Index.php公布出来供大家参考:)]]></description>
			<content:encoded><![CDATA[<p>　　前段时间开始尝试使用zend framework进行真正的项目开发，分别完成了公司内部的客服系统和一个web2.0的项目，两个项目由于一个仅供内网使用，一个正在进行alpha测试，所以均暂时无法提供出来在网上访问，等alpha测试完成进入Beta测试后，我会公布出来。经过这两个项目后，对zend framework的理解加深了不少。</p>
<p>　　Zf的确是个不错的框架，基于它开发的系统逻辑和结构都非常清晰，不同的程序员很容易进行沟通和团队协作，在我的项目中主要采用了 Zend_Acl、Zend_Controller、Zend_Config、 Zend_Db、 Zend_Registry、Zend_Search_Lucene这几个模块，整个的实现完全按照MVC和纯粹的面向对象实现，在项目中整合了Smarty到Zend_View，整合Memcached到Cache，自己继承并扩展了Zend_Controller_Action的功能，主要进行一些针对各个Controller都需要的功能进行统一处理，比如基于Acl进行权限验证。同时我还借用了PEAR的一些组件，比如Http、Benchmark模块。</p>
<p>　　这次的两个项目都基于Zf 0.9.2 实现，最近升级到了0.9.3。最早我一直犹豫是否使用Zf，主要原因是它的Search_Lucene模块对UTF8的支持不够好，加上Zend_Db的部分功能未能满足我的需求，直到0.9.2版的发布我才下了决心使用，在项目中使用的Zend_Lucene全文检索从目前来看，功能和效果都感觉不错，还没有进行大规模的性能测试，而Zend_Db我进行了扩展，增加了对MySQL的Master/Slave以及Cluster的支持。</p>
<p>　　从团队开发、架构设计、代码规范、开发成本和周期等方面考虑，建议有条件的朋友都可以尝试一下Zf，尤其是一些类似MIS系统的BS项目，用Zf一定能事半功倍。在大型商用Web项目开发中，使用Zf也是完全可以的，性能方面等我那个项目投入使用后给出参考数据，我目前自己debug测试的结果来看，效率还是非常不错的，有可能Router方面会稍微多一些消耗，不过应该是可以接受的范围。</p>
<p>　　最后值得一提的是Zend_Config_Ini模块个人感觉很不错，支持数字作key，可以很方便的配置出灵活的配置文件，推荐使用之 <img src='http://www.toplee.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>　　如果有必要，我考虑后续把我的Index.php公布出来供大家参考:)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/416.html/feed</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Zend Framework Beta 0.9.0</title>
		<link>http://www.toplee.com/blog/378.html</link>
		<comments>http://www.toplee.com/blog/378.html#comments</comments>
		<pubDate>Sun, 18 Mar 2007 10:13:53 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/378.html</guid>
		<description><![CDATA[March 17, 2007 　　We are very proud to announce Zend Framework Beta Release version 0.9.0. This is the first Beta Release for Zend Framework. Most components have graduated from the incubator to the core library, the class interfaces are stabilizing, and the documentation and tests have been improved significantly. 　　Some of the highlights and new [...]]]></description>
			<content:encoded><![CDATA[<p><strong>March 17, 2007</strong><br />
　　We are very proud to announce Zend Framework Beta Release version 0.9.0. This is the first Beta Release for Zend Framework. Most components have graduated from the incubator to the core library, the class interfaces are stabilizing, and the documentation and tests have been improved significantly. </p>
<p>　　Some of the highlights and new developments in this release are the following: </p>
<ul>
<li>MVC: view integration, output buffering; </li>
<li>Zend_Auth: new authentication adapters; </li>
<li>Zend_Db_Table: object-oriented enhancements; </li>
<li>Zend_Db_Select: enhanced interface, new documentation; </li>
<li>Zend_Db_Adapter_Mysqli: native adapter moved to core; </li>
<li>Zend_Feed: adds a class to produce an RSS/Atom feed;</li>
<li>Zend_Mail: more features for handling messages in folders;</li>
<li>Zend_Search_Lucene: now matches the performance of Java Lucene </li>
<li>Zend_Service_Audioscrobbler, Zend_Service_Delicious, Zend_Service_Simpy: moved to core; </li>
<li>Zend_Translate: moved to core, new message storage adapters; </li>
<li>Zend_Validate: improvements to validators for email address and hostnames; </li>
<li>Zend utility classes: refactored design </li>
<li>Zend_Log (incubator): fully object-oriented redesign </li>
<li>Zend_Memory (incubator): for managing data structures in a low-memory environment </li>
<li>Many other enhancements to test suites and documentation. </ul>
</li>
<p><a href="http://framework.zend.com/download/stable">Download</a> Zend Framework Beta 0.9.0! </p>
<p>The <a href="http://framework.zend.com/changelog">changelog</a> highlights the most significant changes to the Zend Framework. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/378.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>期待Zend Framework的Release 1.0</title>
		<link>http://www.toplee.com/blog/371.html</link>
		<comments>http://www.toplee.com/blog/371.html#comments</comments>
		<pubDate>Tue, 06 Mar 2007 17:57:13 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/371.html</guid>
		<description><![CDATA[　　前不久试用了Zend_Framework Beta0.7.0的几个主要模块，感触很多，PHP未来在Web项目上的前景是很多人不能想象的，尤其在面对大型WEB应用、企业BS大型软件等方面，Zend Framework给了我们很大的想象空间。 　　Zend Framework由Zend官方团队提供支持，并且提供开放的使用协议，该框架完全基于PHP5来开发和实现，提供了完全的面向对象架构，完整的Exception实现，类似Java的try catch处理，就它本身来说，就是一个PHP5标准的OO教程，在Zend Framework上，使用了不少我们在23种经典设计模式中熟悉的典型模式，比如Factory模式、Singleton模式在Zend Framework中被大量使用。 　　在我对0.7.0的试用中，发现Zend_Search_Lucene模块最大的问题就是UTF-8以及中文的支持问题，同时基于PDO的Zend_Db模块还不是很稳定，经过我测试，在同一个应用中使用多个DB多个Server的情况下，会有些奇怪的问题发生，虽然如此，这个Framework依然让我非常兴奋和期待。 　　前两天Zend Framework发布了Beta0.8.0，从Changelog里面可以看到很多的改进和新功能的实现，在Search模块上也有了很多改进，最近有空了准备再测试一下。不过就目前来说，把Zend Framework应用到商业产品里面，还是建议等待Release 1.0发布后再行动，目前做做测试和熟悉倒是不错。 　　事实上，PHP领域里面，我至今最喜欢的就是PEAR，我写过的很多PHP的应用大部分都基于PEAR来实现，这个类似PERL领域CPAN库的PHP模块仓库，聚集了大量PHP高手的结晶，PEAR实现了基于PEAR_Error的错误处理框架，这在我写的东西里面被完全使用，PEAR中HTTP、Benchmark、NET、Mail、Soap等模块已经在我很多项目中让我受益匪浅。 　　前一段写过的一个东西，我基于PEAR，并整合了Zend Framework的部分模块进来，比如Zend_Config模块，我把它从Zend Framework里面剥离出来，修改了部分代码整合到PEAR里面来，我用它来实现了我底层的Config配置对象，从目前的情况来看，效果很好。 　　期待Release 1.0 ！]]></description>
			<content:encoded><![CDATA[<p>　　前不久试用了Zend_Framework Beta0.7.0的几个主要模块，感触很多，PHP未来在Web项目上的前景是很多人不能想象的，尤其在面对大型WEB应用、企业BS大型软件等方面，Zend Framework给了我们很大的想象空间。</p>
<p>　　Zend Framework由Zend官方团队提供支持，并且提供开放的使用协议，该框架完全基于PHP5来开发和实现，提供了完全的面向对象架构，完整的Exception实现，类似Java的try catch处理，就它本身来说，就是一个PHP5标准的OO教程，在Zend Framework上，使用了不少我们在23种经典设计模式中熟悉的典型模式，比如Factory模式、Singleton模式在Zend Framework中被大量使用。<br />
<a href='http://www.toplee.com/blog/archives/371.html/zendfm/' rel='attachment wp-att-372' title='ZendFM'><img src='http://www.toplee.com/blog/wp-content/uploads/2007/03/zend_fm.jpg' alt='ZendFM' /></a></p>
<p>　　在我对0.7.0的试用中，发现Zend_Search_Lucene模块最大的问题就是UTF-8以及中文的支持问题，同时基于PDO的Zend_Db模块还不是很稳定，经过我测试，在同一个应用中使用多个DB多个Server的情况下，会有些奇怪的问题发生，虽然如此，这个Framework依然让我非常兴奋和期待。</p>
<p>　　前两天Zend Framework发布了Beta0.8.0，从Changelog里面可以看到很多的改进和新功能的实现，在Search模块上也有了很多改进，最近有空了准备再测试一下。不过就目前来说，把Zend Framework应用到商业产品里面，还是建议等待Release 1.0发布后再行动，目前做做测试和熟悉倒是不错。</p>
<p>　　事实上，PHP领域里面，我至今最喜欢的就是PEAR，我写过的很多PHP的应用大部分都基于PEAR来实现，这个类似PERL领域CPAN库的PHP模块仓库，聚集了大量PHP高手的结晶，PEAR实现了基于PEAR_Error的错误处理框架，这在我写的东西里面被完全使用，PEAR中HTTP、Benchmark、NET、Mail、Soap等模块已经在我很多项目中让我受益匪浅。</p>
<p>　　前一段写过的一个东西，我基于PEAR，并整合了Zend Framework的部分模块进来，比如Zend_Config模块，我把它从Zend Framework里面剥离出来，修改了部分代码整合到PEAR里面来，我用它来实现了我底层的Config配置对象，从目前的情况来看，效果很好。</p>
<p>　　期待Release 1.0 ！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/371.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Memcached和Lucene笔记</title>
		<link>http://www.toplee.com/blog/351.html</link>
		<comments>http://www.toplee.com/blog/351.html#comments</comments>
		<pubDate>Wed, 31 Jan 2007 12:09:37 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend_search_lucene]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/351.html</guid>
		<description><![CDATA[　　前段时间完成的项目使用了大量的Memcached，整个架构在性能上的确提高了很多，的确不是一点点的提高，面向大负载访问的时候，MySQL数据库仍然可以做到轻量级的负载，效果不错，建议有条件的朋友一定要把项目改造到Memcached上，著名的Vbb论坛当前的版本就已经开始支持使用Memcached进行论坛数据缓存。我原来在MOP的时候，我们也大量的采用这个东西。 　　在使用Memcached方面，谈不上什么经验，反正极端的性能最大化就是使用永久的缓存，通过你的程序逻辑去控制和维护MC里面的缓存数据，我做的项目就是这样处理的，程序的逻辑的确增加了复杂度，但是对于商业项目来说，这种付出是非常值得的。 　　Memcached唯一可能需要注意的是，他对key的操作不是原子级别的，所以在高并发处理的时候，对同一个key的写操作可能会导致覆盖，这个需要自己从程序逻辑上进行处理，这个理论我并没有深入研究，不过JH看了源代码给了我这样的结论，按照JH的实力和人品，我认为有80％以上的可信度:) 　　对于Lucene，大部分人都不陌生，相关的技术也不用太多讲解，网上到处都是相关的文档。我最近想通过PHP来找到一个最佳的整合Lucene的方法，并且应用到正规的商业应用中，目前知道的可选方案是Pecl的Clucene模块和Zend Framework的 Zend_Search_Lucene 模块，这两个东西目前我使用的感觉都不算太好，另外还有一种是使用 PHP的 Java扩展支持（有两种，一种是php_java扩展，一种是php_java的 bradge方式），这个感觉也比较怪异，最后还有一种知道的办法就是使用系统调用 java 命令执行Lucene功能。 这个没有试过，不知性能可以达到什么程度。 　　在这里做个记号，等有了进一步的收获补进来。]]></description>
			<content:encoded><![CDATA[<p>　　前段时间完成的项目使用了大量的Memcached，整个架构在性能上的确提高了很多，的确不是一点点的提高，面向大负载访问的时候，MySQL数据库仍然可以做到轻量级的负载，效果不错，建议有条件的朋友一定要把项目改造到Memcached上，著名的Vbb论坛当前的版本就已经开始支持使用Memcached进行论坛数据缓存。我原来在MOP的时候，我们也大量的采用这个东西。</p>
<p>　　在使用Memcached方面，谈不上什么经验，反正极端的性能最大化就是使用永久的缓存，通过你的程序逻辑去控制和维护MC里面的缓存数据，我做的项目就是这样处理的，程序的逻辑的确增加了复杂度，但是对于商业项目来说，这种付出是非常值得的。</p>
<p>　　Memcached唯一可能需要注意的是，他对key的操作不是原子级别的，所以在高并发处理的时候，对同一个key的写操作可能会导致覆盖，这个需要自己从程序逻辑上进行处理，这个理论我并没有深入研究，不过JH看了源代码给了我这样的结论，按照JH的实力和人品，我认为有80％以上的可信度:)</p>
<p>　　对于Lucene，大部分人都不陌生，相关的技术也不用太多讲解，网上到处都是相关的文档。我最近想通过PHP来找到一个最佳的整合Lucene的方法，并且应用到正规的商业应用中，目前知道的可选方案是Pecl的Clucene模块和Zend Framework的 Zend_Search_Lucene 模块，这两个东西目前我使用的感觉都不算太好，另外还有一种是使用 PHP的 Java扩展支持（有两种，一种是php_java扩展，一种是php_java的 bradge方式），这个感觉也比较怪异，最后还有一种知道的办法就是使用系统调用 java 命令执行Lucene功能。 这个没有试过，不知性能可以达到什么程度。</p>
<p>　　在这里做个记号，等有了进一步的收获补进来。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/351.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>用apache的动态so模式编写和编译php扩展</title>
		<link>http://www.toplee.com/blog/330.html</link>
		<comments>http://www.toplee.com/blog/330.html#comments</comments>
		<pubDate>Thu, 23 Nov 2006 18:24:55 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>
		<category><![CDATA[c语言]]></category>
		<category><![CDATA[so]]></category>
		<category><![CDATA[扩展]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/330.html</guid>
		<description><![CDATA[看过我另外一篇关于用c语言编写php扩展so模块的朋友，应该已经了解大致的php模块编写过程，（原文：http://www.toplee.com/blog/56.html） 不过该文中没有专门针对已经安装好的系统进行说明，如何在现有apache、php运行环境下添加一个动态的so扩展，下面简单的整理一下。 大致的步骤如下： #cd /usr/port/distfiles/php-5.1.4/ext/&#160; &#160; （进入到您的php源码目录）#./ext_skel --extname=toplee （此处的toplee为您的扩展so的名称）#cd ..#vim ./ext/toplee/config.m4 （修改config.m4文件，此处细节可以参考我另外那篇文章中说明）#vim ./ext/toplee/toplee.c&#160; &#160;（修改和加入您自己的c代码）#vim ./ext/toplee/toplee.h&#160; &#160;（修改和添加函数定义代码）#./buildconf --force （加上force参数是避免您使用的php版本为release版本）如果上面命令执行中提示autoconf not found之类的错误，可以执行下面命令#export PHP_AUTOCONF=/usr/local/bin/autoconf259&#160; （这里的autoconf259路径和名称根据您自己安装的autoconf情况而定）#export PHP_AUTOHEADER=/usr/local/bin/autoheader259 （autoheader259同上）#./buildconf --force#./configure --disable-all --with-toplee=shared --with-apxs2=/usr/local/sbin/apxs上面命令中，--disable-all是为了加快编译速度而使用的，减少php默认要编译的模块数量。 --with-toplee=shared为了编译后能直接生产.so文件， --with-apxs2=/usr/local/sbin/apxs是根据您服务器上apache安装具体路径和版本来确定的#make#cp ./ext/toplee/.libs/toplee.so /usr/local/lib/php/20050922/ （把生产的so文件拷贝到您的php存放so扩展文件的目录下）#vim /usr/local/etc/php/extensions.ini&#160; &#160;（加入toplee.so一行）#/usr/local/etc/rc.d/apache22.sh restart 最后从phpinfo()函数看看返回结果，如果看到有toplee部分，那么恭喜你！如果没有，按照步骤好好检查一下！ 这是我的phpinfo看到的结果： 另外，顺便提一下另外一种编译php扩展的方法，就是使用phpize工具，这种方法允许你在一个独立编写的目录下编译php的扩展，不用按照前面的方式在php源文件目录的ext下，大致的思路是： 1.创建自己的扩展目录 toplee 2.编写config.m4文件，可以参考前面ext_skel生成的范本 3.执行 phpize 命令 4.执行 ./configure &#8211;enable-toplee &#8211;with-apxs2=/usr/local/sbin/apxs &#8211;with-php-config=/usr/local/bin/php-config 5.make 这时会在当前目录下生产一个toplee.so，呵呵，这就是你想要的！]]></description>
			<content:encoded><![CDATA[<p>看过我另外一篇关于用c语言编写php扩展so模块的朋友，应该已经了解大致的php模块编写过程，（原文：<a href="http://www.toplee.com/blog/56.html">http://www.toplee.com/blog/56.html</a>） 不过该文中没有专门针对已经安装好的系统进行说明，如何在现有apache、php运行环境下添加一个动态的so扩展，下面简单的整理一下。<br />
<span id="more-330"></span><br />
大致的步骤如下：</p>
<div class="hl-surround"><div class="hl-main">#cd /usr/port/distfiles/php-5.1.4/ext/&nbsp; &nbsp; （进入到您的php源码目录）<br />#./ext_skel --extname=toplee （此处的toplee为您的扩展so的名称）<br />#cd ..<br />#vim ./ext/toplee/config.m4 （修改config.m4文件，此处细节可以参考我另外那篇文章中说明）<br />#vim ./ext/toplee/toplee.c&nbsp; &nbsp;（修改和加入您自己的c代码）<br />#vim ./ext/toplee/toplee.h&nbsp; &nbsp;（修改和添加函数定义代码）<br />#./buildconf --force （加上force参数是避免您使用的php版本为release版本）<br />如果上面命令执行中提示autoconf not found之类的错误，可以执行下面命令<br />#export PHP_AUTOCONF=/usr/local/bin/autoconf259&nbsp; （这里的autoconf259路径和名称根据您自己安装的autoconf情况而定）<br />#export PHP_AUTOHEADER=/usr/local/bin/autoheader259 （autoheader259同上）<br />#./buildconf --force<br />#./configure --disable-all --with-toplee=shared --with-apxs2=/usr/local/sbin/apxs<br />上面命令中，--disable-all是为了加快编译速度而使用的，减少php默认要编译的模块数量。 --with-toplee=shared为了编译后能直接生产.so文件， --with-apxs2=/usr/local/sbin/apxs是根据您服务器上apache安装具体路径和版本来确定的<br />#make<br />#cp ./ext/toplee/.libs/toplee.so /usr/local/lib/php/20050922/ （把生产的so文件拷贝到您的php存放so扩展文件的目录下）<br />#vim /usr/local/etc/php/extensions.ini&nbsp; &nbsp;（加入toplee.so一行）<br />#/usr/local/etc/rc.d/apache22.sh restart</div></div>
<p>最后从phpinfo()函数看看返回结果，如果看到有toplee部分，那么恭喜你！如果没有，按照步骤好好检查一下！<br />
这是我的phpinfo看到的结果：<br />
<img id="image331" alt=topleeso src="http://www.toplee.com/blog/wp-content/uploads/2006/11/topleeso.jpg" /></p>
<p>另外，顺便提一下另外一种编译php扩展的方法，就是使用phpize工具，这种方法允许你在一个独立编写的目录下编译php的扩展，不用按照前面的方式在php源文件目录的ext下，大致的思路是：<br />
1.创建自己的扩展目录 toplee<br />
2.编写config.m4文件，可以参考前面ext_skel生成的范本<br />
3.执行 phpize 命令<br />
4.执行 ./configure &#8211;enable-toplee &#8211;with-apxs2=/usr/local/sbin/apxs<br />
&#8211;with-php-config=/usr/local/bin/php-config<br />
5.make</p>
<p>这时会在当前目录下生产一个toplee.so，呵呵，这就是你想要的！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/330.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>设置php的session分级存放后，phpMyAdmin运行不正常</title>
		<link>http://www.toplee.com/blog/305.html</link>
		<comments>http://www.toplee.com/blog/305.html#comments</comments>
		<pubDate>Mon, 30 Oct 2006 06:15:45 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[PHP / Zend]]></category>

		<guid isPermaLink="false">http://www.toplee.com/blog/archives/305.html</guid>
		<description><![CDATA[　　前一段把php的session进行了目录分级存放，详情见 http://www.toplee.com/blog/300.html ，总的来说效果不错，不过却在使用phpMyAdmin时遇到点小问题。 　　首先是phpMyAdmin页面显示错位，然后是页面间_GET和_POST参数都不能正常传递，因为最近还修改了服务器上的一些别的配置，花了很长时间才定位到是session的问题，在phpMyAdmin的libraries/common.lib.php文件中进行debug，发现在session验证的地方总是出错，于是怀疑到php的session故障，不过由于其他应用中使用session都没有问题，应该是phpMyAdmin处理session方面的问题，打开 libraries/session.inc.php，可以看到一些处理session的ini设置项，在适当位置加入下面一行代码，问题得到解决。 ini_set('session.save_path',&#34;your_session_save_path&#34;); 　　由此可以引出一些通用的问题，就是如果在php代码里面改变了ini中session的设置项，则一些关键的项都需要重新设定，php.ini中原来定义的设置就不会继续生效了，今后需要多加注意。]]></description>
			<content:encoded><![CDATA[<p>　　前一段把php的session进行了目录分级存放，详情见 <a href="http://www.toplee.com/blog/archives/300.html">http://www.toplee.com/blog/300.html</a> ，总的来说效果不错，不过却在使用phpMyAdmin时遇到点小问题。</p>
<p>　　首先是phpMyAdmin页面显示错位，然后是页面间_GET和_POST参数都不能正常传递，因为最近还修改了服务器上的一些别的配置，花了很长时间才定位到是session的问题，在phpMyAdmin的libraries/common.lib.php文件中进行debug，发现在session验证的地方总是出错，于是怀疑到php的session故障，不过由于其他应用中使用session都没有问题，应该是phpMyAdmin处理session方面的问题，打开 libraries/session.inc.php，可以看到一些处理session的ini设置项，在适当位置加入下面一行代码，问题得到解决。</p>
<div class="hl-surround"><div class="hl-main"><span style="color: Blue;">ini_set</span><span style="color: Olive;">(</span><span style="color: #8b0000;">'</span><span style="color: Red;">session.save_path</span><span style="color: #8b0000;">'</span><span style="color: Gray;">,</span><span style="color: #8b0000;">&quot;</span><span style="color: Red;">your_session_save_path</span><span style="color: #8b0000;">&quot;</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></div></div>
<p>　　由此可以引出一些通用的问题，就是如果在php代码里面改变了ini中session的设置项，则一些关键的项都需要重新设定，php.ini中原来定义的设置就不会继续生效了，今后需要多加注意。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.toplee.com/blog/305.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
