<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.phpq.net/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.phpq.net" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/phpq" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 15 Jul 2009 15:51:14 GMT</lastBuildDate><title>PHP资讯</title><description>PHPQ致力于分享PHP，做PHP中文资讯第一站点。</description><link>http://phpq.net/</link><copyright>Copyright(C) PHP资讯</copyright><pubDate>Wed, 15 Jul 2009 17:33:39 GMT</pubDate><image><title>PHP资讯</title><url>http://phpq.net/MooPHP/Moo-templates/images/logo.gif</url><link>http://phpq.net/</link></image><item><title>使用php实现简单的滑动菜单</title><link>http://phpq.net/tutorial/php-simple-slidemenu.html</link><description>php实现的简单滑动菜单&lt;br /&gt;
滑动菜单是一种较常用的菜单形式，在罗列二级分类的场合下广泛使用。其特点是代码量极小，数据描述简洁。&lt;br /&gt;
本例使用无线表格，以类的书写方式表述。&lt;br /&gt;
本代码如下：&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code&quot;&gt;&amp;lt;style&amp;gt;&lt;br /&gt;
table {font-size = 9pt}&lt;br /&gt;
td {height = 20px}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;menus&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;view&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;script for=pad event=onclick&amp;gt;&lt;br /&gt;
// 大类节点点击响应&lt;br /&gt;
for(var i=1;i&amp;lt;this.parentElement.rows.length;i+=2)&lt;br /&gt;
　this.parentElement.rows[i].style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
this.parentElement.rows[this.rowIndex+1].style.display='block';&lt;br /&gt;
view.innerHTML = this.v1 +&amp;quot;:&amp;quot;+ this.v2; // 根据大小类自行构造相应动作&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script for=bar event=onclick&amp;gt;&lt;br /&gt;
// 小类节点点击响应&lt;br /&gt;
view.innerHTML = this.v1 +&amp;quot;:&amp;quot;+ this.v2; // 根据大小类自行构造相应动作&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* 产生菜单的html代码串&lt;br /&gt;
* 入口参数为菜单默认打开的大类号&lt;br /&gt;
*/&lt;br /&gt;
function menu(n) {&lt;br /&gt;
　　this.ar = new Array(&lt;br /&gt;
　　/**&lt;br /&gt;
　　 * 参数数组&lt;br /&gt;
　　 * 列1：大类&lt;br /&gt;
　　 * 列2：小类&lt;br /&gt;
　　 * 列3：标题&lt;br /&gt;
　　 */&lt;br /&gt;
　　new Array(1,0,&amp;quot;大类一&amp;quot;),&lt;br /&gt;
　　new Array(1,1,&amp;quot;小类一&amp;quot;),&lt;br /&gt;
　　new Array(1,2,&amp;quot;小类二&amp;quot;),&lt;br /&gt;
　　new Array(2,0,&amp;quot;大类二&amp;quot;),&lt;br /&gt;
　　new Array(2,1,&amp;quot;小类一&amp;quot;),&lt;br /&gt;
　　new Array(2,2,&amp;quot;小类二&amp;quot;),&lt;br /&gt;
　　new Array(2,3,&amp;quot;小类三&amp;quot;),&lt;br /&gt;
　　new Array(3,0,&amp;quot;大类三&amp;quot;),&lt;br /&gt;
　　new Array(3,1,&amp;quot;小类一&amp;quot;),&lt;br /&gt;
　　new Array(3,2,&amp;quot;小类二&amp;quot;),&lt;br /&gt;
　　new Array(4,0,&amp;quot;大类四&amp;quot;),&lt;br /&gt;
　　new Array(4,1,&amp;quot;小类一&amp;quot;),&lt;br /&gt;
　　new Array(4,2,&amp;quot;小类二&amp;quot;),&lt;br /&gt;
　　new Array(4,3,&amp;quot;小类三&amp;quot;)&lt;br /&gt;
　　);&lt;br /&gt;
　　this.width =120;&lt;br /&gt;
　　this.bgcolor = &amp;quot;#f0f0f0&amp;quot;;&lt;br /&gt;
　　this.bordercolorlight = &amp;quot;#c0c0c0&amp;quot;;&lt;br /&gt;
　　this.bordercolordark = &amp;quot;#FFFFFF&amp;quot;;&lt;br /&gt;
　　this.tr_bgcolor = &amp;quot;#d0d0d0&amp;quot;;&lt;br /&gt;
　　var s = &amp;quot;&amp;lt;table border=1 align=center width=&amp;quot;+this.width+&amp;quot; bgcolor=&amp;quot;+this.bgcolor+&amp;quot; bordercolorlight=&amp;quot;+this.bordercolorlight+&amp;quot; bordercolordark=&amp;quot;+this.bordercolordark+&amp;quot; CELLPADDING=0 CELLSPACING=0&amp;gt;&amp;quot;&lt;br /&gt;
　　for(var i=0;i&amp;lt;this.ar.length;i++) { // 构造菜单的html结构，其中将大小类编号作为自定义参数，以便事件响应时使用。&lt;br /&gt;
　　　　if(this.ar[i][1] == 0) {&lt;br /&gt;
　　　　　　if(i &amp;gt; 0)&lt;br /&gt;
　　　　　　　　s += &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
　　　　　　var vk = this.ar[i][0]==n?&amp;quot;block&amp;quot;:&amp;quot;none&amp;quot;;&lt;br /&gt;
　　　　　　s += &amp;quot;&amp;lt;tr id='pad' bgcolor=&amp;quot;+this.tr_bgcolor+&amp;quot; v1=&amp;quot;+this.ar[i][0]+&amp;quot; v2=&amp;quot;+this.ar[i][1]+&amp;quot;&amp;gt;&amp;lt;td align=center&amp;gt;&amp;quot;+this.ar[i][2]+&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr style='display:&amp;quot;+vk+&amp;quot;'&amp;gt;&amp;lt;td&amp;gt;&amp;lt;table width=100%&amp;gt;&amp;quot;;&lt;br /&gt;
　　　　}else&lt;br /&gt;
　　　　　　s += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td id='bar' v1=&amp;quot;+this.ar[i][0]+&amp;quot; v2=&amp;quot;+this.ar[i][1]+&amp;quot;&amp;gt;&amp;quot;+this.ar[i][2]+&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
　　}&lt;br /&gt;
　　s += &amp;quot;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;quot;;&lt;br /&gt;
　　return s;&lt;br /&gt;
}&lt;br /&gt;
/*** 创建菜单 ***/&lt;br /&gt;
menus.innerHTML = menu(4);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/245777677/phpq/feedsky/s.gif?r=http://phpq.net/tutorial/php-simple-slidemenu.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777677/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777677/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP教程</category><pubDate>Wed, 15 Jul 2009 23:51:14 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/tutorial/php-simple-slidemenu.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/tutorial/php-simple-slidemenu.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777677/5181872</fs:itemid></item><item><title>脱离Sun，MySQL将采用新的开发和发布模式</title><link>http://phpq.net/mysql/left-sun-mysql-new-method.html</link><description>MySQL项目团队的开发者对外公布了一种新的软件版本发布模式，这意味着现有的开发模式在MySQL 6.0版本中将不会被采用。&lt;br /&gt;
&lt;br /&gt;
新的开发模式有以下几种特点：&lt;br /&gt;
&lt;br /&gt;
1. 主要版本(trunk)至少要达到beta水平。&lt;br /&gt;
2. 一个Milestone版本从beta水平开始开发，由一个主要版本(trunk)和分支版本(stage tree)融合而成。&lt;br /&gt;
3. Milestone版本至少要达到RC质量，每三到六个月发布一次。&lt;br /&gt;
4. 在milestone版本之间允许从分支版本中获取新的特性并添加。&lt;br /&gt;
5. 每12个月到18个月发布一个通用版本--GA(General Availability)。&lt;br /&gt;
6. 同时对两个版本提供支持。&lt;br /&gt;
&lt;br /&gt;
在这种开发模式下，内部代号为Azalea的MySQL 5.4版本会带有MySQL 6.0的许多重要特性&lt;img src=&quot;http://www1.feedsky.com/t1/245777678/phpq/feedsky/s.gif?r=http://phpq.net/mysql/left-sun-mysql-new-method.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777678/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777678/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>MySQL</category><pubDate>Wed, 15 Jul 2009 22:34:35 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/mysql/left-sun-mysql-new-method.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/mysql/left-sun-mysql-new-method.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777678/5181872</fs:itemid></item><item><title>PHP5.3新特性之语言特性</title><link>http://phpq.net/research/php5.3-features.html</link><description>新的语言特性&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) __DIR__&lt;br /&gt;
&lt;br /&gt;
* 引入 __DIR__ magic常量 定位脚本的目录&lt;br /&gt;
&lt;br /&gt;
echo dirname(__FILE__); // &amp;lt; PHP 5.3&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
/* vs */&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
echo __DIR__; // &amp;gt;= 5.3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) ?:&amp;nbsp;&amp;nbsp;操作符&lt;br /&gt;
* 允许从2个值的or/and表达式快速的获取一个非空的值&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
$a = true ?: false; // true;&lt;br /&gt;
$a = false ?: true; // true;&lt;br /&gt;
$a = &amp;quot;&amp;quot; ?: 1; // 1&lt;br /&gt;
$a = 0 ?: 2; // 2&lt;br /&gt;
$a = array() ?: array(1); // array(1);&lt;br /&gt;
$a = strlen(&amp;quot;&amp;quot;) ?: strlen(&amp;quot;a&amp;quot;); // 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) __callStatic()&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
* 等价于 __call() , 但它是为调用静态方法准备的&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class helper&lt;br /&gt;
{&lt;br /&gt;
static function __callStatic($name, $args){&lt;br /&gt;
echo $name.'('.implode(',' $args).')';&lt;br /&gt;
}&amp;nbsp; &amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
helper::test(&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;); // test(foo,bar);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// 动态的函数/方法调用有点慢...&lt;br /&gt;
 &lt;br /&gt;
 4) 动态的调用静态方法&lt;br /&gt;
 &lt;br /&gt;
* php 现在允许 动态的调用静态的方法&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class helper&lt;br /&gt;
{&lt;br /&gt;
static function foo(){&lt;br /&gt;
echo __METHOD__;`&lt;br /&gt;
}&amp;nbsp; &amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
$a = &amp;quot;helper&amp;quot;;&lt;br /&gt;
$b = &amp;quot;foo&amp;quot;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
$a::$b(); // helper::foo&lt;br /&gt;
&lt;br /&gt;
// 动态的函数/方法调用有点慢...&lt;br /&gt;
&lt;br /&gt;
5) 延迟静态绑定&lt;br /&gt;
&lt;br /&gt;
* 静态处理从编译时延迟到执行时&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class A&lt;br /&gt;
{&lt;br /&gt;
public static function whoami(){&lt;br /&gt;
echo __CLASS__;&amp;nbsp; &amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
public static function identity(){&lt;br /&gt;
self::whoami();&amp;nbsp; &amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class B extends A&lt;br /&gt;
{&lt;br /&gt;
public static function whoami(){&lt;br /&gt;
echo __CLASS__;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
B::identity(); // A &amp;lt;-- php &amp;lt; 5.3&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class A&lt;br /&gt;
{&lt;br /&gt;
public static function whoami(){&lt;br /&gt;
echo __CLASS__;&amp;nbsp; &amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
public static function identity(){&lt;br /&gt;
static::whoami();&amp;nbsp; &amp;nbsp;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class B extends A&lt;br /&gt;
{&lt;br /&gt;
public static function whoami(){&lt;br /&gt;
echo __CLASS__;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
B::identity(); // B &amp;lt;-- php &amp;gt;= 5.3&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
* 小心使用操作码缓存，没有向后兼容&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6) MySQLInd&lt;br /&gt;
&lt;br /&gt;
* 特殊的，高速的专门为PHP设计的MySQL调用库接口&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 更好的性能&lt;br /&gt;
* 内存的使用优化&lt;br /&gt;
* 内置的驱动(不是适应性的再次扩展)&lt;br /&gt;
* Many future options due to tight integration with PHP&lt;br /&gt;
* 目前还没有PDO_MySQL 支持 mysql(i) only for now&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7) INI Magic&lt;br /&gt;
&lt;br /&gt;
* CGI/FastCGI 支持&amp;quot;.htaccess&amp;quot; 形式的INI控制&lt;br /&gt;
* 用户可以自己设定每个目录的INI在php.ini中通过[PATH=/var/www/domain.com]设定&lt;br /&gt;
* 优化错误处理&lt;br /&gt;
* 允许用户使用INI变量和常量任何定义的INI文件中&lt;br /&gt;
* 其他几个小的优化&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
用户自定义的php.ini(.htaccess) 文件名. 默认为&amp;quot;.user.ini&amp;quot;&lt;br /&gt;
user_ini.filename = &amp;quot;.user.ini&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
禁止这个特性 设置这个选项为空值&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
用户自定义php.ini 的缓存失效期(time-to-live) 秒数. 默认is 300s (5分钟)&lt;br /&gt;
user_ini.cache_ttl = 300s&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
[PATH=/var/www/domain.com]&lt;br /&gt;
variables_order = GPC&lt;br /&gt;
safe_mode = 1&lt;br /&gt;
&lt;br /&gt;
[my varibles]&lt;br /&gt;
somevar = &amp;quot;1234&amp;quot;&lt;br /&gt;
anothervar = ${somevar}; anothervar == somevar&lt;br /&gt;
&lt;br /&gt;
[ini arrays]&lt;br /&gt;
foo[bar] = 1&lt;br /&gt;
foo[123] = 2&lt;br /&gt;
foo[] = 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8) 扩展的 OpenSSL 函数&lt;br /&gt;
&lt;br /&gt;
* 使用 OpenSSL Digest 函数&lt;br /&gt;
&lt;br /&gt;
foreach (openssl_get_md_methods() as $d) {// MD4, MD5, SHA512... (12 all in all)&lt;br /&gt;
echo $d. &amp;quot; - &amp;quot;. openssl_digest(&amp;quot;foo&amp;quot;, &amp;quot;md5&amp;quot;); // acbd18db4cc2f85cedef654fccc4a4d8&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
* 使用 OpenSSL 加密函数&lt;br /&gt;
&lt;br /&gt;
// BF-CBC, AES-256 CFB1... (54 all in all)&lt;br /&gt;
foreach(openssl_get_cipher_methods() as $v) {&lt;br /&gt;
$val = openssl_encrypt(&amp;quot;value&amp;quot;, $v, &amp;quot;secret&amp;quot;);&lt;br /&gt;
openssl_decrypt($val, $v, &amp;quot;secret&amp;quot;); // value&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 扩展的 openssl_pkey_new() 和 openssl_pkey_get_details()&lt;br /&gt;
函数 允许访问 内部的 DSA, RSA 和 DH 密匙.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其目标在PHP中实现一个简单的OpenId&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 9) SPL(Standard PHP Library) 优化&lt;br /&gt;
&lt;br /&gt;
* 优化嵌套的目录迭代次数由文件系统迭代&lt;br /&gt;
&lt;br /&gt;
* 引入 GlobIterator&lt;br /&gt;
&lt;br /&gt;
* 各种各样的数据结构类: 双链表, 堆栈, 队列, 堆, 小型堆, 大型堆, 优先级队列&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* 其他的很绕口的一些特征&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10) 时间处理进行扩展了和添加&lt;br /&gt;
&lt;br /&gt;
* 可控制的 strtotime() 由 date_create_from_format()实现&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
$date = strtotime(&amp;quot;08-01-07 00:00:00&amp;quot;);&lt;br /&gt;
var_dump(date(&amp;quot;Y-m-d&amp;quot;, $date)); // string(10) &amp;quot;2008-01-07&amp;quot;&lt;br /&gt;
$date = date_create_from_format(&amp;quot;m-d-y&amp;quot;, &amp;quot;08-01-07&amp;quot;);&lt;br /&gt;
var_dump($date-&amp;gt;format('Y-m-d')); // string(10) &amp;quot;2007-08-01&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* 添加了 date_get_last_errors(),并且返回时间语法分析的错误和警告&lt;br /&gt;
array(4) {&lt;br /&gt;
[&amp;quot;warning_count&amp;quot;] =&amp;gt; int(0)&lt;br /&gt;
[&amp;quot;warnings&amp;quot;] =&amp;gt; array(0) { }&lt;br /&gt;
[&amp;quot;error_count&amp;quot;] =&amp;gt; int(2)&lt;br /&gt;
[&amp;quot;errors&amp;quot;]=&amp;gt;&lt;br /&gt;
array(2) {&lt;br /&gt;
[2]=&amp;gt; string(40) &amp;quot;The separation symbol could not be found&amp;quot;&lt;br /&gt;
[6]=&amp;gt; string(13) &amp;quot;Trailing data&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 11) getopt() 优化&lt;br /&gt;
&lt;br /&gt;
* 影响 Windows 平台&lt;br /&gt;
&lt;br /&gt;
* 本地的执行不依赖于本地getopt()实现.&lt;br /&gt;
&lt;br /&gt;
* 跨平台支持长选项 (--option)&lt;br /&gt;
// input: --a=foo --b --c&lt;br /&gt;
var_dump(getopt(&amp;quot;&amp;quot;, array(&amp;quot;a:&amp;quot;,&amp;quot;b::&amp;quot;,&amp;quot;c&amp;quot;)));&lt;br /&gt;
/* output: array(3) {&lt;br /&gt;
[&amp;quot;a&amp;quot;]=&amp;gt;&lt;br /&gt;
string(3) &amp;quot;foo&amp;quot;&lt;br /&gt;
[&amp;quot;b&amp;quot;]=&amp;gt;&lt;br /&gt;
bool(false)&lt;br /&gt;
[&amp;quot;c&amp;quot;]=&amp;gt;&lt;br /&gt;
bool(false)&lt;br /&gt;
} */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 12) XSLT Profiling&lt;br /&gt;
* 引入 Xslt Profiling 通过 setProfiling()实现&lt;br /&gt;
&lt;br /&gt;
$xslt = new xsltprocessor();&lt;br /&gt;
$xslt-&amp;gt;importStylesheet($xml);&lt;br /&gt;
$xslt-&amp;gt;setProfiling(&amp;quot;/tmp/profile.txt&amp;quot;);&lt;br /&gt;
$xslt-&amp;gt;transformToXml($dom);&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
Resulting In:&lt;br /&gt;
number match name mode Calls Tot 100us Avg&lt;br /&gt;
0 date 5 58&amp;nbsp; &amp;nbsp;11&lt;br /&gt;
Total 5 58&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 13) E_DEPRECATED 标记&lt;br /&gt;
* 怎么样将一个php发行为一个没有错误的模式? 废弃&lt;br /&gt;
&lt;br /&gt;
* E_DEPRECATED用来指定废弃的功能，或许未来的版本中会消除。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 14) 垃圾回收器&lt;br /&gt;
* 为复杂和长时间运行脚本的执行结束周期释放内存的清理&lt;br /&gt;
 &lt;br /&gt;
gc_enable(); // 允许垃圾回收&lt;br /&gt;
var_dump(gc_enabled()); // true&lt;br /&gt;
var_dump(gc_collect_cycles()); // 某个元素的清理&lt;br /&gt;
gc_disable(); // 禁止垃圾回收&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
 15) NOWDOC&lt;br /&gt;
* 一个 HEREDOC 不再进行转译&lt;br /&gt;
&lt;br /&gt;
HEREDOC&lt;br /&gt;
$foo = &amp;lt;&amp;lt;&amp;lt;ONE&lt;br /&gt;
this is $fubar&lt;br /&gt;
ONE;&lt;br /&gt;
/* string(10) &amp;quot;this is&amp;quot; */&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
NOWDOC&lt;br /&gt;
$bar = &amp;lt;&amp;lt;&amp;lt;‘TWO’&lt;br /&gt;
this is $fubar&lt;br /&gt;
TWO;&lt;br /&gt;
/* string(16) &amp;quot;this is $fubar&amp;quot; */&lt;img src=&quot;http://www1.feedsky.com/t1/245777679/phpq/feedsky/s.gif?r=http://phpq.net/research/php5.3-features.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777679/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777679/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP研究</category><pubDate>Wed, 01 Jul 2009 15:24:42 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/research/php5.3-features.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/research/php5.3-features.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777679/5181872</fs:itemid></item><item><title>PHP5.3新特性之改进的性能</title><link>http://phpq.net/research/php5.3-performance.html</link><description>改进的性能&lt;br /&gt;
* md5() 速度提高了大概10-15%&lt;br /&gt;
* 引擎中更好的堆栈实现&lt;br /&gt;
* 常量移到只读内存区&lt;br /&gt;
* 改进Exception处理(更简单 &amp;amp; 更少的代码)&lt;br /&gt;
* 调用 (require/include)_once 去掉了使用open(2)(linux下的c函数)&lt;br /&gt;
* 使用gcc4编译的二进制更小更快&lt;br /&gt;
&lt;br /&gt;
整体性能提高 5-15%&lt;br /&gt;
&lt;br /&gt;
* SQLite 升级到 3.5.6&lt;br /&gt;
* 40 多个bug 被修复&lt;br /&gt;
* CGI/FastCGI SAPI 优化&lt;br /&gt;
* 各种流的优化&lt;br /&gt;
* 未来更多的优化&lt;img src=&quot;http://www1.feedsky.com/t1/245777680/phpq/feedsky/s.gif?r=http://phpq.net/research/php5.3-performance.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777680/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777680/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP研究</category><pubDate>Wed, 01 Jul 2009 15:06:50 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/research/php5.3-performance.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/research/php5.3-performance.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777680/5181872</fs:itemid></item><item><title>PHP5.3新特性之命名空间</title><link>http://phpq.net/research/php5.3-namespaces.html</link><description>命名空间(Namespaces)&lt;br /&gt;
&lt;br /&gt;
* PHP5.3最大的新功能&lt;br /&gt;
* 完全支持名字空间特征&lt;br /&gt;
* 大部分的功能的执行在编译时&lt;br /&gt;
* 简化命名惯例&lt;br /&gt;
&lt;br /&gt;
1) 更清晰的代码&lt;br /&gt;
&lt;br /&gt;
不使用 Namespaces&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code1&quot;&gt;function MY_wrapper() {}&lt;br /&gt;
class MY_DB {}&lt;br /&gt;
define('MY_COMM_STR', '');&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
MY_wrapper();&lt;br /&gt;
new MY_DB();&lt;br /&gt;
MY_COMM_STR;&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;2) 使用 Namespaces&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code2&quot;&gt;namespace MY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
function wrapper() {}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class DB { }&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
const CONN_STR = '';&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
use MY AS MY;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
wrapper();&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
new DB();&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
CONN_STR;&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;3) 一个文件中多个名字空间&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code3&quot;&gt;namespace LIB;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class MYSQL {}&lt;br /&gt;
class SQLite {}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
$b = new SQLite(;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
namespace LIB_EXTRA;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class MScrypt {}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
$a new MScrypt();&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
var_dump(&lt;br /&gt;
get_class($a),&lt;br /&gt;
get_class($b)&lt;br /&gt;
};&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
// result:&lt;br /&gt;
// string(18) &amp;quot;LIB_EXTRA::MScrypt&amp;quot;&lt;br /&gt;
// string(11) &amp;quot;LIB::SQLite&amp;quot;&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;4) 名字空间的层级&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code4&quot;&gt;namespace foo;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
function strlen($foo) { return htmlspecialchars($foo); }&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
echo strlen(&amp;quot;test&amp;quot;); // test&lt;br /&gt;
echo ::strlen(&amp;quot;test&amp;quot;) // 4&lt;br /&gt;
echo namespace::strlen(&amp;quot;test&amp;quot;); // test&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;* function, class 和 constant 引用在一个名字空间中首先指向这个名字空间, 其次才是一个全局的范围&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) 名字空间 &amp;amp; 自动引入&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code5&quot;&gt;function __autoload($var) { var_dump($var); } // LIB::foo&lt;br /&gt;
require &amp;quot;./ns.php&amp;quot;;&lt;br /&gt;
/**&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 namespace LIB;&lt;br /&gt;
 new foo();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
*/&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;* __autoload() 将处理为和名字空间的类名一起。&lt;br /&gt;
* autoload 仅在 class 不在名字空间和全局范围内存在时触发。&lt;br /&gt;
* __autoload() 声明在一个名字空间中将不别调用！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6) 其他的名字空间的语法技巧&lt;div class=&quot;blockcode&quot;&gt;&lt;code id=&quot;code6&quot;&gt;namespace really::long::pointlessly::verbose::ns;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
__NAMESPACE__; // 当前的名字空间名称&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
class a {}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
get_class( new a() ); // really::long::pointlessly::verbose::ns::abs&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
use really::long::pointlessly::verbose::ns::a AS b; // 从一个名字空间引用class&lt;/code&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/245777681/phpq/feedsky/s.gif?r=http://phpq.net/research/php5.3-namespaces.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777681/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777681/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP研究</category><pubDate>Wed, 01 Jul 2009 15:03:07 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/research/php5.3-namespaces.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/research/php5.3-namespaces.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777681/5181872</fs:itemid></item><item><title>浅谈如何将Oracle导出到XML文件</title><link>http://phpq.net/oracle/oracle-export-xml.html</link><description>以下操作在Oracle9i、10g版本成功&lt;br /&gt;
&lt;strong&gt;步骤一：创建存放XML文件的目录对象&lt;/strong&gt;&lt;br /&gt;
&lt;table cellspacing=&quot;0&quot; class=&quot;t_table&quot; style=&quot;width:400px&quot;&gt;&lt;tr&gt;&lt;td&gt;SQL&amp;gt;createorreplacedirectoryexp_diras'/opt';/&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;--注意此目录要有oracle用户的写权限&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;步骤二：创建过程生成xml文件的主过程&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellspacing=&quot;0&quot; class=&quot;t_table&quot; style=&quot;width:400px&quot;&gt;&lt;tr&gt;&lt;td&gt;SQL&amp;gt;createorreplaceproceduretable2xml(result&amp;nbsp;&amp;nbsp;inoutnocopyclob,&lt;br /&gt;
filenameinvarchar2)is&lt;br /&gt;
xmlstr varchar2(32767);&lt;br /&gt;
line&amp;nbsp; &amp;nbsp;varchar2(2000);&lt;br /&gt;
fhandle utl_file.file_type;&lt;br /&gt;
begin&lt;br /&gt;
fhandle := utl_file.fopen('EXP_DIR', filename,'w');&lt;br /&gt;
xmlstr := dbms_lob.substr(result,32767);&lt;br /&gt;
loop&lt;br /&gt;
exitwhenxmlstrisnull;&lt;br /&gt;
line := substr(xmlstr,1, instr(xmlstr, chr(10)) -1);&lt;br /&gt;
dbms_output.put_line('| '|| line);&lt;br /&gt;
utl_file.put_line(fhandle, line);&lt;br /&gt;
xmlstr := substr(xmlstr, instr(xmlstr, chr(10)) +1);&lt;br /&gt;
endloop;&lt;br /&gt;
utl_file.fclose(fhandle);&lt;br /&gt;
end;&lt;br /&gt;
/&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;strong&gt;步骤三：调用此过程&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table cellspacing=&quot;0&quot; class=&quot;t_table&quot; style=&quot;width:400px&quot;&gt;&lt;tr&gt;&lt;td&gt;declare&lt;br /&gt;
queryctx dbms_xmlquery.ctxType;&lt;br /&gt;
result&amp;nbsp;&amp;nbsp;clob;&lt;br /&gt;
begin&lt;br /&gt;
queryctx := dbms_xmlquery.newContext('select user_id,user_name from lq_xml_test');--存放查询记录集的SQL&lt;br /&gt;
result&amp;nbsp;&amp;nbsp;:= dbms_xmlquery.getXML(queryctx);&lt;br /&gt;
table2xml(result,'table2xml.xml');&lt;br /&gt;
dbms_xmlquery.closeContext(queryctx);&lt;br /&gt;
end;&lt;br /&gt;
/&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777682/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777682/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Oracle</category><pubDate>Wed, 15 Apr 2009 08:59:59 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/oracle/oracle-export-xml.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/oracle/oracle-export-xml.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777682/5181872</fs:itemid></item><item><title>phpMyAdmin 3.1.3.2</title><link>http://phpq.net/news/phpmyadmin-3.1.3.2.html</link><description>可以管理整个MySQL服务器(需要超级用户)，也可以管理单个数据库。为了实现后一种，你将需要合理设置MySQL用户，他只能对允许的数据库进行读/写。那要等到你看过MySQL手册中相关的部分。&lt;br /&gt;
&lt;br /&gt;
Welcome to phpMyAdmin 3.1.3.2, a security-fix version&lt;br /&gt;
Welcome to the first release candidate for phpMyAdmin 3.1.4, a bugfix-only version&lt;br /&gt;
&lt;br /&gt;
下载:&lt;a href=&quot;http://downloads.sourceforge.net/phpmyadmin/phpMyAdmin-3.1.3.2-all-languages.zip&quot; target=&quot;_blank&quot;&gt;phpMyAdmin 3.1.3.2&lt;/a&gt;&lt;br /&gt;
下载:&lt;a href=&quot;http://downloads.sourceforge.net/phpmyadmin/phpMyAdmin-3.1.4-rc1-all-languages.zip&quot; target=&quot;_blank&quot;&gt;phpMyAdmin 3.1.4 RC1&lt;/a&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777683/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777683/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP新闻</category><pubDate>Wed, 15 Apr 2009 08:54:52 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/news/phpmyadmin-3.1.3.2.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/news/phpmyadmin-3.1.3.2.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777683/5181872</fs:itemid></item><item><title>Discuz! 的主动缓存和被动缓存</title><link>http://phpq.net/application/discuz-cache.html</link><description>Discuz!的缓存同样分了主动缓存和被动缓存。从功能上来说，主动缓存一般用到管理员对全站的设置，等等需要手动更新的地方，这些地方的数据都有一个特点，那就是它们的更新可能性很小，平时不需要自动更新；Discuz!的被动缓存，一般分布在诸如帖子内容显示，用户信息更新这些地方，这些地方的更新基本上都是因为用户使用了某一特定的功能时所激发的。&lt;br /&gt;
&lt;br /&gt;
在正常运行的Discuz!系统文件夹里面会有一个forumdata文件夹，这个是论坛记录和缓存文件的存放目录，一般这些文件都是自动生成的，在forumdata/cache/里面存储的都是一些Discuz!的基本设置和一些常使用的值，这些值一般在系统初始化的时候就保存在$_DCACHE全局变量中，在后面的操作中将可以简单地使用它们进行功能上的判断。&lt;br /&gt;
&lt;br /&gt;
（1）主动缓存，也就是只在用户操作后台时，由Discuz!系统去删除原有缓存进行更新的缓存。它们普遍存在于forumdata/cache/目录中，比如说/forumdata/cache/cache_settings.php保存了整个系统的核心设置，一般情况是不会更新的，只有后台修改了比如站点名称等关键信息的时候才会去主动更新这个缓存文件。还有用于保存用户组和管理员组相关信息的两类缓存文件：&lt;br /&gt;
&lt;br /&gt;
/forumdata/cache/usergroup_’.intval($groupid).’.php&lt;br /&gt;
&lt;br /&gt;
/forumdata/cache/admingroup_’.intval($adminid).’.php&lt;br /&gt;
&lt;br /&gt;
另外还有在index、forumdisplay、viewthread、post、blog、topicadmin、register、archiver几个模块中的时候分别会使用的cache_’模块名‘.php的缓存。在include/common.inc.php中的流程可以看到，这些类似的主动缓存都有一个特点：统一进行引用（include），最后进行失败检测，最后再对失败的缓存（比如说文件丢失或者是上次更新还没生成这样的情况下）统一进行重新生成的操作，具体的生成方法见/include/cache.func.php中的updatecache函数。&lt;br /&gt;
&lt;br /&gt;
（2）被动缓存，也就是缓存的生成并非是由用户手动更新的，而是在系统里判断是否需要生成缓存，需要缓存多长时间，由系统自身来完成整个过程。很典型的代表有帖子内容的缓存生成过程。帖子内容的缓存路径被cache_setting.php里定义为一个可以由用户修改的值，默认是在forumdata/threadcaches下，由viewthread.php里的逻辑可以看到，当满足使用缓存条件的时候（一般情况是第一页的内容），系统会执行viewthread_loadcache函数，此函数会判断缓存是否过期，如果不过期就执行函数中间读取缓存的操作，最后Discuz!直接巧妙地在函数中die出一段javaScript，结束访问。专研Discuz!代码的你可能会很疑惑，究竟是什么时候生成的缓存呢？include文件夹里有一个global.func.php，这个文件包括了整个Discuz!系统使用到的全局方法，其中有一个叫output的函数，在函数里判断了是否可以缓存当前的页面，并且使用ob_get_contents函数直接缓存页面。&lt;br /&gt;
&lt;br /&gt;
提示：ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo ，输出都将被加入缓冲区中，直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器，由浏览器来解析显示。函数ob_end_clean 会清除缓冲区的内容，并将缓冲区关闭，但不会输出内容。此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。这样的话， 能将在执行ob_end_clean()前把内容保存到一个变量中，然后在ob_end_clean()后面对这个变量做操作。&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777684/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777684/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP应用</category><pubDate>Mon, 13 Apr 2009 22:55:57 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/application/discuz-cache.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/application/discuz-cache.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777684/5181872</fs:itemid></item><item><title>PHP 5.3.0 RC1 正式发布</title><link>http://phpq.net/news/php-v5.3.0.html</link><description>PHP开发小组宣布发布PHP最新的小版本 5.3.0的第一个beta版本。&lt;br /&gt;
&lt;br /&gt;
官方文档中已经说明了一些新的特性，其它的特性将会在wiki中列出并准备形成文档。很有必要让更多的人共同努力来完成PHP 5.3.0的文档。请同时检查NEWS文件。&lt;br /&gt;
&lt;br /&gt;
这是一个开发中的预发布版本——千万不要将它用于生产环境！发布这该alpha版本的目的是为了鼓励用户不仅要积极参与校验bugs，同样要关注文档中所有新的特性以或者必要的向后兼容性问题。请将所有的发现报告给质量评估邮件列表或bug追踪系统。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;支持命名空间(Name Space)&lt;li&gt;php 5.3的总体性能提升了5 - 15%&lt;li&gt;支持use关键字和别名(NameSpace AS Alias)&lt;li&gt;去掉了msql扩展，同时ereg扩展将不会出现E_DEPRECATED警告了&lt;li&gt;mhash扩展被替换成为hash扩展，但是保留了整个BC&lt;li&gt;PHP现在使用了cc做为默认的编译器，替代了gcc&lt;li&gt;支持intl、phar、fileinfo和sqlite3等扩展&lt;li&gt;可选的循环垃圾收集器&lt;li&gt;可选的替代libmysql的MySQLnd支持&lt;li&gt;不再支持Win2000以前的系统（Windows 98, NT4等等）&lt;li&gt;加入若干新的函数，支持新的语法特性如“NOWDOC”等，限制了“GOTO”和三元运算符“?:”等&lt;li&gt;增强的ini文件支持&lt;/ul&gt;&lt;br /&gt;
下载地址：&lt;a href=&quot;http://downloads.php.net/johannes/php-5.3.0beta1.tar.bz2&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#07519a&quot;&gt;PHP 5.3.0 Beta 1&lt;/font&gt;&lt;/a&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777685/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777685/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>PHP新闻</category><pubDate>Mon, 13 Apr 2009 22:52:52 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/news/php-v5.3.0.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/news/php-v5.3.0.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777685/5181872</fs:itemid></item><item><title>用Apache配置weblogic服务器</title><link>http://phpq.net/apache/apache-weblogic.html</link><description>&lt;strong&gt;Step1:安装weblogic&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
安装上之后，因为回头要测试集成配置是否成功，最好先建议一个domain,然后deploy一个web应用程序。&lt;br /&gt;
&lt;br /&gt;
我的weblogic的第一个domain是testdomain,然后端口号是7001，deploy了一个叫做portal的war.&lt;br /&gt;
&lt;br /&gt;
可以通过&lt;a href=&quot;http://www.phpq.net:7001/portal/index.jsp&quot; target=&quot;_blank&quot;&gt;http://www.phpq.net:7001/portal/index.jsp&lt;/a&gt;访问，显示“HelloWOrld str is&lt;br /&gt;
&lt;br /&gt;
TEST123”的字样。&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Step2:安装apache&lt;/strong&gt;。&lt;br /&gt;
&lt;br /&gt;
编译：编译的时候切记要加上--enable-so这个参数，否则就不能成功的跟weblogic配置在一起了。&lt;br /&gt;
&lt;br /&gt;
如下： 　&lt;br /&gt;
./configure--prefix=/usr/local/apache2--enable-so&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Step3:configure apache&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
a.编辑/usr/local/apache2/conf/httpd.conf&lt;br /&gt;
&lt;br /&gt;
在Listen 80下面一行，加上下面的文字：&lt;br /&gt;
LoadModule weblogic_module modules/mod_wl_20.so&lt;br /&gt;
Include conf/Weblogic.conf&lt;br /&gt;
&lt;br /&gt;
保存文件。 　&lt;br /&gt;
&lt;br /&gt;
b.cp/opt/bea/weblogic81/server/lib/solaris/mod_wl_20.so/&lt;br /&gt;
&lt;br /&gt;
usr/local/apache2/modules/&lt;br /&gt;
&lt;br /&gt;
c.在/usr/local/apache2/conf下面建立一个叫做Weblogic.conf的文件，内容如下： &lt;br /&gt;
&lt;br /&gt;
##### Weblogic.conf file&lt;br /&gt;
WebLogicHost &lt;a href=&quot;http://www.phpq.net&quot; target=&quot;_blank&quot;&gt;www.phpq.net&lt;/a&gt;&lt;br /&gt;
WebLogicPort7001&lt;br /&gt;
MatchExpression*.jsp&lt;br /&gt;
MatchExpression/portal/*&lt;br /&gt;
MatchExpression /fortune/*&lt;br /&gt;
MatchExpression /ClosingTime/*&lt;br /&gt;
MatchExpression /ConfigItem/*&lt;br /&gt;
# MatchExpression *.html&lt;br /&gt;
#MatchExpression *.jpg&lt;br /&gt;
#MatchExpression *.gif&lt;br /&gt;
#MatchExpression *.css&lt;br /&gt;
#MatchExpression *.do&lt;br /&gt;
WLLogFile /tmp/wlproxy.log&lt;br /&gt;
保存文件。&lt;br /&gt;
&lt;br /&gt;
d.重新启动apache.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Step4:测试&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.phpq.net:80/portal/index.jsp&quot; target=&quot;_blank&quot;&gt;http://www.phpq.net:80/portal/index.jsp&lt;/a&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/phpq/245777686/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/phpq/245777686/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Apache</category><pubDate>Tue, 24 Feb 2009 23:57:59 +0800</pubDate><author>kimi</author><guid isPermaLink="false">http://phpq.net/apache/apache-weblogic.html</guid><dc:creator>kimi</dc:creator><fs:srclink>http://phpq.net/apache/apache-weblogic.html</fs:srclink><fs:srcfeed>http://phpq.net/rss/</fs:srcfeed><fs:itemid>feedsky/phpq/~7073585/245777686/5181872</fs:itemid></item></channel></rss>