ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>天堂中文在线视频,911久久香蕉国产线看观看,成人精品在线视频http://www2.blogjava.net/jackstudio/category/12649.htmlzh-cnWed, 28 Feb 2007 19:49:44 GMTWed, 28 Feb 2007 19:49:44 GMT60字符串中的变量调ç”?/title><link>http://www.aygfsteel.com/jackstudio/archive/2006/12/15/87964.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Fri, 15 Dec 2006 07:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackstudio/archive/2006/12/15/87964.html</guid><wfw:comment>http://www.aygfsteel.com/jackstudio/comments/87964.html</wfw:comment><comments>http://www.aygfsteel.com/jackstudio/archive/2006/12/15/87964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackstudio/comments/commentRss/87964.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackstudio/services/trackbacks/87964.html</trackback:ping><description><![CDATA[[PHP][Basic]字符串中的变量调ç”?<br />描述<br />å•å¼•åøP¼šæ— æ³•在单引号中调用到变量倹{€?<br />åŒå¼•åøP¼šå½“用双引åähˆ–者定界符指定字符串时åQŒå…¶ä¸­çš„变量会被解析ã€?<br />如果遇到¾ŸŽå…ƒ½W¦å·åQ?åQ‰ï¼Œè§£æžå™¨ä¼šž®½å¯èƒ½å¤šåœ°å–得后面的字符以组成一个合法的变量名;如果æƒÏx˜Ž½CºæŒ‡å®šåå­—çš„¾l“束åQŒç”¨èŠ±æ‹¬åähŠŠå˜é‡åæ‹¬èµäh¥ã€?<br />复杂åQˆèŠ±æ‹¬å·{}åQ‰è¯­æ³•可以在字符串中包含ä»ÖM½•在名字空间的å€û|¼šä»…仅用和在字½W¦ä¸²ä¹‹å¤–同样的方法写一个表辑ּåQŒç„¶åŽç”¨ { å’?} 把它包含˜q›æ¥ã€?<br />å› äØ“ä¸èƒ½è½¬ä¹‰â€œ{”,花括可‚¯­æ³•ä»…åœ?ç´§è·Ÿåœ?{ 后面时被识别åQˆç”¨â€œ{\$”或者“\{$”来得到一个字面上的“{$”)ã€?<br />花括可‚¯­æ³•同样也可以解析数组索引或者对象属性:对于数组索引åQŒå³æ–ÒŽ‹¬åøP¼ˆ]åQ‰æ ‡å¿—着索引的结束。对象属性则和简单变量适用同样的规则ã€?<br /><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><?</span><span style="COLOR: #000000">php <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">* <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />* description: 字符串中的变量解析示例Â?br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />* @author Sandy Lee <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"> <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> ½Ž€å•变量调用Â?/span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$fruit</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">apple</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">; <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">We have an $food</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=>We have an apple) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">We have some ${food}s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=>We have some apples) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">We have some {$food}s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=>We have some apples) <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />// 数组调用 </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$fruits</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">strawberry</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">red</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">banana</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">yellow</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">); <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is $fruits[banana].</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=>A banana is yellow.) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is {$fruits['banana']}.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=>A banana is yellow.) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is {$fruits[banana]}.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=>A banana is yellow.)        </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A banana is $fruits['banana'].</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> (=> wrong!) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">  <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$arr</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)); <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">arr: {$arr['a']['a2']}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> arr: a-2) <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />// ¾cȝš„调用 </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> foo <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />{ <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$foo</span><span style="COLOR: #000000">; <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> </span><span style="COLOR: #800080">$arr</span><span style="COLOR: #000000">; <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> foo() <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    { <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #800080">$this</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">foo </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">Foo</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">; <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #800080">$this</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">array</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=></span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">b-2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)); <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />    } <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />} <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #800080">$c</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> foo(); <br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">foo: $c->foo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> foo: Foo) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">foo: {$c->foo}s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> foo: Foos) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">echo</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">foo arr: {$c->arr['a']['a2']}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(=> foo arr: a-2) </span><span style="COLOR: #008000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">?></span><span style="COLOR: #000000"><br /><img src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span></div><img src ="http://www.aygfsteel.com/jackstudio/aggbug/87964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackstudio/" target="_blank">jackstudio</a> 2006-12-15 15:52 <a href="http://www.aygfsteel.com/jackstudio/archive/2006/12/15/87964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP截取中文字符ä¸ÔŒ¼ŒUTF-8、GBKhttp://www.aygfsteel.com/jackstudio/archive/2006/12/10/86638.htmljackstudiojackstudioSat, 09 Dec 2006 21:11:00 GMThttp://www.aygfsteel.com/jackstudio/archive/2006/12/10/86638.htmlhttp://www.aygfsteel.com/jackstudio/comments/86638.htmlhttp://www.aygfsteel.com/jackstudio/archive/2006/12/10/86638.html#Feedback0http://www.aygfsteel.com/jackstudio/comments/commentRss/86638.htmlhttp://www.aygfsteel.com/jackstudio/services/trackbacks/86638.html    $tmpstr = "";
    $strlen = $start + $len;
    for($i = 0; $i < $strlen; $i++) {
        if(ord(substr($str, $i, 1)) > 0xa0) {
            $tmpstr .= substr($str, $i, 2);
            $i++;
        } else
            $tmpstr .= substr($str, $i, 1);
    }
    return $tmpstr;
}

]]>
PHP˜qžæŽ¥MySQL出现ä¹Þq çš„一些个人看æ³?/title><link>http://www.aygfsteel.com/jackstudio/archive/2006/12/10/86637.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Sat, 09 Dec 2006 21:08:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackstudio/archive/2006/12/10/86637.html</guid><wfw:comment>http://www.aygfsteel.com/jackstudio/comments/86637.html</wfw:comment><comments>http://www.aygfsteel.com/jackstudio/archive/2006/12/10/86637.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackstudio/comments/commentRss/86637.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackstudio/services/trackbacks/86637.html</trackback:ping><description><![CDATA[ <table height="30" cellspacing="0" cellpadding="0" width="98%" align="center" border="0"> <tbody> <tr> <td class="hjj22">转蝲åQ?a >http://www.52net.com/html/2006/0428/63042.html</a><br />作者:不祥<br /><br /><br />PHP˜qžæŽ¥MySQL的过½E‹ä¸­å¦‚果出现ä¹Þq å¾ˆå¤šäºÞZ¼šè¯ß_¼Œç”?Set names '??'"ž®Þpƒ½è§£å†³é—®é¢˜åQŒä½†å¾ˆå¤šæ—¶å€™è¿˜æ˜¯ä¼šå‡ºçŽ°å„ç§æ€ªçŽ°è±¡ï¼Œæ¯”å¦‚è¯´é¡µé¢èƒ½æ­£å¸¸å­˜å–åQŒä½†æ˜¯phpmyadmin不能正常存取½{‰çŽ°è±¡ã€‚å°å¼Ÿç»˜q‡éªŒè¯ï¼Œäº§ç”Ÿäº†ä¸€äº›ä¸ªäººçœ‹æ³•,‹Æ¢è¿Žå¤§å®¶è®¨è®ºå’ŒæŒ‡æ­£ã€?br /><br />MySQL数据库操作过½E‹ä¸­å‡ºçŽ°äº†ä¸‰¿Uå­—½W¦é›†åQ?br />1、页面字½W¦é›†åQˆä¹Ÿž®±æ˜¯ content="TEXT/HTML; CHARSET=GBK"åQ?br />2、连接字½W¦é›†åQˆä¹Ÿž®±æ˜¯ "Set names 'GBK'"åQ?br />3、字ŒDµå­—½W¦é›†åQˆæ— è®ºæ˜¯åº“还是表的字½W¦é›†åQŒå°†æœ€¾lˆåæ˜ åˆ°å­—段上)<br />一、实验:<br />1、情况一<br />数据库字ŒDµå­—½W¦é›†åQšutf-8<br />˜qžæŽ¥å­—符集:没有昑ּè®„¡½®åQŒé»˜è®¤äØ“latin1<br />™åµé¢å­—符集:gbk<br /><br />存入˜q‡ç¨‹åQ?br />1)™åµé¢ç”¨GBK表示的SQL向服务器提交存入è¯äh±‚åQ?br />2)默认情况下(不用Set Names '??'åQ‰æœåŠ¡å™¨ç”¨latin1打开˜qžæŽ¥åQ?br />3)æœåŠ¡å™¨è¯¯è®¤äØ“å½“å‰çš„SQL语句是用latin1表示的;<br />4)服务器将GBK字符当作latin1字符åQŒé”™è¯¯çš„˜qç”¨â€œlatin1转UTF-8函数”将字符转换后存入UTF-8字段中;<br />5)åQ?错误的latin1(其实是GBK) => 错误的UTF-8åQ?br />6)如果用phpmyadmin打开该表åQˆç”¨utf8˜qžæŽ¥åQ‰å°†ä¼šçœ‹åˆ°è¯¥å­—段ä¸ÞZؕ码;<br /><br />è¯Õd–˜q‡ç¨‹åQ?br />1)默认情况下(不用Set Names '??'åQ‰æœåŠ¡å™¨ç”¨latin1打开˜qžæŽ¥åQ?br />2)服务器将UTF-8å­—æ®µä¸­çš„å€ÆD{æ¢äØ“latin1˜q”回¾l™å®¢æˆïL«¯åQ?br />3)åQˆé”™è¯¯çš„UTF-8 => 错误的latin1(其实是GBK)åQ‰è¯¥˜q‡ç¨‹ä¸ºå­˜å…¥è¿‡½E?的逆过½E‹ã€‚(刚好错错得对了)<br />4)ž®†æœåŠ¡å™¨è¯¯è®¤ä¸ºæ˜¯latin1çš„GBK¾~–码按页面字½W¦é›†æ­£å¸¸æ˜„¡¤ºåQ?br /><br />用示意图来表½Cºå°±æ˜¯ï¼š<br /><br /><!--c1--><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   存入˜q‡ç¨‹åQ?br />   ----------------------<br />   ™åµé¢    ˜qžæŽ¥     存储<br />   ----------------------<br />   GBK => latin1 => utf-8<br />          ---------------<br />   ------------- |<br />         |       +------- 该过½E‹å¾—到的utf-8是一串不知所云的ä¹Þq åQŒä½†MySQLå›ºæ‰§çš„è®¤ä¸ø™¿™ä¸²ç ä¸ºUTF-8<br />         |<br />         +------ MySQLž®†GBK误认为是latin1<br /><br />   è¯Õd–˜q‡ç¨‹åQ?br />   ----------------------<br />   ™åµé¢    ˜qžæŽ¥     存储<br />   ----------------------<br />   GBK <= latin1 <= utf-8<br />          ---------------<br />   ------------- |<br />         |       +------- 正是˜q™ä¸²ä¹Þq ¾lè¿‡é€†è¿‡½E‹è{换回正确的GBK¾~–码åQŒåªæ˜¯MySQLè®¤äØ“æ˜¯latin1而已<br />         |<br />         +------ MySQLž®†è¯¯è®¤äؓ是latin1çš„GBK¾~–码传回了页面,刚好得到正确的编码ã€?!--c2--></td></tr></tbody></table><span id="wmqeeuq" class="postcolor"><!--ec2-->2、情况二<br />数据库字ŒDµå­—½W¦é›†åQšutf-8<br />˜qžæŽ¥å­—符集:gbk<br />™åµé¢å­—符集:gbk<br /><br />文字描述略ã€?br /><br /><br />½Cºæ„å›?<br /><br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   存入˜q‡ç¨‹åQ?br />   ----------------------<br />   ™åµé¢   ˜qžæŽ¥   存储<br />   ----------------------<br />   GBK => GBK => utf-8<br />          ------------<br />   ------------- |<br />         |       +------- 该过½E‹å¾—到的utf-8是由GBK转换而来的,是正¼‹®çš„utf-8¾~–码<br />         |<br />         +------ ™åµé¢å­—符集等于连接字½W¦é›†åQŒMySQLè®¤äØ“™åµé¢ä¼ é€’给它的是GBK¾~–码åQŒå®ƒçš„æƒ³æ³•正好符合事实ã€?br /><br /><br />   è¯Õd–˜q‡ç¨‹åQ?br />   ----------------------<br />   ™åµé¢   ˜qžæŽ¥   存储<br />   ----------------------<br />   GBK <= GBK <= utf-8<br />              ---------------<br />   ------------- |<br />         |       +------- 用“utf-8转GBK函数”将正确的utf-8¾~–码转换回GBK<br />         |<br />         +------ ™åµé¢å­—符集等于连接字½W¦é›†åQŒæ˜¾½Cºæ²¡æœ‰ä“Q何问题ã€?!--c2--></td></tr></tbody></table><span id="wmqeeuq" class="postcolor"><!--ec2--><br />3、情况三<br />数据库字ŒDµå­—½W¦é›†åQšgbk<br />˜qžæŽ¥å­—符集:没有昑ּè®„¡½®åQŒé»˜è®¤äØ“latin1<br />™åµé¢å­—符集:gbk<br /><br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   存入˜q‡ç¨‹åQ?br />   ----------------------<br />   ™åµé¢   ˜qžæŽ¥   存储<br />   ----------------------<br />   GBK => latin1 => GBK<br />          ------------<br />   ------------- |<br />         |       +------- 字符被“latin1转GBK函数”è{换的成了ä¹Þq åQŒä½†MySQLè®¤äØ“å®ƒæ˜¯GBKåQŒæ‰€ä»¥å·¥å…äh— æ³•正常显½Cºã€?br />         |<br />         +------ MySQLè®¤äØ“™åµé¢ä¼ é€’给它的是latin1¾~–码åQŒå®ƒž®†åœ¨åŽç®‹˜q‡ç¨‹ä¸­ç”»è›‡æ·»­‘›_œ°ž®†æ­£¼‹®çš„GBK转换ä¸ÞZؕ码ã€?br /><br /><br />   è¯Õd–˜q‡ç¨‹åQ?br />   ----------------------<br />   ™åµé¢   ˜qžæŽ¥   存储<br />   ----------------------<br />   GBK <= latin1 <= GBK<br />          ---------------<br />   ------------- |<br />         |       +------- “GBK转latin1函数”将ä¹Þq è½¬æ¢ä¸ºGBKåQŒä½†MySQL却认为它们是latin1<br />         |<br />         +------ 错误的latin1¾~–码其实是正¼‹®çš„GBK¾~–码åQŒé¡µé¢æ˜¾½Cºæ­£å¸¸ï¼Œä½†å·¥å…äh˜¾½CÞZ¸æ­£å¸¸ã€?!--c2--></td></tr></tbody></table><span id="wmqeeuq" class="postcolor"><!--ec2--><br /><br />二、字½W¦é›†ä¹‹é—´çš„è{æ?br />½W”者试着ž®†GBK字符误当作latin1转换为错误的utf-8能成功,逆过½E‹ä¸­ž®†äؕ码è{换回latin1得到的刚好是正确的GBK<br /><br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   $str = "中文‹¹‹è¯•";<br />   $str_tran = iconv('latin1', 'utf-8', $str);<br />   echo $str_tran; // 昄¡¤ºä¹Þq åQŒæ—¢ä¸æ˜¯GBK也不是utf-8å’Œlatin1<br /><br /><br />   echo "<br>-----------<br>";<br /><br /><br />   $str_re_tran = iconv('utf-8', 'latin1', $str_tran);<br />   echo $str_re_tran;  // 昄¡¤º “中文测试â€?!--c2--></td></tr></tbody></table><span id="wmqeeuq" class="postcolor"><!--ec2--><br /><br />而将GBK字符误当作utf-8转换为错误的GBK¾~–码则出现错è¯?br /><!--c1--></span><table cellspacing="1" cellpadding="3" width="95%" align="center" border="0"><tbody><tr><td><strong>CODE</strong></td></tr><tr><td id="CODE"><!--ec1-->   $str = "中文‹¹‹è¯•";<br />   #$str_tran = iconv('utf-8', 'gbk', $str);    // 错误åQï¼åQ?!--c2--></td></tr></tbody></table><span id="wmqeeuq" class="postcolor"><!--ec2--><br /><br />可见一¿Uç¼–码是否能被当作另一¿Uç¼–码被转换为第三种¾~–码åQŒå–决于¾~–码的固有属性,上面我们丄¡š„½W¬ä¸€ä¸ªä¾‹å­åªæ˜¯ç¢°å·§GBK¾~–码能被误当作latin1被è{æ¢äØ“utf-8。如果是如下情况åQŒåˆ™æ•°æ®åº“肯定不能正常存取数据ã€?br />GBK => utf-8 => GBKåQˆæœªå®žéªŒåQ?br />三、结è®?br />™åµé¢èƒ½æ­£å¸¸å­˜å–但phpmyadmin不能正常存取åQŒä»Žä¸¥æ ¼æ„ä¹‰ä¸Šæ¥è¯´åº”该是一¿Ué”™è¯¯ï¼Œ™åµé¢æ˜¯å¦èƒ½æ­£å¸¸å­˜å–取决于˜qžæŽ¥å­—符集是否能正常的被转换为存储字½W¦é›†ã€?br />要保证页面能正常存取åQŒåÆˆä¸”å·¥å…·ä¹Ÿèƒ½æ­£å¸æ€‹É用,一般保持页面字½W¦é›†½{‰äºŽæˆ–兼容连接字½W¦é›†ž®±å¯ä»¥äº†ã€?/span></td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/jackstudio/aggbug/86637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackstudio/" target="_blank">jackstudio</a> 2006-12-10 05:08 <a href="http://www.aygfsteel.com/jackstudio/archive/2006/12/10/86637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分页¾c?调用很简å? ........http://www.aygfsteel.com/jackstudio/archive/2006/10/26/77425.htmljackstudiojackstudioThu, 26 Oct 2006 08:27:00 GMThttp://www.aygfsteel.com/jackstudio/archive/2006/10/26/77425.htmlhttp://www.aygfsteel.com/jackstudio/comments/77425.htmlhttp://www.aygfsteel.com/jackstudio/archive/2006/10/26/77425.html#Feedback0http://www.aygfsteel.com/jackstudio/comments/commentRss/77425.htmlhttp://www.aygfsteel.com/jackstudio/services/trackbacks/77425.html   1 < %    2 ...  é˜…读全文

]]>
smarty的程序设计部åˆ?/title><link>http://www.aygfsteel.com/jackstudio/archive/2006/09/05/67864.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Tue, 05 Sep 2006 10:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackstudio/archive/2006/09/05/67864.html</guid><wfw:comment>http://www.aygfsteel.com/jackstudio/comments/67864.html</wfw:comment><comments>http://www.aygfsteel.com/jackstudio/archive/2006/09/05/67864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackstudio/comments/commentRss/67864.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackstudio/services/trackbacks/67864.html</trackback:ping><description><![CDATA[ <font color="#0000bb">smarty的程序设计部分:</font> <p> <font color="#0000bb">在smarty的模板设计部分我½Ž€å•的把smarty在模板中的一些常用设¾|®åšäº†ç®€å•的介绍åQŒè¿™ä¸€èŠ‚ä¸»è¦æ¥ä»‹ç»ä¸€ä¸‹å¦‚ä½•åœ¨smarty中开始我们程</font> </p> <p> <font color="#0000bb">序设计ã€?/font> </p> <font color="#0000bb"> <p> <br />PHP代码: <br />    首先来介¾lä¸€ä¸‹åœ¨ä¸Šä¸€èŠ‚ä¸­æˆ‘ä»¬ä½¿ç”¨çš„è¿‡çš?phpæ–‡äšgä¸­çš„ä¸€äº›å…ƒç´ ã€‚åŒæ øP¼Œæˆ‘们拿上一节中最开始的那个index.phpæ–‡äšg来说明一下: <br />     <br />   ================================================ <br />     index.php <br />   ================================================ <br />   <?php <br />     /********************************************* <br />      * <br />      * æ–‡äšg名: index.php <br />      * 作Â?用: 昄¡¤ºå®žä¾‹½E‹åº <br />      * <br />      * 作Â?者: 大师å…?<br />      * EmailåQšÂ?<a href="mailto:teacherli@163.com"><font color="#0066a7">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      include_once("./comm/Smarty.class.php"); //包含smarty¾cÀL–‡ä»?</p> <p>      $smarty = new Smarty();  //建立smarty实例对象$smarty <br />      $smarty->templates("./templates"); //讄¡½®æ¨¡æ¿ç›®å½• <br />      $smarty->templates_c("./templates_c"); //讄¡½®¾~–译目录 </p> <p> <br />      //****大家注意åQŒè¿™é‡Œæˆ‘是我新加入的****// <br />      $smarty->cache("./cache"); //讄¡½®¾~“存目录 <br />      $smarty->cache_lifetime = 60 * 60 * 24;  //讄¡½®¾~“存旉™—´ <br />      $smarty->caching = true;      //讄¡½®¾~“存方式 <br />       <br />      //---------------------------------------------------- <br />      //左右边界½W¦ï¼Œé»˜è®¤ä¸º{}åQŒä½†å®žé™…应用当中å®ÒŽ˜“与JavaScript <br />      //相冲½Hï¼Œæ‰€ä»¥å¾è®®è®¾æˆ?lt;{}>或其它ã€?<br />      //---------------------------------------------------- <br />      $smarty->left_delimiter = "<{"; <br />      $smarty->right_delimiter = "}>"; </p> <p>      $smarty->assign("name", "李晓å†?); //˜q›è¡Œæ¨¡æ¿å˜é‡æ›¿æ¢ <br />       <br />      //¾~–译òq¶æ˜¾½CÞZ½äº?/templates下的index.tpl模板 <br />      $smarty->display("index.tpl"); <br />   ?> <br />        <br />       我们可以看到åQŒsmarty的程序部分实际就是符合php语言规范的一¾l„代码,我们依次来解释一下: <br />         1ã€?**/语句åQ?<br />            åŒ…å«çš„éƒ¨åˆ†äØ“½E‹åº½‹‡å¤´æ³¨é‡Šã€‚主要的内容应该为对½E‹åºçš„作用,版权与作者及¾~–写旉™—´åšä¸€ä¸ªç®€å•的介绍åQŒè¿™åœ¨smarty中不是必 </p> <p>需的,但从½E‹åºçš„风格来è®ÔŒ¼Œ˜q™æ˜¯ä¸€ä¸ªå¥½çš„风根{€?<br />     <br />     2。include_once语句åQ?<br />        它将安装到网站的smartyæ–‡äšg包含到当前文件中åQŒæ³¨æ„åŒ…含的路径一定要写正¼‹®ã€?</p> <p>     3ã€?smarty = new Smarty(): <br />        ˜q™ä¸€å¥æ–°å»ÞZ¸€ä¸ªSmarty对象$smarty,½Ž€å•的一个对象的实例化ã€?</p> <p>     4ã€?smarty->templates(""): <br />            ˜q™ä¸€å¥æŒ‡æ˜?smarty对象使用tpl模板时的路径åQŒå®ƒæ˜¯ä¸€ä¸ªç›®å½•,在没有这一句时åQŒSmarty默认的模板èµ\å¾„äØ“å½“å‰ç›®å½•çš„templates </p> <p>目录åQŒå®žé™…在写程序时åQŒæˆ‘们要ž®†è¿™ä¸€å¥å†™æ˜Žï¼Œ˜q™ä¹Ÿæ˜¯ä¸€¿Uå¥½çš„程序风根{€?<br />     5ã€?smarty->templates_c(""): <br />        ˜q™ä¸€å¥æŒ‡æ˜?smarty对象˜q›è¡Œ¾~–译时的目录。在模板设计½‹‡æˆ‘们已¾lçŸ¥é“Smarty是一¿Uç¼–译型模板语言åQŒè€Œè¿™ä¸ªç›®å½•,ž®±æ˜¯å®ƒç¼–è¯?</p> <p>模板的目录,˜q™é‡Œè¦æ³¨æ„ï¼Œå¦‚果站点位于*nix服务器上åQŒè¯·¼‹®ä¿teamplates_c里定义的˜q™ä¸ªç›®å½•å…ähœ‰å¯å†™å¯è¯»æƒé™åQŒé»˜è®¤æƒ…况下它的¾~–译目录 </p> <p>是当前目录下的templates_cåQŒå‡ºäºŽåŒæ ïLš„理由我们ž®†å…¶æ˜Žç¡®çš„写出来ã€?<br />    <br />         6ã€?smarty->left_delimiterä¸?smarty->right_delimiter: <br />        指明在查找模板变量时的左叛_ˆ†å‰²ç¬¦ã€‚默认情况下ä¸?{"ä¸?}"åQŒä½†åœ¨å®žé™…ä¸­å› äØ“æˆ‘ä»¬è¦åœ¨æ¨¡æ¿ä¸­ä‹Éç”?lt;script>,Script中的函数å®?</p> <p>义难免会使用{}åQŒè™½ç„¶å®ƒæœ‰è‡ªå·Þqš„解决办法åQŒä½†ä¹ æƒ¯ä¸Šæˆ‘ä»¬å°†å®ƒé‡æ–°å®šä¹‰äØ“"<{"ä¸?}>"或是"<!--{"ä¸?}-->"或其它标志符åQŒæ³¨æ„ï¼Œå¦‚果在这é‡?</p> <p>定义了左叛_ˆ†å‰²ç¬¦åŽï¼Œåœ¨æ¨¡æ¿æ–‡ä»¶ä¸­ç›¸åº”的要使每一个变量ä‹Éç”¨ä¸Žå®šä¹‰ç›¸åŒçš„ç¬¦åøP¼Œä¾‹å¦‚åœ¨è¿™é‡ŒæŒ‡å®šäØ“"<{"ä¸?}>"åQŒtpl模板中也要相应的ž®?</p> <p>{$name}变成<{$name}>,˜q™æ ·½E‹åºæ‰å¯ä»¥æ­£¼‹®çš„æ‰‘Öˆ°æ¨¡æ¿å˜é‡ã€?<br />     </p> <p>     7ã€?smarty->cache("./cache"): <br />        告诉Smarty输出的模板文件缓存的位置。上一½‹‡æˆ‘们知道Smarty最大的优点在于它可以缓存,˜q™é‡Œž®±æ˜¯è®„¡½®¾~“存的目录。默认情 </p> <p>况下为当前目录下的cache目录åQŒä¸Žtemplates_c目录相当åQŒåœ¨*nix¾pȝ»Ÿä¸­æˆ‘们要¼‹®ä¿å®ƒçš„可读可写性ã€?<br />     <br />     8. $smarty->cache_lifetime = 60 * 60 * 24: <br />         <br />        ˜q™é‡Œž®†ä»¥¿U’äØ“å•ä½˜q›è¡Œè®¡ç®—¾~“存有效的时间。第一‹Æ¡ç¼“存时间到期时当Smartyçš„caching变量讄¡½®ä¸ºtrue时缓存将被重建。当它的 </p> <p>取å€égØ“-1时表½Cºå¾ç«‹è“v的缓存从不过期,ä¸?时表½Cºåœ¨½E‹åºæ¯æ¬¡æ‰§è¡Œæ—¶ç¼“å­˜æ€ÀL˜¯è¢«é‡æ–°å¾ç«‹ã€‚上面的讄¡½®è¡¨ç¤ºž®†cache_lifetime讄¡½®ä¸ÞZ¸€å¤©ã€?</p> <p>     9. $smarty->caching = 1: <br />        ˜q™ä¸ªå±žæ€§å‘Šè¯‰Smarty是否要进行缓存以及缓存的方式。它可以å?个å€û|¼Œ0åQšSmarty默认å€û|¼Œè¡¨ç¤ºä¸å¯¹æ¨¡æ¿˜q›è¡Œ¾~“å­˜åQ?åQšè¡¨½C?</p> <p>Smartyž®†ä‹É用当前定义的cache_lifetime来决定是否结束cacheåQ?åQšè¡¨½CºSmartyž®†ä‹É用在cache被徏立时使用cache_lifetime˜q™ä¸ªå€¹{€‚习惯上ä½?</p> <p>用true与false来表½Cºæ˜¯å¦è¿›è¡Œç¼“å­˜ã€?</p> <p>     10. $smarty->assign("name", "李晓å†?)åQ?<br />        è¯¥æ•°çš„åŽŸåž‹äØ“assign(string varname, mixed var),varname为模板中使用的模板变量,var指出要将模板变量替换的变量名åQ›å…¶ </p> <p>½W¬äºŒ¿UåŽŸå½¢äØ“assign(mixed var),我们要在后面的例子详¾l†çš„讲解˜q™ä¸ªæˆå‘˜å‡½æ•°çš„ä‹É用方法,assign是Smarty的核心函æ•îC¹‹ä¸€åQŒæ‰€æœ‰å¯¹æ¨¡æ¿å?</p> <p>量的替换都要使用它ã€?</p> <p>     11. $smarty->display("index.tpl"): <br />         è¯¥å‡½æ•°åŽŸå½¢äØ“display(string varname),作用为显½CÞZ¸€ä¸ªæ¨¡æÑ€‚简单的è®ÔŒ¼Œå®ƒå°†åˆ†æžå¤„理˜q‡çš„æ¨¡æ¿æ˜„¡¤ºå‡ºæ¥åQŒè¿™é‡Œçš„æ¨¡æ¿æ–‡äšgä¸?</p> <p>用加路径åQŒåªè¦ä‹É用一个文件名ž®±å¯ä»¥äº†åQŒå®ƒè·¯å¾„我们已经åœ?smarty->templates(string path)中定义过了ã€?</p> <p>       ½E‹åºæ‰§è¡Œå®ŒåŽæˆ‘们可以打开当前目录下的templates_c与cache目录åQŒå°±ä¼šå‘现在下边多出一äº?%的目录,˜q™äº›ç›®å½•ž®±æ˜¯Smarty的编译与 </p> <p>¾~“存目录åQŒå®ƒç”Þq¨‹åºè‡ªåŠ¨ç”Ÿæˆï¼Œä¸è¦ç›´æŽ¥å¯¹è¿™äº›ç”Ÿæˆçš„æ–‡äšg˜q›è¡Œä¿®æ”¹ã€?<br />       以上我简单的把Smarty½E‹åºä¸­çš„一些常用的基本元素介绍了一下,在后边的例子中你可以看到ž®†å®ƒä»¬å°†è¢«å¤š‹Æ¡çš„使用ã€?<br />     <br />     <br />    接下来介¾lä¸€ä¸ªsection循环块与foreach循环块,本来它应该属于模杉Kƒ¨åˆ†ï¼Œä½†æ˜¯ç”׃ºŽå®ƒä»¬æ˜¯smarty的精华所在,而且与smarty½E‹åºè®¾è®¡ </p> <p>部分联系非常紧密åQŒæ‰€ä»¥å°±åœ¨æœ¬èŠ‚å•ç‹¬æ‹¿å‡ºæ¥è®²ä¸€ä¸‹ã€?</p> <p>   1. foreachåQšç”¨äºŽåó@环简单数¾l„,它是一个选择性的section循环åQŒå®ƒçš„å®šä¹‰æ ¼å¼äØ“: <br />     <br />    {foreach from=$array item=array_id} <br />    {foreachelse} <br />    {/foreach} <br />    其中åQŒfrom 指出要åó@环的数组变量åQŒitem䏸™¦å¾ªçŽ¯çš„å˜é‡å¿UŽÍ¼Œå¾ªçޝ‹Æ¡æ•°ç”±from所指定的数¾l„变量的个数所军_®šã€‚{foreachelse}用来å½?</p> <p>½E‹åºä¸­ä¼ é€’过来的数组为空时的处理åQŒä¸‹é¢æ˜¯ä¸€ä¸ªç®€å•的例子åQ?<br />  =========================================== <br />    example6.tpl <br />  =========================================== <br />  <html> <br />    <head><title>˜q™æ˜¯ä¸€ä¸ªforeach使用的例å­?lt;/title></head> <br />    <body> <br />       ˜q™é‡Œž®†è¾“å‡ÞZ¸€ä¸ªæ•°¾l„:<br> <br />       {foreach from=$newsArray item=newsID} <br />         æ–°é—»¾~–号åQš{$newsID}<br> <br />     新闻内容åQš{$newsTitle}<br><hr> <br />       {foreachelse} <br />         å¯¹ä¸èµøP¼Œæ•°æ®åº“中没有新闻输出åQ?<br />       {/foreach} <br />    </body> <br />  </html> </p> <p>  ========================================== <br />  example6.php <br />  ========================================== <br />六。smarty的程序设计部分:</p> <p>在smarty的模板设计部分我½Ž€å•的把smarty在模板中的一些常用设¾|®åšäº†ç®€å•的介绍åQŒè¿™ä¸€èŠ‚ä¸»è¦æ¥ä»‹ç»ä¸€ä¸‹å¦‚ä½•åœ¨smarty中开始我们程</p> <p>序设计ã€?/p> <p> <br />PHP代码: <br />    首先来介¾lä¸€ä¸‹åœ¨ä¸Šä¸€èŠ‚ä¸­æˆ‘ä»¬ä½¿ç”¨çš„è¿‡çš?phpæ–‡äšgä¸­çš„ä¸€äº›å…ƒç´ ã€‚åŒæ øP¼Œæˆ‘们拿上一节中最开始的那个index.phpæ–‡äšg来说明一下: <br />     <br />   ================================================ <br />     index.php <br />   ================================================ <br />   <?php <br />     /********************************************* <br />      * <br />      * æ–‡äšg名: index.php <br />      * 作Â?用: 昄¡¤ºå®žä¾‹½E‹åº <br />      * <br />      * 作Â?者: 大师å…?<br />      * EmailåQšÂ?<a href="mailto:teacherli@163.com"><font color="#0066a7">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      include_once("./comm/Smarty.class.php"); //包含smarty¾cÀL–‡ä»?</p> <p>      $smarty = new Smarty();  //建立smarty实例对象$smarty <br />      $smarty->templates("./templates"); //讄¡½®æ¨¡æ¿ç›®å½• <br />      $smarty->templates_c("./templates_c"); //讄¡½®¾~–译目录 </p> <p> <br />      //****大家注意åQŒè¿™é‡Œæˆ‘是我新加入的****// <br />      $smarty->cache("./cache"); //讄¡½®¾~“存目录 <br />      $smarty->cache_lifetime = 60 * 60 * 24;  //讄¡½®¾~“存旉™—´ <br />      $smarty->caching = true;      //讄¡½®¾~“存方式 <br />       <br />      //---------------------------------------------------- <br />      //左右边界½W¦ï¼Œé»˜è®¤ä¸º{}åQŒä½†å®žé™…应用当中å®ÒŽ˜“与JavaScript <br />      //相冲½Hï¼Œæ‰€ä»¥å¾è®®è®¾æˆ?lt;{}>或其它ã€?<br />      //---------------------------------------------------- <br />      $smarty->left_delimiter = "<{"; <br />      $smarty->right_delimiter = "}>"; </p> <p>      $smarty->assign("name", "李晓å†?); //˜q›è¡Œæ¨¡æ¿å˜é‡æ›¿æ¢ <br />       <br />      //¾~–译òq¶æ˜¾½CÞZ½äº?/templates下的index.tpl模板 <br />      $smarty->display("index.tpl"); <br />   ?> <br />        <br />       我们可以看到åQŒsmarty的程序部分实际就是符合php语言规范的一¾l„代码,我们依次来解释一下: <br />         1ã€?**/语句åQ?<br />            åŒ…å«çš„éƒ¨åˆ†äØ“½E‹åº½‹‡å¤´æ³¨é‡Šã€‚主要的内容应该为对½E‹åºçš„作用,版权与作者及¾~–写旉™—´åšä¸€ä¸ªç®€å•的介绍åQŒè¿™åœ¨smarty中不是必 </p> <p>需的,但从½E‹åºçš„风格来è®ÔŒ¼Œ˜q™æ˜¯ä¸€ä¸ªå¥½çš„风根{€?<br />     <br />     2。include_once语句åQ?<br />        它将安装到网站的smartyæ–‡äšg包含到当前文件中åQŒæ³¨æ„åŒ…含的路径一定要写正¼‹®ã€?</p> <p>     3ã€?smarty = new Smarty(): <br />        ˜q™ä¸€å¥æ–°å»ÞZ¸€ä¸ªSmarty对象$smarty,½Ž€å•的一个对象的实例化ã€?</p> <p>     4ã€?smarty->templates(""): <br />            ˜q™ä¸€å¥æŒ‡æ˜?smarty对象使用tpl模板时的路径åQŒå®ƒæ˜¯ä¸€ä¸ªç›®å½•,在没有这一句时åQŒSmarty默认的模板èµ\å¾„äØ“å½“å‰ç›®å½•çš„templates </p> <p>目录åQŒå®žé™…在写程序时åQŒæˆ‘们要ž®†è¿™ä¸€å¥å†™æ˜Žï¼Œ˜q™ä¹Ÿæ˜¯ä¸€¿Uå¥½çš„程序风根{€?<br />     5ã€?smarty->templates_c(""): <br />        ˜q™ä¸€å¥æŒ‡æ˜?smarty对象˜q›è¡Œ¾~–译时的目录。在模板设计½‹‡æˆ‘们已¾lçŸ¥é“Smarty是一¿Uç¼–译型模板语言åQŒè€Œè¿™ä¸ªç›®å½•,ž®±æ˜¯å®ƒç¼–è¯?</p> <p>模板的目录,˜q™é‡Œè¦æ³¨æ„ï¼Œå¦‚果站点位于*nix服务器上åQŒè¯·¼‹®ä¿teamplates_c里定义的˜q™ä¸ªç›®å½•å…ähœ‰å¯å†™å¯è¯»æƒé™åQŒé»˜è®¤æƒ…况下它的¾~–译目录 </p> <p>是当前目录下的templates_cåQŒå‡ºäºŽåŒæ ïLš„理由我们ž®†å…¶æ˜Žç¡®çš„写出来ã€?<br />    <br />         6ã€?smarty->left_delimiterä¸?smarty->right_delimiter: <br />        指明在查找模板变量时的左叛_ˆ†å‰²ç¬¦ã€‚默认情况下ä¸?{"ä¸?}"åQŒä½†åœ¨å®žé™…ä¸­å› äØ“æˆ‘ä»¬è¦åœ¨æ¨¡æ¿ä¸­ä‹Éç”?lt;script>,Script中的函数å®?</p> <p>义难免会使用{}åQŒè™½ç„¶å®ƒæœ‰è‡ªå·Þqš„解决办法åQŒä½†ä¹ æƒ¯ä¸Šæˆ‘ä»¬å°†å®ƒé‡æ–°å®šä¹‰äØ“"<{"ä¸?}>"或是"<!--{"ä¸?}-->"或其它标志符åQŒæ³¨æ„ï¼Œå¦‚果在这é‡?</p> <p>定义了左叛_ˆ†å‰²ç¬¦åŽï¼Œåœ¨æ¨¡æ¿æ–‡ä»¶ä¸­ç›¸åº”的要使每一个变量ä‹Éç”¨ä¸Žå®šä¹‰ç›¸åŒçš„ç¬¦åøP¼Œä¾‹å¦‚åœ¨è¿™é‡ŒæŒ‡å®šäØ“"<{"ä¸?}>"åQŒtpl模板中也要相应的ž®?</p> <p>{$name}变成<{$name}>,˜q™æ ·½E‹åºæ‰å¯ä»¥æ­£¼‹®çš„æ‰‘Öˆ°æ¨¡æ¿å˜é‡ã€?<br />     </p> <p>     7ã€?smarty->cache("./cache"): <br />        告诉Smarty输出的模板文件缓存的位置。上一½‹‡æˆ‘们知道Smarty最大的优点在于它可以缓存,˜q™é‡Œž®±æ˜¯è®„¡½®¾~“存的目录。默认情 </p> <p>况下为当前目录下的cache目录åQŒä¸Žtemplates_c目录相当åQŒåœ¨*nix¾pȝ»Ÿä¸­æˆ‘们要¼‹®ä¿å®ƒçš„可读可写性ã€?<br />     <br />     8. $smarty->cache_lifetime = 60 * 60 * 24: <br />         <br />        ˜q™é‡Œž®†ä»¥¿U’äØ“å•ä½˜q›è¡Œè®¡ç®—¾~“存有效的时间。第一‹Æ¡ç¼“存时间到期时当Smartyçš„caching变量讄¡½®ä¸ºtrue时缓存将被重建。当它的 </p> <p>取å€égØ“-1时表½Cºå¾ç«‹è“v的缓存从不过期,ä¸?时表½Cºåœ¨½E‹åºæ¯æ¬¡æ‰§è¡Œæ—¶ç¼“å­˜æ€ÀL˜¯è¢«é‡æ–°å¾ç«‹ã€‚上面的讄¡½®è¡¨ç¤ºž®†cache_lifetime讄¡½®ä¸ÞZ¸€å¤©ã€?</p> <p>     9. $smarty->caching = 1: <br />        ˜q™ä¸ªå±žæ€§å‘Šè¯‰Smarty是否要进行缓存以及缓存的方式。它可以å?个å€û|¼Œ0åQšSmarty默认å€û|¼Œè¡¨ç¤ºä¸å¯¹æ¨¡æ¿˜q›è¡Œ¾~“å­˜åQ?åQšè¡¨½C?</p> <p>Smartyž®†ä‹É用当前定义的cache_lifetime来决定是否结束cacheåQ?åQšè¡¨½CºSmartyž®†ä‹É用在cache被徏立时使用cache_lifetime˜q™ä¸ªå€¹{€‚习惯上ä½?</p> <p>用true与false来表½Cºæ˜¯å¦è¿›è¡Œç¼“å­˜ã€?</p> <p>     10. $smarty->assign("name", "李晓å†?)åQ?<br />        è¯¥æ•°çš„åŽŸåž‹äØ“assign(string varname, mixed var),varname为模板中使用的模板变量,var指出要将模板变量替换的变量名åQ›å…¶ </p> <p>½W¬äºŒ¿UåŽŸå½¢äØ“assign(mixed var),我们要在后面的例子详¾l†çš„讲解˜q™ä¸ªæˆå‘˜å‡½æ•°çš„ä‹É用方法,assign是Smarty的核心函æ•îC¹‹ä¸€åQŒæ‰€æœ‰å¯¹æ¨¡æ¿å?</p> <p>量的替换都要使用它ã€?</p> <p>     11. $smarty->display("index.tpl"): <br />         è¯¥å‡½æ•°åŽŸå½¢äØ“display(string varname),作用为显½CÞZ¸€ä¸ªæ¨¡æÑ€‚简单的è®ÔŒ¼Œå®ƒå°†åˆ†æžå¤„理˜q‡çš„æ¨¡æ¿æ˜„¡¤ºå‡ºæ¥åQŒè¿™é‡Œçš„æ¨¡æ¿æ–‡äšgä¸?</p> <p>用加路径åQŒåªè¦ä‹É用一个文件名ž®±å¯ä»¥äº†åQŒå®ƒè·¯å¾„我们已经åœ?smarty->templates(string path)中定义过了ã€?</p> <p>       ½E‹åºæ‰§è¡Œå®ŒåŽæˆ‘们可以打开当前目录下的templates_c与cache目录åQŒå°±ä¼šå‘现在下边多出一äº?%的目录,˜q™äº›ç›®å½•ž®±æ˜¯Smarty的编译与 </p> <p>¾~“存目录åQŒå®ƒç”Þq¨‹åºè‡ªåŠ¨ç”Ÿæˆï¼Œä¸è¦ç›´æŽ¥å¯¹è¿™äº›ç”Ÿæˆçš„æ–‡äšg˜q›è¡Œä¿®æ”¹ã€?<br />       以上我简单的把Smarty½E‹åºä¸­çš„一些常用的基本元素介绍了一下,在后边的例子中你可以看到ž®†å®ƒä»¬å°†è¢«å¤š‹Æ¡çš„使用ã€?<br />     <br />     <br />    接下来介¾lä¸€ä¸ªsection循环块与foreach循环块,本来它应该属于模杉Kƒ¨åˆ†ï¼Œä½†æ˜¯ç”׃ºŽå®ƒä»¬æ˜¯smarty的精华所在,而且与smarty½E‹åºè®¾è®¡ </p> <p>部分联系非常紧密åQŒæ‰€ä»¥å°±åœ¨æœ¬èŠ‚å•ç‹¬æ‹¿å‡ºæ¥è®²ä¸€ä¸‹ã€?</p> <p>   1. foreachåQšç”¨äºŽåó@环简单数¾l„,它是一个选择性的section循环åQŒå®ƒçš„å®šä¹‰æ ¼å¼äØ“: <br />     <br />    {foreach from=$array item=array_id} <br />    {foreachelse} <br />    {/foreach} <br />    其中åQŒfrom 指出要åó@环的数组变量åQŒitem䏸™¦å¾ªçŽ¯çš„å˜é‡å¿UŽÍ¼Œå¾ªçޝ‹Æ¡æ•°ç”±from所指定的数¾l„变量的个数所军_®šã€‚{foreachelse}用来å½?</p> <p>½E‹åºä¸­ä¼ é€’过来的数组为空时的处理åQŒä¸‹é¢æ˜¯ä¸€ä¸ªç®€å•的例子åQ?<br />  =========================================== <br />    example6.tpl <br />  =========================================== <br />  <html> <br />    <head><title>˜q™æ˜¯ä¸€ä¸ªforeach使用的例å­?lt;/title></head> <br />    <body> <br />       ˜q™é‡Œž®†è¾“å‡ÞZ¸€ä¸ªæ•°¾l„:<br> <br />       {foreach from=$newsArray item=newsID} <br />         æ–°é—»¾~–号åQš{$newsID}<br> <br />     新闻内容åQš{$newsTitle}<br><hr> <br />       {foreachelse} <br />         å¯¹ä¸èµøP¼Œæ•°æ®åº“中没有新闻输出åQ?<br />       {/foreach} <br />    </body> <br />  </html> </p> <p>  ========================================== <br />  example6.php <br />  ========================================== </p> <p>  <?php <br /><br />     </p> </font> <font color="#ff8000">/********************************************* <br />      * <br />      * æ–‡äšg名: example6.php <br />      * 作  用åQ?昄¡¤ºå®žä¾‹½E‹åº2 <br />      * <br />      * 作  者: 大师å…?<br />      * EmailåQšÂ Â?a href="mailto:teacherli@163.com"><font color="#000080">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      </font> <font color="#007700">include_once(</font> <font color="#dd0000">"./comm/Smarty.class.php"</font> <font color="#007700">); <br /><br />      </font> <font color="#0000bb">$smarty </font> <font color="#007700">= new </font> <font color="#0000bb">Smarty</font> <font color="#007700">();   <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">templates</font> <font color="#007700">(</font> <font color="#dd0000">"./templates"</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">templates_c</font> <font color="#007700">(</font> <font color="#dd0000">"./templates_c"</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">cache</font> <font color="#007700">(</font> <font color="#dd0000">"./cache"</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">cache_lifetime  </font> <font color="#007700">= </font> <font color="#0000bb">0</font> <font color="#007700">; <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">caching         </font> <font color="#007700">= </font> <font color="#0000bb">true</font> <font color="#007700">; <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">left_delimiter  </font> <font color="#007700">= </font> <font color="#dd0000">"{"</font> <font color="#007700">; <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">right_delimiter </font> <font color="#007700">= </font> <font color="#dd0000">"}"</font> <font color="#007700">; <br />       <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">1</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"½W?条新é—?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">2</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"½W?条新é—?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">3</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"½W?条新é—?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">4</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"½W?条新é—?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">5</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"½W?条新é—?</font> <font color="#007700">); <br />      </font> <font color="#0000bb">$array</font> <font color="#007700">[] = array(</font> <font color="#dd0000">"newsID"</font> <font color="#007700">=></font> <font color="#0000bb">6</font> <font color="#007700">, </font> <font color="#dd0000">"newsTitle"</font> <font color="#007700">=></font> <font color="#dd0000">"½W?条新é—?</font> <font color="#007700">); <br /><br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">assign</font> <font color="#007700">(</font> <font color="#dd0000">"newsArray"</font> <font color="#007700">, </font> <font color="#0000bb">$array</font> <font color="#007700">); <br /><br />      </font> <font color="#ff8000">//¾~–译òq¶æ˜¾½CÞZ½äº?/templates下的index.tpl模板 <br />      </font> <font color="#0000bb">$smarty</font> <font color="#007700">-></font> <font color="#0000bb">display</font> <font color="#007700">(</font> <font color="#dd0000">"example6.tpl"</font> <font color="#007700">); <br />   </font> <font color="#0000bb">?> <br />   ================================================= <br />   example6.php 输出文äšg <br />   ================================================= <br />   <html> <br />     <head><title>foreach使用的例å­?lt;/title></head> <br />     <body> <br />        ˜q™é‡Œž®†è¾“å‡ÞZ¸€ä¸ªæ•°¾l„:<br> </font> <blockquote> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬1条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬2条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬3条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬4条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬5条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬6条新é—?lt;br><hr> <br />     </body> <br />   </html> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   foreach˜q˜å¯ä»¥ç”¨foreachelse来匹配,用foreachelse来表½Cºå½“传递给foreach的数¾l„䨓½Iºå€¼æ—¶½E‹åºè¦æ‰§è¡Œçš„æ“ä½œåQŒå…·ä½“的使用æ–ÒŽ³•åQŒè¯·å‚è€?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">手册的说明ã€?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   2. section: <br />     sectionçš„äñ”ç”Ÿæ˜¯ä¸ø™§£å†³foreach的不­‘³çš„åQŒä¸Žforeachä¸€æ øP¼Œå®ƒç”¨äºŽè®¾è®¡æ¨¡æ¿å†…çš„åó@环块åQŒå®ƒè¾ƒäؓ复杂åQŒå¯æžå¤§½E‹åºä¸Šæ»¡­‘³ç¨‹åºéœ€è¦ï¼Œæ‰€ </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">以在½E‹åºä¸­æˆ‘习惯使用它而不使用foreach,基本原åŞ为: </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">     {section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]} </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">     name: section的名¿UŽÍ¼Œä¸ç”¨åŠ? <br />     $loop: 要åó@环的变量åQŒåœ¨½E‹åºä¸­è¦ä½¿ç”¨assign对这个变量进行操作ã€?<br />     $start: 开始åó@环的下标åQŒåó@环下标默认由0å¼€å§?<br />     $step:  每次循环时下标的增数 <br />     $max:   最大åó@环下æ ?<br />     $show:  boolean¾cÕdž‹åQŒå†³å®šæ˜¯å¦å¯¹˜q™ä¸ªå—进行显½Cºï¼Œé»˜è®¤ä¸ºtrue </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">     ˜q™é‡Œæœ‰ä¸ªåè¯éœ€è¦è¯´æ˜Žï¼š <br />         循环下标åQšå®žé™…它的英文名¿UîCØ“indexåQŒæ˜¯ç´¢å¼•的意思,˜q™é‡Œæˆ‘将它译æˆ?下标"åQŒä¸»è¦æ˜¯ä¸ÞZº†å¥½ç†è§£ã€‚它表示在显½Cø™¿™ä¸ªåó@环块时当 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">前的循环索引åQŒé»˜è®¤ä»Ž0开始,å?start的媄响,如果ž®?startè®¾äØ“5åQŒå®ƒä¹Ÿå°†ä»?开始计敎ͼŒåœ¨æ¨¡æ¿è®¾è®¡éƒ¨åˆ†æˆ‘们ä‹É用过它,˜q™æ˜¯å½“前 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">{section}的一个属性,调用方式为Smarty.section.sectionName.index,˜q™é‡Œçš„sectionName指的是函数原型中的name属性ã€?<br />    {section}块具有的属性å€û|¼Œåˆ†åˆ«ä¸ºï¼š <br />      1. index:      上边我们介绍çš?循环下标"åQŒé»˜è®¤äØ“0 <br />      2. index_prev: 当前下标的前一个å€û|¼Œé»˜è®¤ä¸?1 <br />      3. index_next: 当前下标的下一个å€û|¼Œé»˜è®¤ä¸? <br />      4. first:      是否为第一下åó@çŽ?<br />      5. last:       是否为最后一个åó@çŽ?<br />      6. iteration:  循环‹Æ¡æ•° <br />      7. rownum:     å½“å‰çš„è¡ŒåøP¼Œiteration的另一个别å?<br />      8. loop:       最后一个åó@环号åQŒå¯ç”¨åœ¨section块后¾lŸè®¡sectionçš„åó@环次æ•?<br />      9. total: 循环‹Æ¡æ•°åQŒå¯ç”¨åœ¨section块后¾lŸè®¡å¾ªçޝ‹Æ¡æ•° <br />      10. show: 在函数的声明中有它,用于判断section是否昄¡¤º </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      它们的具体属性大家可以参考手册,在程序中可灵‹zÖM‹É用它的这些属性,模板部分我就使用˜q‡index属性,大家可以回过头去看看ã€?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      同样åQŒ{section}也可以配合ä‹É用{sectionelse}åQŒç”¨æ¥è¡¨½CÞZ¼ å…¥çš„æ•°ç»„变量为空时对模板˜q›è¡Œçš„处理ã€?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      我们把上边的那个例子使用{section}来替代{foreach}来实现现æ ïLš„功能åQŒæ³¨æ„ï¼Œåœ¨è¿™ä¸ªä¾‹å­ä¸­æˆ‘只ž®†tpl模板中的{foreach}ç”?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">{section}来实玎ͼŒphp½E‹åºæ–‡äšg中没有ä“Q何改动,同时加了{sectionelse}处理块: </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">  =========================================== <br />    example7.tpl <br />  =========================================== <br />  <html> <br />    <head><title>˜q™æ˜¯ä¸€ä¸ªforeach使用的例å­?lt;/title></head> <br />    <body> <br />       ˜q™é‡Œž®†è¾“å‡ÞZ¸€ä¸ªæ•°¾l„:<br> <br />       {section name=loop, loop=$News} <br />         æ–°é—»¾~–号åQš{$News[loop].newsID}<br> <br />         新闻标题åQš{$News[loop].newsTitle}<br><hr> <br />       {sectionelse} <br />         å¯¹ä¸èµøP¼Œæ²¡æœ‰ä»ÖM½•新闻输入åQ?<br />       {/section} <br />    </body> <br />  </html> <br />   <br />  ========================================== <br />  example6.php <br />  ========================================== <br />  <?php <br />     /********************************************* <br />      * <br />      * æ–‡äšg名: example7.php <br />      * 作Â?用: 昄¡¤ºå®žä¾‹½E‹åº2 <br />      * <br />      * 作Â?者: 大师å…?<br />      * EmailåQšÂ?<a href="mailto:teacherli@163.com"><font color="#0066a7">teacherli@163.com</font></a><br />      * <br />      *********************************************/ <br />      include_once("./comm/Smarty.class.php"); </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      $smarty = new Smarty();   <br />      $smarty->templates("./templates"); <br />      $smarty->templates_c("./templates_c"); <br />      $smarty->cache("./cache"); <br />      $smarty->cache_lifetime  = 0; <br />      $smarty->caching         = true; <br />      $smarty->left_delimiter  = "{"; <br />      $smarty->right_delimiter = "}"; <br />       <br />      $array[] = array("newsID"=>1, "newsTitle"=>"½W?条新é—?); <br />      $array[] = array("newsID"=>2, "newsTitle"=>"½W?条新é—?); <br />      $array[] = array("newsID"=>3, "newsTitle"=>"½W?条新é—?); <br />      $array[] = array("newsID"=>4, "newsTitle"=>"½W?条新é—?); <br />      $array[] = array("newsID"=>5, "newsTitle"=>"½W?条新é—?); <br />      $array[] = array("newsID"=>6, "newsTitle"=>"½W?条新é—?); </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      $smarty->assign("newsArray", $array); </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">      //¾~–译òq¶æ˜¾½CÞZ½äº?/templates下的index.tpl模板 <br />      $smarty->display("example6.tpl"); <br />   ?> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   ================================================= <br />   example7.php 输出文äšg <br />   ================================================= <br />   <html> <br />     <head><title>foreach使用的例å­?lt;/title></head> <br />     <body> <br />        ˜q™é‡Œž®†è¾“å‡ÞZ¸€ä¸ªæ•°¾l„:<br> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬1条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬2条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬3条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬4条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬5条新é—?lt;br><hr> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">    æ–°é—»¾~–号åQ?<br> <br />    新闻内容åQšç¬¬6条新é—?lt;br><hr> <br />     </body> <br />   </html> </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   ˜q™é‡Œçš„{section}块的对于变量的命名方式感觉有些别扭,不过没关¾p»ï¼Œä½ åªè¦è®°ä½æ¨¡æ¿å˜é‡ä‹É用: <br />   $loopName[name].var˜q™ç§æ¨¡å¼ž®Þp¡Œäº†ï¼ŒloopName为loop处赋予的变量名,[name]为name处赋予的字符ä¸ÔŒ¼Œ.åŽäØ“ä¸ÞZ½ è¦åœ¨½E‹åºæ•°ç»„中设定要 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">与值相对应的下标名¿U°å°±è¡Œäº†ã€?</font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">   <br />   好了åQŒsmarty学习指南---½E‹åºè®¾è®¡½‹‡å°±å†™åˆ°˜q™é‡ŒåQŒå¯¹äºŽä¸€èˆ¬çš„应用åQŒè¿™äº›çŸ¥è¯†å·²¾lå¤Ÿç”¨äº†åQŒå…¶å®ƒçš„一些高¾U§æŠ€å·§å¤§å®¶è¯·å‚看手册中的例子 </font> </font> </p> <p> <font color="#000000"> <font color="#0000bb">åQŒä¸‹ä¸€èŠ‚å°†è®²è®²Smarty在实际应用中的例子,ž®†åˆ†åˆ«ä»¥php内置的mysql语句åQŒphplib中的DB¾c»ï¼ŒADODBåQŒPear中DB¾cÀL¥åˆ†åˆ«è®²ä¸€ä¸‹å„个类库在同一个例子中的实现ã€?<br /></font> </font> </p> </blockquote> <img src ="http://www.aygfsteel.com/jackstudio/aggbug/67864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackstudio/" target="_blank">jackstudio</a> 2006-09-05 18:14 <a href="http://www.aygfsteel.com/jackstudio/archive/2006/09/05/67864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>smartyåQŒPHP模板引擎 http://www.aygfsteel.com/jackstudio/archive/2006/09/05/67860.htmljackstudiojackstudioTue, 05 Sep 2006 09:48:00 GMThttp://www.aygfsteel.com/jackstudio/archive/2006/09/05/67860.htmlhttp://www.aygfsteel.com/jackstudio/comments/67860.htmlhttp://www.aygfsteel.com/jackstudio/archive/2006/09/05/67860.html#Feedback0http://www.aygfsteel.com/jackstudio/comments/commentRss/67860.htmlhttp://www.aygfsteel.com/jackstudio/services/trackbacks/67860.html smartyåQŒPHP模板引擎


一、什么是smarty?
 smarty是一个ä‹É用PHP写出来的模板PHP模板引擎åQŒå®ƒæä¾›äº†é€»è¾‘与外在内容的分离åQŒç®€å•çš„è®ÔŒ¼Œç›®çš„ž®±æ˜¯è¦ä‹É用PHP½E‹åºå‘˜åŒ¾ŸŽå·¥åˆ?
¼›?使用的程序员改变½E‹åºçš„逻辑内容不会影响到美工的™åµé¢è®¾è®¡åQŒç¾Žå·¥é‡æ–îC¿®æ”šw¡µé¢ä¸ä¼šåª„响到½E‹åºçš„程序逻辑åQŒè¿™åœ¨å¤šäººåˆä½œçš„™å¹ç›®
中显的尤为重要�

二、smarty优点åQ?
 î—?. 速度åQšé‡‡ç”¨smarty¾~–写的程序可以获得最大速度的提高,˜q™ä¸€ç‚ÒŽ˜¯ç›¸å¯¹äºŽå…¶å®ƒçš„æ¨¡æ¿å¼•擎技术而言的ã€?
 �
 î—?. ¾~–译型:采用smarty¾~–写的程序在˜qè¡Œæ—¶è¦¾~–译成一个非模板技术的PHPæ–‡äšgåQŒè¿™ä¸ªæ–‡ä»‰™‡‡ç”¨äº†PHP与HTML混合的方式,在下一‹Æ¡è®¿
问模板时ž®†WEBè¯äh±‚直接转换到这个文件中åQŒè€Œä¸å†è¿›è¡Œæ¨¡æ‰K‡æ–°ç¼–译(在源½E‹åºæ²¡æœ‰æ”¹åŠ¨çš„æƒ…å†µä¸‹åQ?
 
 î—?. ¾~“存技术:smarty选用的一¿Uç¼“存技术,它可以将用户最¾lˆçœ‹åˆ°çš„HTMLæ–‡äšg¾~“存成一个静态的HTML™åµï¼Œå½“设定smartyçš„cacheå±žæ€§äØ“
  trueæ—Óž¼Œåœ¨smarty讑֮šçš„cachetime期内ž®†ç”¨æˆïLš„WEBè¯äh±‚直接转换到这个静态的HTMLæ–‡äšg中来åQŒè¿™ç›¸å½“于调用一个静态的HTMLæ–‡äšgã€?

 î—?. 插äšg技术:smarty可以自定义插件。插件实际就是一些自定义的函数ã€?
 �
 î—?. 模板中可以ä‹É用if/elseif/else/endif。在模板文äšg使用判断语句可以非常方便的对模板˜q›è¡Œæ ¼å¼é‡æŽ’ã€?


三、不适合使用smarty的地方:
 
 î—?. 需要实时更新的内容。例如像股票昄¡¤ºåQŒå®ƒéœ€è¦ç»å¸¸å¯¹æ•°æ®˜q›è¡Œæ›´æ–°åQŒè¿™¾cÕdž‹çš„程序ä‹É用smarty˜q”而会使模板处理速度变慢ã€?
 
 î—?. ž®é¡¹ç›®ã€‚小™å¹ç›®å› äØ“™å¹ç›®½Ž€å•而美工与½E‹åºå‘˜å…¼äºŽä¸€äººçš„™å¹ç›®åQŒä‹É用smarty˜q”而会丧失php开发迅速的优点ã€?

四、安装smarty¾c»ï¼š
 �
 安装smarty的环境:php版本4.06以上版本�

 安装smartyæ–ÒŽ³•非常½Ž€å•,从http://samrty.php.net中下载smarty.tar.gz,解压后找到LIB目录,在当前站点中建立目录comm,ž®†LIB中所有文ä»?
  拷入comm目录,完成基本安装.
 �
 其它高¾U§å®‰è£…ä‹É用方法请看手å†?

五、smarty在模板中的ä‹É用:
 �
 î—?本节通过几个实例来讲一讲smartyçš„ä‹É用。smarty模板通常使用.tpl来标识,有些äºÞZؓ了美工方便,ž®†æ‰©å±•名直接写成.htmlåQŒä¹Ÿæ˜¯å¯ä»?
的。本文中采用smarty标准写法:ä»?tpl来表½CÞZؓ一个smarty模板ã€?

 实ä¾?åQ?

 �先来看一个简单的例子�
 �=====================================================
 �index.tpl
 �=====================================================
 �
 î—?{* 昄¡¤ºæ˜¯smarty变量识符里的ç”?åŒ…å«çš„æ–‡å­—äØ“æ³¨é‡Šå†…å®¹ *}
 î—?{include file="header.tpl"}{*™åµé¢å¤?}
 大家好,我叫{$name}, ‹Æ¢è¿Žå¤§å®¶é˜…读我的smarty学习材料ã€?
 î—?{include file="foot.tpl"}{*™åµé¢ž®?}î—?

 上边的˜q™ä¸ªä¾‹å­æ˜¯ä¸€ä¸ªtpl模板åQŒå…¶ä¸­ï¼š
 î—?. {**}是模杉K¡µçš„æ³¨é‡Šï¼Œå®ƒåœ¨smartyå¯Òލ¡æ¿è¿›è¡Œè§£æžæ—¶ä¸è¿›è¡Œä“Q何输出,仅供模板设计师对模板˜q›è¡Œæ³¨é‡Šã€?
 î—?. {include file="xxx.tpl"}使用此句ž®†ä¸€ä¸ªæ¨¡æ¿æ–‡ä»¶åŒ…含到当前™åµé¢ä¸­ï¼Œä¾‹å­ä¸­å°†åœ¨ç½‘站中公用事的head.tpl与foot.tpl˜q›è¡Œäº†åŒ…含,你可ä»?
 这æ ähƒ³åQŒä‹É用这一句将xxx.tpl中的内容全部复制在当前语句处。当ç„Óž¼Œä½ ä¸ä½¿ç”¨˜q™ä¸€å¥ä¹Ÿå¯ä»¥åQŒå°†XXX.tpl中的内容复制到当前语句处
  也是完全可以了�

 î—?.{$name}: 模板变量åQŒsmarty中的核心¾l„成åQŒé‡‡ç”¨smarty定义的左边界½W¦{与右边界½W¦}包含着、以PHP变量形式¾l™å‡ºåQŒåœ¨smarty½E‹åºä¸­å°†ä½¿ç”¨
 $smarty->assign("name", "李晓å†?)åQ›å°†æ¨¡æ¿ä¸­çš„$name替换成“李晓军”三个字ã€?
 �
  整个实例源程序如下:
  =============================
  header.tpl
  =============================
  <html>
 �<head>
 �lt;title>大师兄smarty教程</title>
 �</head>
  <body>
 

  ===============================
  foot.tpl
  ===============================
 �<hr>
 <center> CopyRight(C) by 大师å…?2004òq?æœ?Email: teacherli@163.com </center>
 �<hr>
 �</body>
  </html>

 �=====================================================
 �index.tpl
 �=====================================================
 �
 î—?{* 昄¡¤ºæ˜¯smarty变量识符里的ç”?åŒ…å«çš„æ–‡å­—äØ“æ³¨é‡Šå†…å®¹ *}
 î—?{include file="header.tpl"}{*™åµé¢å¤?}
 大家好,我叫{$name}, ‹Æ¢è¿Žå¤§å®¶é˜…读我的smarty学习材料ã€?
 î—?{include file="foot.tpl"}{*™åµé¢ž®?}î—?

 �===============================================
 index.php
 �===============================================
 �lt;?php
 /*********************************************
  *
  * æ–‡äšg名: index.php
  * 作用: 昄¡¤ºå®žä¾‹½E‹åº
  *
  * 作者: 大师�
  * EmailåQšî—¥teacherli@163.com
  *
  *********************************************/
  include_once("./comm/Smarty.class.php"); //包含smarty¾cÀL–‡ä»?

  $smarty = new Smarty();�/建立smarty实例对象$smarty
  $smarty->templates("./templates"); //讄¡½®æ¨¡æ¿ç›®å½•
  $smarty->templates_c("./templates_c"); //讄¡½®¾~–译目录
 
  //----------------------------------------------------
  //左右边界½W¦ï¼Œé»˜è®¤ä¸º{}åQŒä½†å®žé™…应用当中å®ÒŽ˜“与JavaScript
  //相冲½Hï¼Œæ‰€ä»¥å¾è®®è®¾æˆ?lt;{}>或其它ã€?
  //----------------------------------------------------
  $smarty->left_delimiter = "{";
  $smarty->right_delimiter = "}";

  $smarty->assign("name", "李晓å†?); //˜q›è¡Œæ¨¡æ¿å˜é‡æ›¿æ¢
 
  //¾~–译òq¶æ˜¾½CÞZ½äº?/templates下的index.tpl模板
  $smarty->display("index.tpl");
 �>
 �
 最¾lˆæ‰§è¡Œè¿™ä¸ªç¨‹åºæ—¶ž®†æ˜¾½CÞZØ“åQ?
 �===============================
 执行index.php
 �===============================
 �lt;html>
 �<head>
 �lt;title>大师兄smarty教程</title>
 �</head>
 �<body>
 大家好,我叫李晓å†? ‹Æ¢è¿Žå¤§å®¶é˜…读我的smarty学习材料ã€?
 <hr>
 <center> CopyRight(C) by 大师å…?2004òq?æœ?Email: teacherli@163.com </center>
 �<hr>
 �</body>
  </html>



实例2åQ?
 î—?˜q™ä¸ªä¾‹å­æ˜¯ç»¼åˆä‹É用smarty模板参数的一个例子,˜q™äº›å‚数用来控制模板的输出,我只选其中几个,其它的参æ•îC½ åŽÈœ‹å‚考吧ã€?

 �================================================
  exmple2.tpl
 �================================================
 �<html>
  <head><title>大师兄smarty½CÞZ¾‹2</title></head>
  <body>
 î—?1. ½W¬ä¸€å¥é¦–字母要大写:{$str1|capitalize}<br>
 î—?2. ½W¬äºŒå¥æ¨¡æ¿å˜é‡?+ 李晓军:{$str2|cat:"李晓å†?}<br>
 î—?3. ½W¬ä¸‰å¥è¾“出当前日期:{$str3|date_format:"%Yòq?mæœ?dæ—?}
 î—?4. ½W¬å››å?php½E‹åºä¸­ä¸å¤„理åQŒå®ƒæ˜„¡¤ºé»˜è®¤å€û|¼š{$str4|default:"没有å€û|¼"}
 î—?5。第五句要让它羃˜q?个空白字母位åQŒåƈ使用"*"取替˜q?个空白字½W¦ï¼š<br>
 {$str5|indent:8:"*"}}<br>
 î—?6. ½W¬å…­å¥æŠŠTEACHerLI@163.comå…¨éƒ¨å˜äØ“ž®å†™åQš{$str6|lower}<br>
 î—?7. ½W¬ä¸ƒå¥æŠŠå˜é‡ä¸­çš„teacherli替换成:李晓军:{$str7|replace:"teacherli":"李晓å†?}<br>
8. ½W¬å…«å¥äØ“¾l„合使用变量修改器:{$str8|capitalize|cat:"˜q™é‡Œæ˜¯æ–°åŠ çš„æ—‰™—´åQ?|date_format:"%Yòq?mæœ?dæ—?|lower}
  </body>
 �</html>

 �===============================================
 �example2 .php
 �===============================================
 �<?php
 /*********************************************
  *
  * æ–‡äšg名: example2.php
  * 作用: 昄¡¤ºå®žä¾‹½E‹åº2
  *
  * 作者: 大师�
  * EmailåQšî—¥teacherli@163.com
  *
  *********************************************/
  include_once("./Smarty.class.php"); //包含smarty¾cÀL–‡ä»?

  $smarty = new Smarty();�/建立smarty实例对象$smarty
  $smarty->templates("./templates"); //讄¡½®æ¨¡æ¿ç›®å½•
  $smarty->templates_c("./templates_c"); //讄¡½®¾~–译目录
 
  //----------------------------------------------------
  //左右边界½W¦ï¼Œé»˜è®¤ä¸º{}åQŒä½†å®žé™…应用当中å®ÒŽ˜“与JavaScript
  //相冲½Hï¼Œæ‰€ä»¥å¾è®®è®¾æˆ?lt;{}>或其它ã€?
  //----------------------------------------------------
  $smarty->left_delimiter = "{";
  $smarty->right_delimiter = "}";

  $smarty->assign("str1", "my name is xiao jun, li."); //ž®†str1替换成My Name Is Xiao Jun, Li.
  $smarty->assign("str2", "我的名字叫:"); //输出: 我的名字�李晓�
  $smarty->assign("str3", "公元"); //输出公元2004òq?æœ?1日(我的当前旉™—´åQ?
  //$smarty->assign("str4", ""); //½W¬å››å¥ä¸å¤„理时会昄¡¤ºé»˜è®¤å€û|¼Œå¦‚果使用前面˜q™ä¸€å¥åˆ™æ›¿æ¢ä¸?"
  $smarty->assign("str5", "前边8ä¸?"); //½W¬äº”句输出:********前边8ä¸?
  $smarty->assign("str6", "TEACHerLI@163.com"); //˜q™é‡Œž®†è¾“出teacherli@163.com
  $smarty->assign("str7", "this is teacherli"); //在模板中昄¡¤ºä¸ºï¼šthis is 李晓å†?
  $smarty->assign("str8", "HERE IS COMBINING:");

  //¾~–译òq¶æ˜¾½CÞZ½äº?/templates下的index.tpl模板
  $smarty->display("example2.tpl");
 �>
 �
 î—?最¾lˆè¾“出效果:
 �======================================================
 î—?example2.php输出效果åQ?
 �======================================================
 �<html>
  <head><title>大师兄smarty½CÞZ¾‹2</title></head>
  <body>
 î—?1. ½W¬ä¸€å¥é¦–字母要大写:My Name Is Xiao Jun, Li.<br>
 î—?2. ½W¬äºŒå¥æ¨¡æ¿å˜é‡?+ 李晓军:我的名字叫:李晓å†?lt;br>
 î—?3. ½W¬ä¸‰å¥è¾“出当前日期:公元2004òq?æœ?1æ—?lt;br>
 î—?4. ½W¬å››å?php½E‹åºä¸­ä¸å¤„理åQŒå®ƒæ˜„¡¤ºé»˜è®¤å€û|¼šæ²¡æœ‰å€û|¼<br>
 î—?5。第五句要让它羃˜q?个空白字母位åQŒåƈ使用"*"取替˜q?个空白字½W¦ï¼š<br>
 ********前边8�<br>
 î—?6. ½W¬å…­å¥æŠŠTEACHerLI@163.comå…¨éƒ¨å˜äØ“ž®å†™åQšteacherli@163.com<br>
 î—?7. ½W¬ä¸ƒå¥æŠŠå˜é‡ä¸­çš„teacherli替换成:李晓军:this is 李晓å†?lt;br>
8. ½W¬å…«å¥äØ“¾l„合使用变量修改器:Here is Combining:˜q™é‡Œæ˜¯æ–°åŠ çš„æ—‰™—´åQ?004òq?æœ?1æ—?
  </body>
 �</html>

 在模板中的˜q™äº›å‚数被称为变量修改器åQˆvariable modifiersåQ‰ï¼Œä½¿ç”¨˜q™äº›å‚数可对模板˜q›è¡Œä¸€¾pÕdˆ—的修æ”ÒŽŽ§åˆ¶ã€‚å˜é‡ä¿®æ”¹å™¨
 ä‹Éç”?|"和调节器名称应用修改器, 使用":"分开修改器参数。变量修改器可以¾l„合使用åQŒåƒ½W¬å…«å¥ä¸€æ øP¼Œå®žé™…使用中可以灵‹zÕdº”用ã€?


]]>
php常见问题http://www.aygfsteel.com/jackstudio/archive/2006/08/10/62766.htmljackstudiojackstudioThu, 10 Aug 2006 04:19:00 GMThttp://www.aygfsteel.com/jackstudio/archive/2006/08/10/62766.htmlhttp://www.aygfsteel.com/jackstudio/comments/62766.htmlhttp://www.aygfsteel.com/jackstudio/archive/2006/08/10/62766.html#Feedback0http://www.aygfsteel.com/jackstudio/comments/commentRss/62766.htmlhttp://www.aygfsteel.com/jackstudio/services/trackbacks/62766.html1:ä¸ÞZ»€ä¹ˆæˆ‘得不到变é‡?/p>

  我在一¾|‘页向另一¾|‘页POST数据nameåQŒäؓ什么输å‡?name时却得不åˆîC“Q何å€?

在PHP4.2以后的版本中register_global默认为off
  若想取得从另一™åµé¢æäº¤çš„变é‡?

  æ–ÒŽ³•一:在PHP.ini中找到register_globalåQŒåƈ把它讄¡½®ä¸ºon.
  æ–ÒŽ³•äº?在接收网™å‰|œ€å‰é¢æ”¾ä¸Š˜q™ä¸ªextract($_POST);extract($_GET);(注意extract($_SESSION)前必™å»è¦æœ‰Session_Start()).
  æ–ÒŽ³•ä¸?一个一个读取变é‡?a=$_GET["a"];$b=$_POST["b"]½{‰ï¼Œ˜q™ç§æ–ÒŽ³•虽然éºÈƒ¦åQŒä½†æ¯”较安全.

  2åQšè°ƒè¯•你的程åº?/p>

  在运行时必须知道某个变量ä¸ÞZ½•倹{€‚我是这样做的,建立一文äšgdebug.php,其内容如ä¸?

  PHP代码:

  <?PHP
  Ob_Start();
  Session_Start();
  Echo "<pre>";

  Echo "本页得到的_GET变量�";
  Print_R($_GET);

  Echo "本页得到的_POST变量�";
  Print_R($_POST);

  Echo "本页得到的_COOKIE变量�";
  Print_R($_COOKIE);

  Echo "本页得到的_SESSION变量�";
  Print_R($_SESSION);

  Echo "</pre>";
  ?>

  然后在php.ini中设¾|®ï¼šinclude_path = "c:/php"åQŒåƈž®†debug.php攑֜¨æ­¤æ–‡ä»¶å¤¹,以后ž®±å¯ä»¥åœ¨æ¯ä¸ª¾|‘页里包含此文äšgåQŒæŸ¥çœ‹å¾—到的变量名和å€?

  3åQšå¦‚何ä‹É用session

  凡是与session有关�之前必须调用函数session_start();

  为session付值很½Ž€å?å¦?

  PHP代码:

  <?php
  Session_start();
  $Name = "˜q™æ˜¯ä¸€ä¸ªSession例子";
  Session_Register("Name");//注意,不要写成åQšSession_Register("$Name");
  Echo $_SESSION["Name"];
  //之后$_SESSION["Name"]ä¸?˜q™æ˜¯ä¸€ä¸ªSession例子"
  ?>

  在php4.2之后,可以为session直接付�

  PHP代码:

  <?PHP
  Session_Start();
  $_SESSION["name"]="value";
  ?>

  取消session可以˜q™æ ·:


PHP代码:


  <?php
  session_start();
  session_unset();
  session_destroy();
  ?>

  取消某个session变量在php4.2以上˜q˜æœ‰BUG.

  注意:

  1:在调用Session_Start()之前不能有ä“Q何输å‡?例如下面是错误的.
  ==========================================
  1è¡?br />  2è¡?3è¡?Session_Start();//之前在第一行已¾læœ‰è¾“出
  4�.....
  5�?>
  ==========================================

  提示1:

  凡是出现" ........headers already sent.......... ",ž®±æ˜¯Session_Start()之前向浏览器输出信息.åŽÀLŽ‰è¾“å‡ºž®±æ­£å¸?åQˆCOOKIE也会出现˜q™ç§é”™è¯¯,é”™è¯¯åŽŸå› ä¸€æ øP¼‰

  提示2:

  如果你的Session_Start()攑֜¨å¾ªçŽ¯è¯­å¥é‡?òq¶ä¸”很难¼‹®å®šä¹‹å‰å“ªé‡Œå‘浏览器输出信息,可以用下面这¿Uæ–¹æ³?
  1�<?PHP Ob_Start(); ?>
  ........˜q™é‡Œæ˜¯ä½ çš„程åº?.....

  2:˜q™æ˜¯ä»€ä¹ˆé”™è¯?/p>

  Warning: session_start(): open(/tmp\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....
å› äØ“ä½ æ²¡æœ‰æŒ‡å®šsessionæ–‡äšg的存放èµ\å¾?

  解决æ–ÒŽ³•:
  (1)在c盘徏立文件夹tmp
  (2)打开php.ini,扑ֈ°session.save_path,修改为session.save_path= "c:/tmp"

4:ä¸ÞZ»€ä¹ˆæˆ‘向另一¾|‘页传送变量时,只得到前半部åˆ?以空格开头的则全部丢å¤?/p>

  PHP代码:

  <?php
  $Var="hello php";//修改�Var="     hello php";试试得到什么结�br />  $post= "receive.php?Name=".$Var;
  header("location:$post");
  ?>

  receive.php的内�

  PHP代码:

  <?PHP
  Echo "<pre>";
  Echo   $_GET["Name"];
  Echo "</pre>";
  ?>

  正确的方法是:

  PHP代码:

  <?php
  $Var="hello php";
  $post= "receive.php?Name=".urlencode($Var);
  header("location:$post");
  ?>

  在接攉™¡µé¢ä½ ä¸éœ€è¦ä‹É用Urldecode(),变量会自动编ç ?
5:如何截取指定长度汉字而不会出çŽîC»¥"?>"¾l“å°¾,­‘…出部分ä»?..."代替

  一般来è¯?要截取的变量来自Mysql,首先要保证那个字ŒDµé•¿åº¦è¦­‘›_¤Ÿé•?ä¸€èˆ¬äØ“char(200),可以保持100个汉字,包括标点.

  PHP代码:

  <?PHP
  $str="˜q™ä¸ªå­—符好长呀,^_^";
  $Short_Str=showShort($str,4);//截取前面4个汉å­?¾l“æžœä¸?˜q™ä¸ªå­—符...
  Echo   "$Short_Str";
  Function csubstr($str,$start,$len)
  {
  $strlen=strlen($str);
  $clen=0;
  for($i=0;$i<$strlen;$i++,$clen++)
  {
  if ($clen>=$start+$len)
  break;
  if(ord(substr($str,$i,1))>0xa0)
  {
  if ($clen>=$start)
  $tmpstr.=substr($str,$i,2);
  $i++;
  }
  else
  {
  if ($clen>=$start)
  $tmpstr.=substr($str,$i,1);
  }
  }

  return $tmpstr;
  }
  Function showShort($str,$len)
  {
  $tempstr = csubstr($str,0,$len);
  if ($str<>$tempstr)
  $tempstr .= "..."; //要以什么结ž®?修改˜q™é‡Œž®±å¯ä»?

  return $tempstr;
  }


  6:规范你的SQL语句

  在表æ û|¼Œå­—段前面加上"`",˜q™æ ·ž®×ƒ¸ä¼šå› ä¸ø™¯¯ç”¨å…³é”®å­—è€Œå‡ºçŽ°é”™è¯¯ï¼Œå½“ç„¶æˆ‘åÆˆä¸æŽ¨èä½ ä½¿ç”¨å…³é”®å­?

  例如
  $Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

  "`"怎么输入? 在TAB键上�


  7:如何使Html/PHP格式的字½W¦ä¸²ä¸è¢«è§£é‡Š,而是照原æ äh˜¾½C?/p>

  PHP代码:

  <?PHP
  $str="<h1>PHP</h1>";
  Echo "被解释过çš? ".$str."<br>¾lè¿‡å¤„理çš?";
  Echo   htmlentities(nl2br($str));
  ?>


  8:怎么在函数里取得函数外的变量�/p>

  PHP代码:

  <?PHP
  $a="PHP";
  foo();
  Function foo()
  {
   global $a;//删除˜q™é‡Œçœ‹çœ‹æ˜¯ä»€ä¹ˆç»“æž?br />   Echo "$a";
  }
  ?>

9:我怎么知道¾pȝ»Ÿé»˜è®¤æ”¯æŒä»€ä¹ˆå‡½æ•?/p>

  PHP代码:

  <?php
  $arr = get_defined_functions();
  Function php() {
  }
  echo   "<pre>";
  Echo   "˜q™é‡Œæ˜„¡¤º¾pȝ»Ÿæ‰€æ”¯æŒçš„æ‰€æœ‰å‡½æ•?和自定以函数php\n";
  print_r($arr);
  echo   "</pre>";
  ?> 


  10:如何比较两个日期相差几天

  PHP代码:

  <?PHP
  $Date_1="2003-7-15";//也可以是:$Date_1="2003-7-15 23:29:14";
  $Date_2="1982-10-1";
  $d1=strtotime($Date_1);
  $d2=strtotime($Date_2);
  $Days=round(($d1-$d2)/3600/24);
  Echo   "偶已¾lå¥‹æ–—了 $Days 天^_^";
  ?>


  11:ä¸ÞZ»€ä¹ˆæˆ‘升çñ”PHPå?原来的程序出现满屏的 Notice: Undefined variable:

  ˜q™æ˜¯è­¦å‘Šçš„æ„æ€?ç”׃ºŽå˜é‡æœªå®šä¹‰å¼•èµïLš„.
  打开php.ini,扑ֈ°æœ€ä¸‹é¢çš„error_reporting,修改为error_reporting = E_ALL & ~E_NOTICE

  对于Parse error错误
  error_reporting(0)无法关闭.
  如果你想关闭ä»ÖM½•错误提示,打开php.ini,扑ֈ°display_errors,讄¡½®ä¸ºdisplay_errors = Off.以后ä»ÖM½•错误都不会提½C?

  那什么是error_reporting?


  12:我想在每个文件最前,最后面都加上一文äšg.但一个一个添加很éºÈƒ¦

  1:打开php.iniæ–‡äšg
  讄¡½® include_path= "c:"

  2:写两个文�
  auto_prepend_file.php å’?auto_append_file.php 保存在cç›?他们ž®†è‡ªåŠ¨ä¾é™„åœ¨æ¯ä¸ªphpæ–‡äšg的头部和ž®ùNƒ¨.

  3:在php.ini中找�
  Automatically add files before or after any PHP document.
  auto_prepend_file = auto_prepend_file.php;依附在头�br />  auto_append_file = auto_append_file.php;依附在尾�/p>

  以后你每个phpæ–‡äšgž®Þq›¸å½“于

  PHP代码:

  <?php
  Include "auto_prepend_file.php" ;

  .......//˜q™é‡Œæ˜¯ä½ çš„程åº?/p>

  Include "auto_append_file.php";
  ?>


  13:如何利用PHP上传文äšg

  PHP代码:

  <html><head>
  <title>上蝲文äšg表单</title></head>
  <body>
  <form enctype="multipart/form-data" action="" method="post">
  请选择文äšgåQ?<br>
  <input name="upload_file" type="file"><br>
  <input type="submit" value="上传文äšg">
  </form>
  </body>
  </html>


<?
  $upload_file=$_FILES['upload_file']['tmp_name'];
  $upload_file_name=$_FILES['upload_file']['name'];

  if($upload_file){
  $file_size_max = 1000*1000;// 1M限制文äšg上传最大容é‡?bytes)
  $store_dir = "d:/";// 上传文äšg的储存位¾|?br />  $accept_overwrite = 1;//是否允许覆盖相同文äšg
  // ‹‚€æŸ¥æ–‡ä»¶å¤§ž®?br />  if ($upload_file_size > $file_size_max) {
  echo "å¯¹ä¸èµøP¼Œä½ çš„æ–‡äšg定w‡å¤§äºŽè§„定";
  exit;
  }

  // ‹‚€æŸ¥è¯»å†™æ–‡ä»?br />  if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
  Echo   "存在相同文äšg名的文äšg";
  exit;
  }

  //复制文äšg到指定目å½?br />  if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {
  echo "复制文äšgå¤ÞpÓ|";
  exit;
  }

  }

  Echo   "<p>你上传了文äšg:";
  echo  $_FILES['upload_file']['name'];
  echo "<br>";
  //客户端机器文件的原名¿U°ã€?

  Echo   "æ–‡äšgçš?MIME ¾cÕdž‹ä¸?";
  echo $_FILES['upload_file']['type'];
  //æ–‡äšgçš?MIME ¾cÕdž‹åQŒéœ€è¦æµè§ˆå™¨æä¾›è¯¥ä¿¡æ¯çš„æ”¯æŒåQŒä¾‹å¦‚“image/gif”ã€?
  echo "<br>";

  Echo   "上传文äšg大小:";
  echo $_FILES['upload_file']['size'];
  //已上传文件的大小åQŒå•ä½äØ“å­—èŠ‚ã€?
  echo "<br>";

  Echo   "æ–‡äšg上传后被临时储存ä¸?";
  echo $_FILES['upload_file']['tmp_name'];
  //æ–‡äšg被上传后在服务端储存的äÍ时文件名ã€?
  echo "<br>";


  $Erroe=$_FILES['upload_file']['error'];
  switch($Erroe){
          case 0:
             Echo   "上传成功"; break;
          case 1:
             Echo   "上传的文件超˜q‡äº† php.ini ä¸?upload_max_filesize 选项限制的å€?"; break;
          case 2:
             Echo   "上传文äšg的大ž®è¶…˜q‡äº† HTML 表单ä¸?MAX_FILE_SIZE 选项指定的倹{€?;    break;
          case 3:
             Echo   "æ–‡äšg只有部分被上ä¼?;break;
          case 4:
             Echo   "没有文äšg被上ä¼?;break;
  }
  ?>


  14:如何配置GD�/p>

  下面是我的配¾|®è¿‡½E?br />  1:用dos命ä×o(也可以手动操ä½?拯‚´dllsæ–‡äšg多w‡Œæ‰€æœ‰dllæ–‡äšg到system32目录ä¸? copy c:\php\dlls\*.dll c:\windows\system32\
  2:打开php.ini
  讄¡½®extension_dir = "c:/php/extensions/";
  3:
  extension=php_gd2.dll;把extension前面的逗号åŽÀLމåQŒå¦‚果没有php_gd2.dllåQŒphp_gd.dll也一æ ?保证¼‹®å®žå­˜åœ¨˜q™ä¸€æ–‡äšgc:/php/extensions/php_gd2.dll
  4:˜qè¡Œä¸‹é¢½E‹åº˜q›è¡Œ‹¹‹è¯•

  PHP代码:

  <?php
  Ob_end_flush();
  //注意,在此之前不能向浏览器输出ä»ÖM½•信息,要注意是否设¾|®äº† auto_prepend_file.
  header ("Content-type: image/png");
  $im = @imagecreate (200, 100)
     or die ("无法创徏囑փ");
  $background_color = imagecolorallocate ($im, 0,0, 0);
  $text_color = imagecolorallocate ($im, 230, 140, 150);
  imagestring ($im, 3, 30, 50,  "A Simple Text String", $text_color);
  imagepng ($im);
  ?>

  点击˜q™é‡ŒæŸ¥çœ‹¾l“æžœ


  15:什么是UBB代码

  UBB代码是HTML的一个变¿U?是Ultimate Bulletin Board (国外一个BBS½E‹åºåQŒå›½å†…也有不ž®‘地方ä‹É用这个程åº?采用的一¿Uç‰¹ŒDŠçš„TAG.
  即ä‹É¼›æ­¢ä½¿ç”¨ HTMLåQŒä½ ä¹Ÿå¯ä»¥ç”¨ UBBCode? 来实çŽ?也许你更希望使用 UBBCode? 而不æ˜?HTML, 即ä‹É论坛允许使用 HTML, å› äØ“ä½¿ç”¨èµäh¥ä»£ç è¾ƒå°‘也更安全.

[回顾]:上集介绍äº?调试½E‹åº","如何使用session","规范SQL语句"½{?5个问题(Php高手带èµ\--问题汇总解½{”[1]åQ‰ã€‚本集ç‘ô¾l­ä½œå‡?6条常见问题的解答ã€?/p>

16:我想修改MySQL的用�密码
  首先要声明一点,大部分情况下åQŒä¿®æ”¹MySQL是需要有mysql里的root权限的,

  所以一般用æˆäh— æ³•更改密码,除非è¯äh±‚½Ž¡ç†å‘?

  æ–ÒŽ³•一

  使用phpmyadminåQŒè¿™æ˜¯æœ€½Ž€å•的了,修改mysql库的user表,

  不过别忘了ä‹É用PASSWORD函数ã€?/p>

  æ–ÒŽ³•äº?

  使用mysqladminåQŒè¿™æ˜¯å‰é¢å£°æ˜Žçš„一个特例ã€?

  mysqladmin -u root -p password mypasswd

  输入˜q™ä¸ªå‘½ä×o后,需要输入root的原密码åQŒç„¶åŽrootçš„å¯†ç å°†æ”¹äØ“mypasswdã€?

  把命令里的rootæ”¹äØ“ä½ çš„ç”¨æˆ·åï¼Œä½ å°±å¯ä»¥æ”¹ä½ è‡ªå·±çš„å¯†ç äº†ã€?

  当然如果你的mysqladmin˜qžæŽ¥ä¸ä¸Šmysql serveråQŒæˆ–者你没有办法执行mysqladminåQ?

  那么˜q™ç§æ–ÒŽ³•ž®±æ˜¯æ— æ•ˆçš„ã€?

  而且mysqladmin无法把密码清½Iºã€?
  下面的方法都在mysql提示½W¦ä¸‹ä½¿ç”¨åQŒä¸”必须有mysqlçš„root权限åQ?

  æ–ÒŽ³•ä¸?

  mysql> INSERT INTO mysql.user (Host,User,Password)

  VALUES('%','jeffrey',PASSWORD('biscuit'));

  mysql> FLUSH PRIVILEGES

  ¼‹®åˆ‡åœ°è¯´˜q™æ˜¯åœ¨å¢žåŠ ä¸€ä¸ªç”¨æˆøP¼Œç”¨æˆ·åäØ“jeffreyåQŒå¯†ç äØ“biscuitã€?

  在《mysql中文参考手册》里有这个例子,所以我也就写出来了�

  注意要ä‹É用PASSWORD函数åQŒç„¶åŽè¿˜è¦ä‹É用FLUSH PRIVILEGESã€?/p>

æ–ÒŽ³•å›?

ã€€ã€€å’Œæ–¹æ³•ä¸‰ä¸€æ øP¼Œåªæ˜¯ä½¿ç”¨äº†REPLACE语句

  mysql> REPLACE INTO mysql.user (Host,User,Password)

  VALUES('%','jeffrey',PASSWORD('biscuit'));

  mysql> FLUSH PRIVILEGES

  æ–ÒŽ³•äº?

  使用SET PASSWORD语句åQ?

  mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');

  你也必须使用PASSWORD()函数åQ?

  但是不需要ä‹É用FLUSH PRIVILEGESã€?/p>

  æ–ÒŽ³•å…?

  使用GRANT ... IDENTIFIED BY语句

  mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';


  ˜q™é‡ŒPASSWORD()函数是不必要的,也不需要ä‹É用FLUSH PRIVILEGESã€?
  注意åQ?PASSWORD() [不是]以在Unix口ä×o加密的同æ äh–¹æ³•施行口令加密ã€?


17:我想知道他是通过哪个¾|‘ç«™˜qžæŽ¥åˆ°æœ¬™å?br />  PHP代码:

  <?php

  //必须通过­‘…çñ”˜qžæŽ¥˜q›å…¥æ‰æœ‰è¾“出

  Echo $_SERVER['HTTP_REFERER'];

  ?>

18:数据攑օ¥æ•°æ®åº“和取出来显½Cºåœ¨™åµé¢éœ€è¦æ³¨æ„ä»€ä¹?br />  入库æ—?/p>

  $str=addslashes($str);

  $sql="insert into `tab` (`content`) values('$str')";

  出库�/p>

  $str=stripslashes($str);

  昄¡¤ºæ—?/p>

  $str=htmlspecialchars(nl2br($str)) ;
  <?php

  //$content来自数据�/p>

  $content=nl2br(htmlspecialchars($content));

  $content=str_replace(" ","&nbsp;",$content);

  $content=str_replace("\n","<br>\n",$content);

  ?>

19:如何è¯Õd–当前地址栏信æ?br />  PHP代码:

  <?php

  $s="http://{$_SERVER['HTTP_HOST']}:{$_SERVER["SERVER_PORT"]}{$_SERVER['SCRIPT_NAME']}";

  $se='';
  foreach ($_GET as $key => $value) {
  $se.=$key."=".$value."&";
  }
  $se=Preg_Replace("/(.*)&$/","$1",$se);
  $se?$se="?".$se:"";
  echo $s."?$se";
  ?>


20:我点å‡ÕdŽé€€æŒ‰é’®,ä¸ÞZ»€ä¹ˆä¹‹å‰å¡«å†™çš„东西不见
  ˜q™æ˜¯å› äؓ你ä‹É用了session.

  解决办法:
  PHP代码:

  <?php session_cache_limiter('private, must-revalidate');session_start();
  .....................?>

21:怎么在图片里昄¡¤ºIP地址

  PHP代码:

  <? Header("Content-type: image/png");

  $img = ImageCreate(180,50);
  $ip = $_SERVER['REMOTE_ADDR'];

   ImageColorTransparent($img,$bgcolor);

  $bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景颜色

  $shadow = ImageColorAllocate($img, 250,0,0); // 阴媄颜色

  $textColor = ImageColorAllocate($img, oxff,oxff,oxff); // 字体颜色

  ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip);
//昄¡¤ºèƒŒæ™¯

  ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$ip);

 // 昄¡¤ºIP    

  ImagePng($img);    

  imagecreatefrompng($img);
  ImageDestroy($img);      

  ?>

22:如何取得用户的真实IP

  PHP代码:

  <? function iptype1 () {

   if (getenv("HTTP_CLIENT_IP"))

   {
  return getenv("HTTP_CLIENT_IP");

  }

  else

  {

  return "none";
  }

  }

  function iptype2 () {

  if (getenv("HTTP_X_FORWARDED_FOR"))

  {

   return
  getenv("HTTP_X_FORWARDED_FOR");

  }

  else {

  return "none";
  }

  }

function iptype3 () {

  if (getenv("REMOTE_ADDR"))

  {

   return getenv("REMOTE_ADDR");
  }

   else {

  return "none";

   }

   }

  function ip() {

   $ip1 = iptype1();

   $ip2 = iptype2();

  $ip3 = iptype3();

  if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown")

  {

  return $ip1;

  }

   elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown")
  {

  return $ip2;

  }

  elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown")

   {

  return $ip3;

  }

   else

  { return "none"; }

  }

   Echo ip();

  ?>


23:如何从数据库è¯Õd–三天内的所有记å½?br />  首先表格里要有一个DATETIME字段记录旉™—´,

  格式�2003-7-15 16:50:00'
  SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3;


24:如何˜qœç¨‹é“¾æŽ¥Mysql数据åº?/p>

  在增加用æˆïLš„mysql表里有一个host字段åQŒä¿®æ”¹äØ“"%",或者指定允许连接的ip地址,˜q™æ ·åQŒä½ ž®±å¯ä»¥è¿œ½E‹è°ƒç”¨äº†ã€?br />  $link=mysql_connect("192.168.1.80:3306","root","");


25:正则到底怎么�/p>

正则表达式中的特ŒDŠå­—½W?/p>

26:用Apacheå?主页出现ä¹Þq 

  æ–ÒŽ³•一:

  AddDefaultCharset ISO-8859-1 æ”¹äØ“ AddDefaultCharset off
  æ–ÒŽ³•äº?

  AddDefaultCharset GB2312


27:ä¸ÞZ»€ä¹ˆå•引号,双引号在接受™åµé¢å˜æˆ(\'\")
  解决æ–ÒŽ³•:

  æ–ÒŽ³•一:在php.ini中设¾|?magic_quotes_gpc = Off

  æ–ÒŽ³•äº? $str=stripcslashes($str)


28:怎么让程序一直运行下åŽ?而不是超˜q?0¿U’就停止
  set_time_limit(60)//最长运行时间一分钟

  set_time_limit(0)//˜qè¡Œåˆ°ç¨‹åºè‡ªå·Þq»“æ?或手动停æ­?/p>


29:计算当前在线人数
  例子一:用文本实�br />  PHP代码:

  <?php

  //首先你要有读写文件的权限

  //本程序可以直接运è¡?½W¬ä¸€‹Æ¡æŠ¥é”?以后ž®±å¯ä»?/p>

   $online_log = "count.dat"; //保存人数的文�

   $timeout = 30;//30¿U’内没动作è€?è®¤äØ“æŽ‰çº¿

   $entries = file($online_log);
   $temp = array();


for ($i=0;$i<count($entries);$i++) {

   $entry = explode(",",trim($entries[$i]));

   if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time()))
{

   array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他‹¹è§ˆè€…的信息,òq¶åŽ»æŽ‰è¶…æ—¶è€?保存˜q?temp

   }

   }
   array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."\n");
//æ›´æ–°‹¹è§ˆè€…的旉™—´

   $users_online = count($temp); //计算在线人数
   $entries = implode("",$temp);

   //写入文äšg

   $fp = fopen($online_log,"w");

   flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网¾lœæ–‡ä»¶ç³»¾lŸä¸­æ­£å¸¸å·¥ä½œ

   fputs($fp,$entries);

   flock($fp,LOCK_UN);

   fclose($fp);
   echo "当前æœ?.$users_online."人在¾U?;
  ?>


30:什么是模板,怎么�br />  我用的是phplib模板

  下面是其中几个函数的使用
  $T->Set_File("随便定义","模板文äšg.tpl");
  $T->Set_Block("在set_file中定义的","<!-- 来自模板 -->","随便定义");

  $T->Parse("在Set_Block中定义的","<!-- 来自模板 -->",true);

  $T->Parse("随便输出¾l“æžœ","在Set_File中定义的");
  讄¡½®å¾ªçŽ¯æ ¼å¼ä¸?
  <!--(多于一个空� BEGIN $handle(多于一个空�-->
  如何ž®†æ¨¡æ¿ç”Ÿæˆé™æ€ç½‘™å?/p>


  PHP代码:

  <?php

  //˜q™é‡Œä½¿ç”¨phplib模板

  ............

  ............

  $tpl->parse("output","html");

  $output = $tpl->get("output");// $output 为整个网™åµå†…å®?/p>


  function wfile($file,$content,$mode='w') {

  $oldmask = umask(0);

  $fp = fopen($file, $mode);

  if (!$fp) return false;

  fwrite($fp,$content);

  fclose($fp);

  umask($oldmask);

  return true;

  }

  // 写到文äšgé‡?/p>

  Wfile($FILE,$output);

  header("location:$FILE");//重定向到生成的网™å?/p>

  }

  ?>
  phplib下蝲地址 smarty下蝲地址


31:怎么用php解释字符   

  比如:输入2+2*(1+2),自动输出8  可以用eval函数

  PHP代码:

  <form method=post action="">

  <input type="text" name="str"><input type="submit">

  </form>

  <?php

  $str=$_POST['str'];

  eval("\$o=$str;");

  Echo "$o";

  ?>


  到此åQŒphp的问题解½{”就为大家介¾lå®Œæ¯•,希望能对各位有所帮助ã€?br />



]]>
PHPliB¾c»è¯¦è§?/title><link>http://www.aygfsteel.com/jackstudio/archive/2006/08/10/62765.html</link><dc:creator>jackstudio</dc:creator><author>jackstudio</author><pubDate>Thu, 10 Aug 2006 04:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackstudio/archive/2006/08/10/62765.html</guid><wfw:comment>http://www.aygfsteel.com/jackstudio/comments/62765.html</wfw:comment><comments>http://www.aygfsteel.com/jackstudio/archive/2006/08/10/62765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackstudio/comments/commentRss/62765.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackstudio/services/trackbacks/62765.html</trackback:ping><description><![CDATA[ <strong>转蝲åQ?a >http://bbs.cnaust.com/archiver/?tid-4849.html</a><br /><br />PHPliB¾c»è¯¦è§?br /><br /></strong>自已的BLOG½Iºé—´æ‰“不开了,放些资料在这ã€?br /><br /><br /><?php  <br />/*  <br />* PHPlib模板7.4中文ç‰?不èƒö之处˜q˜è¯·å„位指正)  <br />* (C) Copyright 1999-2000 NetUSE GmbH  <br />* Kristian Koehntopp  <br />* 彭赞¾Ÿ¤æ³¨é‡ŠäºŽ2004òq?æœ?QQ:9537075 TEL:13787877670  <br />* Email:mylovepzq@163.com  <br />*/  <br /><br /><br />/*˜q™é‡Œæ˜¯å®šä¹‰ç±»Template*/  <br />class Template  <br />{   <br />/* 如果讄¡½®äº†ï¼Œåˆ™è¾“出参æ•?*/  <br />var $classname = "Template";  <br />var $debug = false; //是否调试  <br />var $root = ".";//root为模板文件的存放目录  <br />var $file = array(); //包含了所有的模板文äšg名和模板名的数组  <br />var $varkeys = array(); //存放文本元素的键名 Â?br />var $varvals = array(); //存放文本元素的值 Â?br />var $unknowns = "remove";   <br />/* "remove" => 删除未定义的变量 "comment" => ž®†æœªå®šä¹‰çš„变量变成注é‡?"keep" => 保留未定义的变量 */  <br />var $halt_on_error = "yes";  <br />/* "yes" => 退å‡?"report" => 报告错误åQŒç‘ô¾l­è¿è¡? "no" => 忽略错误*/  <br />var $last_error = "";  <br />/* 上一‹Æ¡çš„错误保存在这é‡?*/  <br />/* public: 构造函敊W Â?br />* root: 模板目录  <br />* unknowns: 如何处理未知的变é‡?译者:变量定义为{ name })  <br />*/  <br /><br /><br />/*˜q™é‡Œæ˜¯å®šä¹‰å‡½æ•°Template*/  <br />function Template($root = ".", $unknowns = "remove")   <br />{   <br />if ($this->debug & 4)   <br />{   <br />echo "<p><b>模板:</b> root = $root, unknowns = $unknowns</p>\n";  <br />}  <br />$this->set_root($root);//默认ž®†æ–‡ä»¶ç›®å½•设¾|®äؓ相同的目录 Â?br />$this->set_unknowns($unknowns);//unknowns默认讄¡½®ä¸?remove"  <br />}  <br /><br /><br />/*˜q™é‡Œæ˜¯å‡½æ•°set_root*/  <br />function set_root($root)  <br />{   <br />if ($this->debug & 4)   <br />{   <br />echo "<p><b>讄¡½®æ ¹ç›®å½?</b> root = $root</p>\n";  <br />}  <br />if (!is_dir($root))  <br />{   <br />$this->halt("讄¡½®æ ¹ç›®å½? $root 不是一个无效的目录.");  <br />return false;  <br />}  <br />$this->root = $root;  <br />return true;  <br />}  <br /><br /><br />//˜q™é‡Œæ˜¯å‡½æ•°set_unknowns,卛_¯¹æœªçŸ¥å˜é‡çš„处理 Â?br />function set_unknowns($unknowns = "remove")  <br />{   <br />if ($this->debug & 4)  <br />{   <br />echo "<p><b>未知çš?</b> 未知 = $unknowns</p>\n";  <br />}  <br />$this->unknowns = $unknowns;  <br />}  <br /><br /><br />/*˜q™é‡Œæ˜¯å‡½æ•°set_file.......................................................*/  <br />//该方法在数组file中根æ?varname提供的键名加入值 Â?br />function set_file($varname, $filename = "")  <br />{   <br />if (!is_array($varname))//如果varname是数¾l„ Â?br />{   <br />if ($this->debug & 4)  <br />{   <br />echo "<p><b>讄¡½®æ–‡äšg:</b> (with scalar) varname = $varname, filename = $filename</p>\n";  <br />}  <br />if ($filename == "")//如果文äšgåäØ“½I?输出错误  <br />{   <br />$this->halt("讄¡½®æ–‡äšg:变量å?$varname æ–‡äšg名是½Iºçš„.");  <br />return false;  <br />}  <br />$this->file[$varname] = $this->filename($filename);  <br />}   <br />else  <br />{   <br />reset($varname);//ž®†varname的键名作为file数组的键名 Â?br />//ž®†é”®åå¯¹åº”çš„å€ég½œä¸ºfile数组的值 Â?br />while(list($v, $f) = each($varname))  <br />{   <br />if ($this->debug & 4)  <br />{   <br />echo "<p><b>set_file:</b> (with array) varname = $v, filename = $f</p>\n";  <br />}  <br />if ($f == "")  <br />{   <br />$this->halt("set_file: For varname $v filename is empty.");  <br />return false;  <br />}  <br />$this->file[$v] = $this->filename($f);  <br />}  <br />}  <br />return true;  <br />}  <br /><br /><br />//该方法取出某个父模板文äšg中的一个子模板  <br />//ž®†å…¶ä½œäؓ块来加蝲  <br />//òq¶ç”¨å¦å¤–一个模板变量取代之  <br />/* public: set_file(array $filelist)  <br />* comment: 讄¡½®å¤šä¸ªæ¨¡æ¿æ–‡äšg  <br />* filelist: åQˆå¥æŸ„,文äšg名)数组  <br />* public: set_file(string $handle, string $filename)  <br />* comment: 讄¡½®ä¸€ä¸ªæ¨¡æ¿æ–‡ä»¶Â Â?br />* handle: æ–‡äšg的句柄 Â?br />* filename: 模板文äšg名 Â?br />*/  <br />function set_block($parent, $varname, $name = "") {   <br />if ($this->debug & 4) {   <br />echo "<p><b>set_block:</b> parent = $parent, varname = $varname, name = $name</p>\n";  <br />}  <br />if (!$this->loadfile($parent)) {   <br />$this->halt("set_block: unable to load $parent.");  <br />return false;  <br />}  <br />if ($name == "") {   <br />$name = $varname;//如果没有指定模板变量的值就用子模板名作为模板变量名  <br />}  <br /><br />$str = $this->get_var($parent);  <br />$reg = "/[ \t]*<!--\s+BEGIN $varname\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $varname\s+-->\s*?\n?/sm";  <br />preg_match_all($reg, $str, $m);  <br />$str = preg_replace($reg, "{ " . "$name }", $str);  <br />$this->set_var($varname, $m[1][0]);  <br />$this->set_var($parent, $str);  <br />return true;  <br />}  <br /><br /><br />//该方法向Varnameå’Œvarkeys数组中添加新的键一值对  <br />/* public: set_var(array $values)  <br />* values: (变量名,å€?数组  <br />* public: set_var(string $varname, string $value)  <br />* varname: ž®†è¢«å®šä¹‰çš„变量名  <br />* value: 变量的值 Â?br />*/  <br />function set_var($varname, $value = "", $append = false) {   <br />if (!is_array($varname))//如果不是阵列  <br />{   <br />if (!empty($varname)) //如果是空的 Â?br />{   <br />if ($this->debug & 1) {   <br />printf("<b>set_var:</b> (with scalar) <b>%s</b> = â€?sâ€?lt;br>\n", $varname, htmlentities($value));  <br />}  <br />$this->varkeys[$varname] = "/".$this->varname($varname)."/";  <br />if ($append && isset($this->varvals[$varname])) {   <br />$this->varvals[$varname] .= $value;  <br />} else {   <br />$this->varvals[$varname] = $value;  <br />}  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (!empty($k)) {   <br />if ($this->debug & 1) {   <br />printf("<b>set_var:</b> (with array) <b>%s</b> = â€?sâ€?lt;br>\n", $k, htmlentities($v));  <br />}  <br />$this->varkeys[$k] = "/".$this->varname($k)."/";  <br />if ($append && isset($this->varvals[$k])) {   <br />$this->varvals[$k] .= $v;  <br />} else {   <br />$this->varvals[$k] = $v;  <br />}  <br />}  <br />}  <br />}  <br />}  <br /><br /><br />//定义函数clear_var  <br />function clear_var($varname) {   <br />if (!is_array($varname))//如果varname不是阵列  <br />{   <br />if (!empty($varname)) //如果是空的 Â?br />{   <br />if ($this->debug & 1) {   <br />printf("<b>clear_var:</b> (with scalar) <b>%s</b><br>\n", $varname);  <br />}  <br />$this->set_var($varname, "");  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (!empty($v)) {   <br />if ($this->debug & 1) {   <br />printf("<b>clear_var:</b> (with array) <b>%s</b><br>\n", $v);  <br />}  <br />$this->set_var($v, "");  <br />}  <br />}  <br />}  <br />}  <br /><br /><br />/*˜q™é‡Œæ˜¯å‡½æ•°unset_var,删除变量的定ä¹?/  <br />function unset_var($varname) {   <br />if (!is_array($varname)) {   <br />if (!empty($varname)) {   <br />if ($this->debug & 1) {   <br />printf("<b>unset_var:</b> (with scalar) <b>%s</b><br>\n", $varname);  <br />}  <br />unset($this->varkeys[$varname]);  <br />unset($this->varvals[$varname]);  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (!empty($v)) {   <br />if ($this->debug & 1) {   <br />printf("<b>unset_var:</b> (with array) <b>%s</b><br>\n", $v);  <br />}  <br />unset($this->varkeys[$v]);  <br />unset($this->varvals[$v]);  <br />}  <br />}  <br />}  <br />}  <br /><br /><br />//ž®†æ¨¡æ¿æ–‡ä»¶ä¸­çš„变化内å®ÒŽ›¿æ¢æˆ¼‹®å®šå†…容的操ä½?实现数据和显½Cºçš„分离  <br />function subst($varname) {   <br />$varvals_quoted = array();  <br />if ($this->debug & 4) {   <br />echo "<p><b>subst:</b> varname = $varname</p>\n";  <br />}  <br />if (!$this->loadfile($varname)) //装蝲模板文äšg,如果出错ž®±åœæ­¢Â Â?br />{   <br />$this->halt("subst: unable to load $varname.");  <br />return false;  <br />}  <br /><br />reset($this->varvals);  <br />while(list($k, $v) = each($this->varvals)) {   <br />$varvals_quoted[$k] = preg_replace(array(â€?\\\\/â€? â€?\$/â€?, array(’\\\\\\â€? ’\\\\$â€?, $v);  <br />}  <br /><br />//è¯Õd…¥æ–‡äšg内容到字½W¦ä¸²ä¸­åÆˆåœ¨ä¸‹è¡Œå¯¹å·²çŸ¥é”®å€ÆD¿›è¡Œæ›¿æ¢åƈ˜q”回¾l“果  <br />$str = $this->get_var($varname);  <br />$str = preg_replace($this->varkeys, $varvals_quoted, $str);  <br />return $str;  <br />}  <br /><br /><br />//同subst,只是直接输出¾l“果  <br />function psubst($varname) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>psubst:</b> varname = $varname</p>\n";  <br />}  <br />print $this->subst($varname);  <br /><br />return false;  <br />}  <br /><br /><br />//ž®†varname代表的一个或多个文äšg中的内容完成替换  <br />//存放在target为键值的varvals数组无素中或˜q½åŠ åˆ°å…¶åŽÂ Â?br />//˜q”回值和sub相同  <br />function parse($target, $varname, $append = false) {   <br />if (!is_array($varname)) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>parse:</b> (with scalar) target = $target, varname = $varname, append = $append</p>\n";  <br />}  <br />$str = $this->subst($varname);  <br />if ($append) {   <br />$this->set_var($target, $this->get_var($target) . $str);  <br />} else {   <br />$this->set_var($target, $str);  <br />}  <br />} else {   <br />reset($varname);  <br />while(list($i, $v) = each($varname)) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>parse:</b> (with array) target = $target, i = $i, varname = $v, append = $append</p>\n";  <br />}  <br />$str = $this->subst($v);  <br />if ($append) {   <br />$this->set_var($target, $this->get_var($target) . $str);  <br />} else {   <br />$this->set_var($target, $str);  <br />}  <br />}  <br />}  <br /><br />if ($this->debug & 4) {   <br />echo "<p><b>parse:</b> completed</p>\n";  <br />}  <br />return $str;  <br />}  <br /><br /><br />//同parseæ–ÒŽ³•,只是该方法将¾l“果输出  <br />function pparse($target, $varname, $append = false) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>pparse:</b> passing parameters to parse...</p>\n";  <br />}  <br />print $this->finish($this->parse($target, $varname, $append));  <br />return false;  <br />}  <br /><br /><br />//˜q”回所有的键一值对中的值所¾l„成的数¾l„ Â?br />function get_vars() {   <br />if ($this->debug & 4) {   <br />echo "<p><b>get_vars:</b> constructing array of vars...</p>\n";  <br />}  <br />reset($this->varkeys);  <br />while(list($k, $v) = each($this->varkeys)) {   <br />$result[$k] = $this->get_var($k);  <br />}  <br />return $result;  <br />}  <br /><br /><br />//æ ÒŽ®é”®å˜q”回对应的键一值勤对应的值 Â?br />function get_var($varname) {   <br />if (!is_array($varname)) //如果不是阵列  <br />{   <br />if (isset($this->varvals[$varname])) //如果变量不存在 Â?br />{   <br />$str = $this->varvals[$varname];  <br />} else {   <br />$str = "";  <br />}  <br />if ($this->debug & 2) {   <br />printf ("<b>get_var</b> (with scalar) <b>%s</b> = â€?sâ€?lt;br>\n", $varname, htmlentities($str));  <br />}  <br />return $str;  <br />} else {   <br />reset($varname);  <br />while(list($k, $v) = each($varname)) {   <br />if (isset($this->varvals[$v])) {   <br />$str = $this->varvals[$v];  <br />} else {   <br />$str = "";  <br />}  <br />if ($this->debug & 2) {   <br />printf ("<b>get_var:</b> (with array) <b>%s</b> = â€?sâ€?lt;br>\n", $v, htmlentities($str));  <br />}  <br />$result[$v] = $str;  <br />}  <br />return $result;  <br />}  <br />}  <br /><br /><br />//如果加蝲文äšgå¤ÞpÓ|,˜q”回错误òq¶åœæ­¢Â Â?br />function get_undefined($varname) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>get_undefined:</b> varname = $varname</p>\n";  <br />}  <br />if (!$this->loadfile($varname)) {   <br />$this->halt("get_undefined: unable to load $varname.");  <br />return false;  <br />}  <br /><br />preg_match_all("/{ ([^ \t\r\n }]+) }/", $this->get_var($varname), $m);  <br />$m = $m[1];  <br />//如果无法扑ֈ°åŒšw…çš„æ–‡æœ?˜q”回错误  <br />if (!is_array($m)) {   <br />return false;  <br />}  <br />//如果能找到大括号中的非空字符,则将其å€ég½œä¸ºé”®å€?¾l„成一个新的数¾l„ Â?br />reset($m);  <br />while(list($k, $v) = each($m)) {   <br />if (!isset($this->varkeys[$v])) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>get_undefined:</b> undefined: $v</p>\n";  <br />}  <br />$result[$v] = $v;  <br />}  <br />}  <br />//如是该数¾l„不为空ž®Þp¿”回该数组,否则ž®Þp¿”回错误 Â?br />if (count($result)) {   <br />return $result;  <br />} else {   <br />return false;  <br />}  <br />}  <br /><br /><br />//完成对str的最后的处理工作,利用¾cȝš„属性unknowns来确定对模板中无法处理的动态部分的处理æ–ÒŽ³•  <br />function finish($str) {   <br />switch ($this->unknowns) {   <br />case "keep": //保持不变  <br />break;  <br /><br />case "remove": //删除所有的非控制符  <br />$str = preg_replace(â€?{ [^ \t\r\n }]+ }/â€? "", $str);  <br />break;  <br /><br />case "comment"://ž®†å¤§æ‹¬å·ä¸­çš„HTML注释  <br />$str = preg_replace(â€?{ ([^ \t\r\n }]+) }/â€? "<!-- Template variable \\1 undefined -->", $str);  <br />break;  <br />}  <br /><br />return $str;  <br />}  <br /><br /><br />//ž®†å‚数变量对诮的数组中的值处理后输出  <br />function p($varname) {   <br />print $this->finish($this->get_var($varname));  <br />}  <br /><br /><br />//ž®†å‚数变量对应的数组中的值处理后˜q”回  <br />function get($varname) {   <br />return $this->finish($this->get_var($varname));  <br />}  <br /><br /><br />//‹‚€æŸ¥åƈ补充¾l™å®šçš„æ–‡ä»¶åÂ Â <br /><br />function filename($filename) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>filename:</b> filename = $filename</p>\n";  <br />}  <br />if (substr($filename, 0, 1) != "/")   <br />//如果文äšg名不是以斜杠开å¤?则表½Cºæ˜¯ç›¸å¯¹è·¯å¾„,ž®†å…¶è¡¥å……为完整的¾lå¯¹è·¯å¾„   <br />{   <br />$filename = $this->root."/".$filename;  <br />}  <br />//如果文äšg不存在 Â?br />if (!file_exists($filename)) {   <br />$this->halt("filename: file $filename does not exist.");  <br />}  <br />return $filename;//˜q”回文äšg名 Â?br />}  <br /><br /><br />//对变量名˜q›è¡Œå¤„理,ž®†æ­£åˆ™è¡¨è¾‘Ö¼ä¸­çš„æ•æ„Ÿå­—ç¬¦å˜äØ“è½¬ä¹‰å­—ç¬¦,òq¶åœ¨å˜é‡åä¸¤ç«¯åŠ ä¸Šå¤§æ‹¬å·Â Â <br />function varname($varname) {   <br />return preg_quote("{ ".$varname." }");  <br />}  <br /><br /><br />//该方法根据varname加蝲文äšg到键一值对中 Â?br />function loadfile($varname) {   <br />if ($this->debug & 4) {   <br />echo "<p><b>loadfile:</b> varname = $varname</p>\n";  <br />}  <br /><br />if (!isset($this->file[$varname])) //如果没有指定ž®Þp¿”加错误 Â?br />{   <br />// $varname does not reference a file so return  <br />if ($this->debug & 4) {   <br />echo "<p><b>loadfile:</b> varname $varname does not reference a file</p>\n";  <br />}  <br />return true;  <br />}  <br /><br />if (isset($this->varvals[$varname]))//如果已经加蝲了varname为名柄的文äšg,直接˜q”回真值 Â?br />{   <br />if ($this->debug & 4) {   <br />echo "<p><b>loadfile:</b> varname $varname is already loaded</p>\n";  <br />}  <br />return true;  <br />}  <br />$filename = $this->file[$varname];//句柄有效则取出对应的文äšg名 Â?br />$str = implode("", @file($filename));//ž®†æ–‡ä»¶çš„æ¯ä¸€è¡Œè¿žæŽ¥æˆä¸€ä¸ªå­—½W¦ä¸²Â Â <br />if (empty($str)) //字符串空说明文äšg½Iºæˆ–者不存在,˜q”回错误  <br />{   <br />$this->halt("loadfile: While loading $varname, $filename does not exist or is empty.");  <br />return false;  <br />}  <br />if ($this->debug & 4) {   <br />printf("<b>loadfile:</b> loaded $filename into $varname<br>\n");  <br />}  <br />$this->set_var($varname, $str);//如果文äšgä¸äØ“½I?ç”?varnameä½œäØ“å¥æŸ„,str为变量名  <br />//向键值对中添加新的键值 Â?br /><br />return true;  <br />}  <br /><br />//ž®†åˆ†æžç»“果保存到文äšg中去  <br />  function savetofile ($dir,$varname){   <br />   $data=$this->finish($this->get_var($varname));  <br />   $fp=fopen($dir,"w+");  <br />   fwrite($fp,$data);  <br />  }  <br /><br /><br />  //清除已赋值数¾l„ Â?br />   function renew(){   <br />    $this->varkeys=array();  <br />    $this->varvals=array();  <br />    $this->file=array();  <br />    }  <br /><br /><br />//出错提示òq¶ç»ˆæ­¢ç¨‹åºè¿è¡ŒÂ Â?br />function halt($msg) {   <br />$this->last_error = $msg;  <br /><br />if ($this->halt_on_error != "no") {   <br />$this->haltmsg($msg);  <br />}  <br /><br />if ($this->halt_on_error == "yes") {   <br />die("<b>¾lˆæ­¢.</b>");  <br />}  <br /><br />return false;  <br />}  <br /><br /><br />//出错提示  <br />function haltmsg($msg) {   <br />printf("<b>模板错误:</b> %s<br>\n", $msg);  <br />}  <br /><br />}  <br />?><br /><br /><br /><br /><br /><strong>SOLO</strong><div id="wmqeeuq" class="subtable altbg2 t_msg">PHPLIB Template¾cȝš„使用çš?诚然,¾|‘络上已¾lå¾ˆå¤šç›¸å…³çš„话题äº?但据我观å¯?中文的资料实在不å¤?且大多是讲的太笼¾l?没能全面阐述它的用法,即ä‹É看了˜q˜æ˜¯ä¸€çŸ¥åŠè§?所以本文就期望通过对它的比较全面的介绍,让你能达到入门的水åã^. <br />何谓"模板"技æœ?br /><br />我们的最初观察是ž®†ç•Œé¢å’Œå®žçŽ°ä»£ç åˆ†ç¦»å¼€æ?˜q™æ ·åšçš„目的是将¾ŸŽå·¥å’Œç¨‹åºå‘˜çš„工作分¼›Õd¼€æ?PHP的一个优ç‚ÒŽ˜¯å¯ä»¥æŠŠPHP代码嵌入HTML里面,˜q™æ ·ä½ å°±ä¸å¿…再把大段HTML代码用函数print()输出æ?<br />print("<table border=0 cellspacing=1 cellpadding=2 width=100%>"); <br />print("<tr>"); <br />print("<td>"); <br />print("我爱ä½?kiki"); <br />print("</td>"); <br />print("</tr>"); <br />print("</table>"); <br />˜q™æ®µä»£ç å¯¹ç•Œé¢ç»´æŠ¤æ¥è¯´æ˜¯ç›¸å½“å›°éš¾çš?除非½E‹åºå‘˜åš˜q™æ ·äº‹æƒ…且他å¯ÒŽ ·å¼è¡¨,HTML非常¾_ùN€?取而代之的我们ç”?br /><table border=0 cellspacing=1 cellpadding=2 width=100%> <br />    <tr> <br />        <td> <br />            <?php print("我爱ä½?kiki ");?> <br />        </td> <br />    </tr> <br /></table> <br />˜q™æ ·,做美工设计的只要不碰PHP代码,ž®±å¯ä»¥å¾ˆæ–¹ä¾¿åœ°æ”¹å˜è¿™ä¸ªè¡¨æ ¼çš„æ ·å¼,如果使用dreamweaver½{‰æ‰€è§å³æ‰€çš„å·¥å…?ž®†ä¼šæ›´åŠ æ–¹ä¾¿.<br /><br />现在的一个问题是,如果¾ŸŽå·¥æ­£åœ¨ä¿®æ”¹çš„话,½E‹åºå‘˜ä»éœ€è¦æŠŠ˜q™ä¸ªæ–‡äšg取回æ?才能改变里面的PHP代码,修改完后再交¾l™ç¾Žå·?˜q™æ ·å¾ªçޝ往å¤?往往要花费大量的旉™—´å’Œç²¾åŠ?如果你所在公司是采取˜q™ç§æ¨¡å¼çš„话,恐怕老板ä¸ÞZº†èŠ‚çœæ—‰™—´,会把很多界面设计也交¾l™ç¨‹åºå‘˜æ¥åš,毕竟他不会让你们ä»ÖM½•一个闲座着½{‰å¾….ä½œäØ“½E‹åºå‘˜çš„你此时可能会梦想:如果½E‹åºå‘˜åªè¦è´Ÿè´£å†™½E‹åºä»£ç ,不理会ä×o人烦íwçš„界面,那就太好äº?<br /><br />或许Fast Template诞生那刻èµ?我不敢确定它是最早的PHP模板处理¾c?但用èµäh¥¼‹®å®žå¾ˆæ–¹ä¾?,你的梦想ž®±å‡ ˜q‘实çŽ?½{–划们把东西交给ä½?当然里面的元素都写好了的,形如以下tpl.html<br /><table border=0 cellspacing=1 cellpadding=2 width=100%> <br />    <tr> <br />        <td> <br />            我爱你{MY_LOVE} <br />        </td> <br />    </tr> <br /></table> <br />你只需要在½E‹åºé‡Œç»™˜q™äº›å…ƒç´ (MY_LOVE)赋值就行了tpl.php<br />    $tpl->assign("MY_LOVE", "kiki"); <br />你基本上不用½Ž¡è¿™äº›å…ƒç´ çš„æ ·å¼(比如字体,宽度,高度½{?,所在位¾|?甚至˜q™äº›å…ƒç´ ž®†æ¥å¯èƒ½ä¸å†ä½¿ç”¨äº?与此同时,¾ŸŽå·¥é‚£è¾¹æŠŠå…ƒç´ æ”¾˜q›ä¸€ä¸ªHTML™åµé¢é‡?˜q™ä¸ª™åµé¢ž®±æ˜¯æˆ‘们所说的"模板"),他也不用担心会不ž®å¿ƒæŠŠä½ çš„程序给搞坏äº?然后做完后交¾l™ä¸€ä¸ªä¸“门负责程序和¾ŸŽå·¥¾l“合的äh(当然在国内也是程序员做这样事æƒ?,他很可能只需要很ž®çš„几个修改ž®±å¯ä»¥æŠŠä¸¤è€…结合的很好.˜q™æ ·å¯¹ä½ ,对美å·?都大大提高了工作效率,老板自然也会很高兴啦.<br /><br />所以我˜q™é‡Œæ‰€è¯´çš„"模板"技æœ?ž®±æ˜¯å¯ä»¥ž®†ç¨‹åºå’Œ¾ŸŽå·¥åˆ†ç¦»çš„æŠ€æœ?注意不是逻辑抽象层与表现层的分离.一æ?那样ž®†ä¼šè®©äh不知所äº?因䨓"逻辑抽象"˜q™å››ä¸ªå­—ž®±å·²¾lå¤ªæŠ½è±¡äº?且表现层òq¶åªæ˜¯ç¾Žå·¥æ‰€åšçš„æ¨¡æ¿.所ä»?å¾ˆå¤šäºø™¯•图把Fast Template,PHPLIB Template两个与Smarty相比è¾?在我看来,˜q™æ˜¯æ˜Žæ˜¾ä¸å¯¹çš?<br /><br />PHPLIB Template¾cÖM¹Ÿæ˜¯ä¸€ä¸ªç”¨PHP代码处理模板的一个类.也是本文要将要阐˜q°çš„一个模板类.同上面讲的一æ ?它能把模板中çš?元素"替换ä¸ÞZ½ ä¸ºå®ƒè®‘Ö®šçš„å€?,且处理的很很å¥?也容易扩å±?ç”׃ºŽä½¿ç”¨äº†preg_函数,所以速度也比较快.很多人都会提å‡ÞZ¸€ä¸ªæ„è§?使用模板会让你的代码˜qè¡Œçš„æ›´æ…?¼‹®å®žæ˜¯è¿™æ ïLš„,如果你ä‹É用嵌入式写法,会快一äº?如果把PHP˜qžåŒHTML全部写入PHPé‡?ç”?print("<html标签>"); ),可能会更å¿?但如果综合考虑整个™å¹ç›®çš„开发效çŽ?以及后期¾l´æŠ¤æ€§çš„è¯?˜q™äº›ä»£ä­h是可以承受的,而且慢也不会慢哪里去,真正的问题所在可能是你的模板实在是太大了.当然,你也可以改进˜q™ä¸ªæ¨¡æ¿¾c?让它˜qè¡Œçš„æ›´å¿?<br /><br />提è“vPHPLIB Template,å¾ˆå¤šäºø™‡ªç„¶ä¼šè”想起Fast Templateæ?我也不例å¤?å› äØ“ä¸¤è€…å¾ˆå¤šåœ°æ–šwƒ½å¾ˆç›¸˜q?å¯ÒŽ­¤,很多人都做了比较,在这里我ž®×ƒ¸å†è¯¦˜qîCº†,或许王晨的这½‹‡æ–‡ç« å€¼å¾—一çœ? 在PHP世界中选择最合适的模板<br /><br /><br />获取<br /><br />可以从这里下è½?[url]http://www.sanisoft.com/phplib/download.phpPHPLIB[/url] ,然后从压¾~©åŒ…中php目录下取出template.inc,ž®±å¯ä»¥ä¾›æˆ‘们使用äº?<br /><br />文档<br /><br />英文文档 [url]http://www.sanisoft.com/phplib/manual/template.php[/url] <br />我翻译的中文文档(仅做参è€? [url]http://www.4kiki.net/php_lib_template/[/url] <br />˜q˜æœ‰¾|‘上的很多资æº?可以通过google搜烦得到.<br /><br />从类里面注释可以知道,最新版本是2002/07/11 22:29:51çš?.12ç‰?所ä»?你或讔Rœ€è¦ä¿®æ”¹ä¸€äº›ä¸œè¥?在你懂的前提ä¸?我们˜q˜å¯ä»¥ä¸‹è½½å®ƒçš„PEAR集成版本([url]http://pear.php.net/package/HTML_Template_PHPLIB/download)[/url] , 不过你的PHP版本需要在4.3.0以上.<br /><br /><br /><br /><br /><div id="wmqeeuq" class="subtable altbg1"><span id="wmqeeuq" class="right">2005-11-8 23:19</span><b>SOLO</b></div><div id="wmqeeuq" class="subtable altbg2 t_msg">一个封装很好的¾cÕd¯¹ä½¿ç”¨è€?可能不是开发者本äº?来说,最大的好处ž®±æ˜¯,你无需知道¾cÕd†…部是怎么˜qä½œçš?只需知道如何利用它提供的接口做你惛_šçš„事情即å?所ä»?本文不打½Ž—具体讲˜q°PHPLIB Template(以下½Ž€¿U°Template)是如何将"元素"转换æˆ?å€?çš?你需要了解的æ˜?它能˜q™æ ·å?,而不æ˜?å®ƒäØ“ä»€ä¹ˆèƒ½˜q™æ ·å?. <br />好了,下面我们ž®±å¼€å§‹å®ƒçš„第一个应用了.<br /><br />先在我们要测试的¾|‘站的目录下å»ÞZ¸¤ä¸ªæ–‡ä»¶å¤¹incå’Œtemplate.目录inc下放引用文äšg,比如¾cÕdº“,函数库等,˜q™é‡Œæˆ‘们ž®±æŠŠtemplate.inc攑֦‚该目录下.tempate下放模板文äšg,我们先徏一个模板文件first.html,内容如下<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的½W¬ä¸€ä¸ªæ¨¡æ¿æ–‡ä»?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />真想对你è¯ß_¼šæˆ‘爱ä½?{lover} åQŒä½†æˆ‘却不敢è¯ß_¼Œå› äؓ我知道你çˆÞqš„人是 {man}. <br /><P> <br /><font color="#0000FF">{author}</font> äº?{date} <br /></BODY> <br /></HTML> <br />用inc,template命名文äšg目录,都是我的个äh习惯,你完全可以采取不同的方式.æˆ‘ç”¨æ‰©å±•åäØ“.html的名¿U°å‘½åæ¨¡æ¿æ–‡ä»?æ˜¯äØ“äº†æ–¹ä¾¿ç¾Žå·¥ç”¨frontpage或者dreamweaver修改,但这完全取决于你自己的习æƒ?<br /><br />first.html模板中的{lover},{man},{author}可以¿UîCØ“"模板变量",用花括号({})把变量名¿U°æ‹¬ä½å³¾l„成一个模板变é‡?模板变量ž®±æ˜¯æ¨¡æ¿å…ƒç´ çš„一¿Uã€‚你可能会担心它的命名问é¢?其实除了½Iºæ ¼(" "),回èžR换行("\r", "\n"),tab(\t)å¤–å®ƒéƒ½è¢«è§†äØ“æ˜¯æ­£¼‹®çš„.所ä»?br />{your-lover}<br />也是正确çš?˜q™ç‚¹æœ‰æ—¶å¯èƒ½ä¼šä×o你很痛苦,å› äØ“æ¨¡æ¿é‡Œçš„æœ‰äº›javascript代码可能无意间变没有äº?比如<br />if(a>b){document.write("i love u");}<br />中的<br />{document.write("i love u");}<br />ä¹Ÿè¢«è§†äØ“ä¸€ä¸ªå˜é‡äº†.上面的代码在你选的模板处理方式ä¸?可能会变成if(a>b){},从而导致javascript错误.ä¸ÞZ»€ä¹ˆä¼š"变没"了呢?½EåŽž®†åšè§£é‡Š.<br /><br />上面我们定义的三个变量{lover},{man},{author}的原因是,我们想随时改变它们的å€?下面我们ž®±æ¥åšè¿™ä¸ªå·¥ä½?新徏first.phpæ–‡äšg,内容如下:<br /><?php <br />//包含˜q›æ¨¡æ¿ç±» template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实ä¾?<br />$tpl = new Template("template", "keep"); //æ³? <br /><br />//ž®†æ•´ä¸ªæ–‡ä»¶è¯»˜q›æ¥ <br />$tpl->set_file("main", "first.html"); //æ³? <br /><br />//¾l™æ–‡ä»¶ä¸­çš„æ¨¡æ¿å˜é‡èµ‹å€?<br />$tpl->set_var("lover", "kiki"); //æ³? <br />$tpl->set_var("man", "ccterran"); //æ³? <br />$tpl->set_var("author", "iwind"); //æ³? <br /><br />//完成替换 <br />$tpl->parse("mains", "main"); //æ³? <br /><br />//输出替换的结æž?<br />$tpl->p("mains"); //æ³? <br /><br />?> <br />‹¹è§ˆå™¨ä¸­‹¹è§ˆ˜q™ä¸ªæ–‡äšg,你就会发现输å‡?br /><br /><br />真想对你è¯ß_¼šæˆ‘爱ä½?kiki åQŒä½†æˆ‘却不敢è¯ß_¼Œå› äؓ我知道你çˆÞqš„人是 ccterran. <br /><br />iwind äº?{date} <br /><br /><br />˜q™ä¸€åˆ‡æ­£å¦‚我们所期望çš?除了{date}).æ³?<br />$tpl = new Template("template", "keep"); <br />是创å»ÞZ¸€ä¸ªTemplate¾cȝš„实例对象.它有两个参数,都是可选的.<br /><br />½W¬ä¸€ä¸ªå‚数是模板所在目å½?如果不设¾|®åˆ™ä¸?."(卛_½“前目å½?,ç”׃ºŽæˆ‘们刚才把模板文件first.html攑ֈ°template下了,æ‰€ä»¥è¿™é‡ŒäØ“template.注意它一般ä‹É用相对èµ\å¾?如果你用相对于根目录(比如 /phplib/test/template)çš„èµ\å¾?ž®×ƒ¼šå‡ºçް<br />Template Error: set_root: /phplib/test/template is not a directory. <br />Halted. <br />的错è¯?<br /><br />½W¬äºŒä¸ªå‚数是指定模板¾cÕd¯¹"未完成处ç?变量的处理方å¼?所è°?未完成处ç?指的是模板变量未赋å€?块未完成替换工作(下面一节将讲到å®?,它有三个值可é€?分别ä¸?keep","comment","remove":<br />å¦‚æžœè®¾äØ“"keep",˜q™äº›å˜é‡ž®†åŽŸž®ä¸åŠ¨çš„ä¿ç•™ä¸‹æ¥.<br />å¦‚æžœè®¾äØ“"comment",那么会在报错的同æ—?ž®†æœªå®Œæˆå¤„理的变量全部è{换成HTML的注é‡?<br />å¦‚æžœè®¾äØ“"remove",未完成处理的变量便会被删é™?˜q™ä¹Ÿæ˜¯é»˜è®¤çš„æƒ…况).<br /><br />所以在上面的例子中,我指定的æ˜?keep",于是{date}å› äØ“æœªèµ‹å€?所以还保留着.而缺省的情况下是"remove",所ä»?如果我这样创建实例对è±?br />$tpl = new Template("template", "remove");<br />或è€?br />$tpl = new Template("template");<br />的话,输出ž®±å˜æˆäº†<br />真想对你è¯ß_¼šæˆ‘爱ä½?kiki åQŒä½†æˆ‘却不敢è¯ß_¼Œå› äؓ我知道你çˆÞqš„人是 ccterran. <br /><br />iwind äº?br /><br /><br /><br />可以看出{date}被删除了.如果æ˜?br />$tpl = new Template("template", "comment");<br /><br />它的¾l“æžœž®†æ˜¯<br /><br /><br />真想对你è¯ß_¼šæˆ‘爱ä½?kiki åQŒä½†æˆ‘却不敢è¯ß_¼Œå› äؓ我知道你çˆÞqš„人是 ccterran. <br /><br />iwind äº?br /><br /><br />看è“v来和"remove"方式一æ ?但查看源文äšg,我们会发çŽ?br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的½W¬ä¸€ä¸ªæ¨¡æ¿æ–‡ä»?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />真想对你è¯ß_¼šæˆ‘爱ä½?kiki åQŒä½†æˆ‘却不敢è¯ß_¼Œå› äؓ我知道你çˆÞqš„人是 ccterran. <br /><P> <br /><font color="#0000FF">iwind</font> äº?<!-- Template variable date undefined --> <br /></BODY> <br /></HTML> <br /><br />其中æœ?lt;!-- Template variable date undefined -->的错误信æ?告诉我们date变量未定ä¹?赋å€?.<br /><br />ç”?comment"或许对程序的调试很有帮助.<br /><br />我们再回头看çœ?br />if(a>b){document.write("i love u");} <br />ä¸?br />{document.write("i love u");} <br />ä¼?变没"的问é¢?是因为模板类视之为模板变é‡?但你没有¾l™å®ƒæŒ‡å®šå€?当然会没æœ?,且你没有指定"keep"方式来处理未定义变量,所以它ž®Þp¢«"remove"äº?<br /><br />所以在模板使用˜q‡ç¨‹ä¸­åº”该多多注意这些问é¢?<br /><br />æ³?是将一个模板文件加载进æ?事实上你可以一‹Æ¡åŠ è½½å¤šä¸ªæ¨¡æ?在第四节ž®†è®²åˆ°è¿™ä¸ªé—®é¢?.你可以想è±?br />$tpl->set_file("main", "first.html"); <br />æŠ?first.html"内容¾l™å˜é‡?main"(ž®½ç®¡å¾ˆå¤šäººç§°ä¹‹äØ“"句柄",但本文决定不è°?句柄"),所ä»?main"的值就变成模板的内容了,包含着那些模板变量.<br /><br />æ³?,æ³?,æ³?,是给模板变量赋å€?值是什ä¹?你自然可以随便定.比如你还可以<br />$tpl->set_var("lover", "kiki1"); <br />$tpl->set_var("man", "ccterran1"); <br />$tpl->set_var("author", "iwind_php"); <br />你也可以一‹Æ¡å®Œæˆç»™ä¸€åˆ—的变量赋å€?˜q™æ ·<br />$tpl->set_var( <br />array("lover"=>"kiki", "man"=>"ccterran", "author"=>"iwind") <br />); <br />如果你想讄¡½®ä¸€ä¸ªå˜é‡çš„å€égØ“½Iºçš„è¯?可以<br />$tpl->set_var("man", ""); <br />或è€?br />$tpl->set_var("man"); <br /><br />æ³?,是执行将上面$tpl->set_var¾l™æ¨¡æ¿å˜é‡æŒ‡å®šçš„值替换掉模板中的模板变量˜q™ä¸ªæ“ä½œ,½W¬ä¸€ä¸ªå‚数即为模板分析的¾l“æžœ,也可以视ä¸ÞZ¸€ä¸ªå˜é‡?<br /><br />当然æ³?çš?$tpl->p("mains"); ž®±å°†æ¨¡æ¿åˆ†æžçš„结果如你所愿的输出å•?<br /><br />å–?恭喜ä½?ä½ çš„½W¬ä¸€ä¸ªæ¨¡æ¿ç±»åº”用ž®±å®Œæˆäº†.你可能不ž®å¿ƒå¼„错了哪个地æ–?模板¾c»é»˜è®¤æƒ…况下会自动打印出错误提示çš?æ ÒŽ®˜q™äº›æç¤º,你就很容易就可以扑ևºé—®é¢˜æ‰€åœ?在第6节将会具体讲åˆ?<br /><br /><br /><strong>SOLO</strong><div id="wmqeeuq" class="subtable altbg2 t_msg">PHPLIB Template入门¾pÕdˆ— - 3 块的应用 <br />在上一节中,我们知道模板元素的一¿U?模板变量,òq¶çŸ¥é“如何在½E‹åºä¸­ç»™å®ƒèµ‹å€?使之呈现我们惌™¦çš„东è¥?˜q™å¯¹ä¸€èˆ¬çš„½Ž€å•网™å‰|¥è¯?或许ž®±å·²¾lå¤Ÿç”¨äº†.现在我们设想一½Eå¾®å¤æ‚的一¿Uæƒ…å†?在template目录下新å»ÞZ¸€ä¸ªsecond.html模板文äšg,内容ä¸?<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的½W¬äºŒä¸ªæ¨¡æ¿æ–‡ä»?</TITLE> <br /></HEAD> <BODY> <br />下面是一个列è¡?<br /><UL> <br /><li>张三 的成¾l©æ˜¯ 82 <br /><li>李四 的成¾l©æ˜¯ 90 <br /><li>王儿 的成¾l©æ˜¯ 60 <br /><li>éºÕd­ 的成¾l©æ˜¯ 77 <br /></UL> <br /></BODY> <br /></HTML> <br />上面的列表中列出äº?张三","李四","王二","éºÕd­"å››äh的成¾l?假设要用PHP代码嵌入HTML的方式输出的è¯?你可能是˜q™æ ·å†™çš„:<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的½W¬äºŒä¸ªæ¨¡æ¿æ–‡ä»?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />下面是一个列è¡?<br /><?php <br />$result = mysql_query("SELECT username,score FROM my_tbl"); <br />?> <br /><UL> <br /><?php <br />while ($row = mysql_fetch_array($result)) <br />{ <br />?> <br /><li><?=$row["username"]?> 的成¾l©æ˜¯ <?=$row["score"]?> <br /><?php <br />} <br />?> <br /></UL> <br /></BODY> <br /></HTML> <br /><br />˜q™æ ·å†™å¾ˆé€‚合PHP新手,但你很快发现你或者美工改˜q™ä¸ªåˆ—表样式的时候需要多么的ž®å¿ƒ¾˜¼ç¿¼,特别是美å·?如果他不懂你写得PHP代码,那么他会¾lˆæ—¥ç”Ÿåœ¨ææƒ§ä¹‹ä¸­!因䨓½Eå¾®çš„不ž®å¿ƒ,可能ž®×ƒ¼šå¸¦æ¥½E‹åºçš„运行错è¯?而且如果他想把这个列表从一个地方移到另一个地æ–?也是相当不容易的.äºŽæ˜¯ä½œäØ“½E‹åºå‘˜çš„你不得不把美工(虽然你做的可能性更大)修饰˜q‡çš„™åµé¢é‡æ–°å®¡æŸ¥ä¸€‹Æ¡ï¼Œæ— åŞ中就造成è´ÒŽ—¶è´¹åŠ›ã€?br /><br />现在好了,有了Template模板¾c?你可以把你的代码从模板中抽取出来äº?你可能会˜q™æ ·ä¿®æ”¹second.html模板:<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的½W¬äºŒä¸ªæ¨¡æ¿æ–‡ä»?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />下面是一个列è¡?<br /><UL> <br /><li>{username1} 的成¾l©æ˜¯ {score1} <br /><li>{username2} 的成¾l©æ˜¯ {score2} <br /><li>{username3} 的成¾l©æ˜¯ {score3} <br /><li>{username4} 的成¾l©æ˜¯ {score4} <br /></UL> <br /></BODY> <br /></HTML> <br /><br />昄¡„¶,你采取了一个良好的命名方式,ç”?,2,3..来表½Cºæ¯ä¸€è¡Œæ•°æ?然后你在你的½E‹åºé‡Œåó@环给˜q™äº›å˜é‡èµ‹å€?也是不难çš?比如:(second.php)<br /><br /><?php <br />//包含˜q›æ¨¡æ¿ç±» template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实ä¾?<br />$tpl = new Template("template"); <br /><br />//ž®†æ•´ä¸ªæ–‡ä»¶è¯»˜q›æ¥ <br />$tpl->set_file("main", "first.html"); <br /><br />//˜qžæŽ¥æ•°æ®åº“,选择数据库略 <br />省略..... <br /><br />//查询¾l“æžœ <br />$result = mysql_query("SELECT username,score FROM my_tbl"); <br /><br />//¾l™æ–‡ä»¶ä¸­çš„æ¨¡æ¿å˜é‡èµ‹å€?<br />$i=0; <br />while ($row = $idb->fetch_array($result)) <br />{ <br />$i++; <br />$tpl->set_var("username" . $i, $row["username"]); <br />$tpl->set_var("score" . $i, $row["score"]); <br />} <br /><br />//完成替换 <br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->pparse("mains", "main"); <br /><br />?> <br /><br />˜q™æ ·ä½ ä¹Ÿèƒ½å¾—到正¼‹®ç»“æž?在特ŒDŠæƒ…况下你或讔Rœ€è¦è¿™æ ·åš.但Template提供了一个更方便çš?大的模板变量",那就是块.æˆ‘ä¹‹æ‰€ä»¥ç§°ä¹‹äØ“"大的模板变量",是因为它也可以视为可以包含其他模板变量的变量.形式å¦?br /><UL> <br /><!-- BEGIN list --> <br /><li>{username} 的成¾l©æ˜¯ {score} <br /><!-- END list --> <br /></UL> <br /><br />即用<!-- BEGIN 块名¿U?-->å’?lt;!-- END 块名¿U?-->定义了一个名为list的块,(注意:我在˜q™é‡Œä¸ÞZº†æ–¹ä¾¿ç†è§£,åªç§°ä¹‹äØ“å—å¿U?.˜q™ä¸ªå—里面又包含一些HTML代码(<li>½{‰ç­‰)以及模板变量({username},{score}).<br /><br />在讲˜q°å¦‚何用块输出列表之å‰?我们先谈一下块的定义格å¼?<br /><br />首先<!-- BEGIN list -->å’?lt;!-- END list --> 都要各自ä¸ÞZ¸€è¡?亦即下面的块的定义是错误çš?br />1,<br />同行çš?<!-- BEGIN list --> <br /><li>{username} 的成¾l©æ˜¯ {score} <br /><!-- END list --> <br />2,<br /><!-- BEGIN list --> <br /><li>{username} 的成¾l©æ˜¯ {score} <br /><!-- END list --> 同行çš?<br /><br /><!--å’?->都是固定çš?也就是说只能是两个中划线("-"),且它们与BEGIN list之间都至ž®‘有一个空(½Iºæ ¼æˆ–tab),看下面的例子<br /><!--BEGIN list --> <br /><!-- BEGIN list--> <br />它们都是错误的块的定义方æ³?因䨓½W¬ä¸€ä¸?lt;!--与BEGIN之间臛_°‘应该有一个空,½W¬äºŒä¸?->与list之间臛_°‘有一个空.<br /><br />BEGIN/ENDå’Œlist之间也应该有一个空æ ?注意是有且仅有一个空æ ?不能多也不能ž®?<br /><br />å—çš„åç§°å»ø™®®ä½ åªä½¿ç”¨å­—符,æ•°å­—,下划¾U¿ä»¥åŠå®ƒä»¬çš„¾l„合.<br /><br />BEGINå’ŒEND两个词语都应该是大写的ã€?br /><br />好了,下面开始探讨如何是˜q™ä¸ªå—变成一个列è¡?我们可以˜q™æ ·<br /><?php <br />//包含˜q›æ¨¡æ¿ç±» template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实ä¾?<br />$tpl = new Template("template"); <br /><br />//ž®†æ•´ä¸ªæ–‡ä»¶è¯»˜q›æ¥ <br />$tpl->set_file("main", "second.html"); <br /><br />//加蝲块list <br />$tpl->set_block("main", "list", "lists"); <br /><br />//˜qžæŽ¥æ•°æ®åº“,选择数据库略 <br />省略..... <br /><br />//查询¾l“æžœ <br />$result = mysql_query("SELECT username,score FROM my_tbl"); <br /><br />//¾l™æ–‡ä»¶ä¸­çš„æ¨¡æ¿å˜é‡èµ‹å€?<br />while ($row = $idb->fetch_array($result)) <br />{ <br />$tpl->set_var("username", $row["username"]); <br />$tpl->set_var("score", $row["score"]); <br />$tpl->parse("lists", "list", true); <br />} <br /><br />//完成替换 <br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->pparse("mains", "main"); <br /><br />?> <br /><br />è®îC½æŠŠä½ çš„æ•°æ®åº“˜qžæŽ¥å†™åœ¨æˆ‘省略的部分,ž®±å¯ä»¥æ‰“印正¼‹®çš„¾l“æžœ,一å¦?br /><br />下面是一个列è¡?<br /><br />张三 的成¾l©æ˜¯ 82 <br />李四 的成¾l©æ˜¯ 90 <br />王儿 的成¾l©æ˜¯ 60 <br />éºÕd­ 的成¾l©æ˜¯ 77 <br /><br /><br /><br />可以看到在PHP代码里有两个东西 <br />$tpl->set_block("main", "list", "lists"); //代码1 <br />$tpl->parse("lists", "list", true); <br />ž®×ƒ¸å¯æ€è®®çš„将整个块åó@环输å‡ÞZº†.代码1用来加蝲模板main中的块list,òq¶ç»™å…¶ä¸€ä¸ªåå­—lists,listž®±æ˜¯æ¨¡æ¿ä¸­çš„一个大变量,它的内容ž®±æ˜¯<li>{username} 的成¾l©æ˜¯ {score}å?<br />"list" = "<li>{username} 的成¾l©æ˜¯ {score}" <br />之所以用lists命名,æ˜¯äØ“äº†ç¨‹åºçš„å¯è¯»æ€?也就是说我很å®ÒŽ˜“ž®ÞqŸ¥é“XXXs是XXX块的名称.<br /><br />使用set_block后,模板中的块内å®?br /><!-- BEGIN list --> <br /><li>{username} 的成¾l©æ˜¯ {score} <br /><!-- END list --> <br />ž®Þp¢«lists代替äº?于是我们的模板就变成äº?br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> 我的½W¬äºŒä¸ªæ¨¡æ¿æ–‡ä»?</TITLE> <br /></HEAD> <br /><br /><BODY> <br />下面是一个列è¡?<br /><UL> <br />{lists} <br /></UL> <br /></BODY> <br /></HTML> <br /><br />块变成了一个变é‡?lists)!下面只要ž®†lists变量替换成我们想要的ž®Þp¡Œäº?<br /><br />代码二所处的循环<br />while ($row = $idb->fetch_array($result)) <br />{ <br />$tpl->set_var("username", $row["username"]); <br />$tpl->set_var("score", $row["score"]); <br />$tpl->parse("lists", "list", true); //代码2 <br />} <br />每一‹Æ¡åó@çŽ?两个set_var分别¾l™username,score赋å€?然后"list"ž®±å˜æˆäº†<br />"list" = "<li>具体的名å­?的成¾l©æ˜¯ 具体的分æ•?<br />代码2ž®±æ˜¯ž®†list分析后的内容赋给lists,˜q™æ ·ž®±å®Œæˆäº†æ•´ä¸ªå—的分析.<br /><br />parse½W¬ä¸‰ä¸ªå‚数可以设¾|®list中的值是直接存在lists里面,˜q˜æ˜¯é™„加在原有å€ég¹‹å?我们˜q™é‡Œè®„¡½®ä¸ºtrue,说明是附加在原有å€ég¹‹å?才得以每个list的值都会显½Cºå‡ºæ?åä¹‹è®¾äØ“false的话,后面的å€ég¼šè¦†ç›–掉以前的å€?最¾lˆçš„¾l“果会是<br /><br /><br />下面是一个列è¡?<br /><br />éºÕd­ 的成¾l©æ˜¯ 77 <br /><br /><br />¾lég¸Šæ‰€˜q?Template模板¾cÈš„æ›¿æ¢æ–¹å¼æ˜?<br />1,用set_blockž®†æ¨¡æ¿ä¸­çš„listå?或者你命名的其他块)替换成变量lists.<br />2,用set_var¾l™list块中的变量赋å€?br />3,æŠŠèµ‹å€¼åÆˆæ‰§è¡Œæ›¿æ¢åŽçš„list内容依次¾l™lists<br />4,完成分析<br /><br /><div id="wmqeeuq" class="subtable altbg1"><span id="wmqeeuq" class="right">2005-11-8 23:20</span><b>SOLO</b></div><div id="wmqeeuq" class="subtable altbg2 t_msg">在PHP½E‹åºé‡?我们常常会把"公用代码"æˆ?公用部分"写进一个文仉™‡Œ,前者象我们的系¾lŸé…¾|®æ–‡ä»?比如config.php,或者公共函数都写入一个functions.phpæ–‡äšgé‡?后者象一个站炚wƒ½éœ€è¦ç”¨åˆ°çš„™åµé¢å¤´éƒ¨,ž®ùNƒ¨.˜q™æ ·åšçš„好处是可以很方便的维护站ç‚?而如果这个公用部分要有所改动,无需再去æ”ÒŽ¯ä¸€ä¸ªé¡µé?大大减少了我们的工作é‡? <br />以前你或许用require,include(require_once,include_once)引进一个公用的™åµé¢å¤´éƒ¨,¼‹®å®žæ–¹ä¾¿è€Œæœ‰æ•?现在我们用Template模板¾cÖM¹Ÿå¯ä»¥å®žçްäº?òq¶ä¸”可以很方便的把一个页面随意插入另一个模板的ä»ÀL„åœ°æ–¹.如果你想也把要插˜q›çš„™åµé¢åšæˆå«æœ‰å˜é‡çš„æ¨¡æ¿çš„è¯?那么你会发现模板¾cÖM¼šæŠŠè¿™ä¸ªå·¥ä½œå¤„理的很好.<br /><br />在template目录下新å»ÞZ¸‰ä¸ªæ–‡ä»¶third.html,header.html,footer.html.å†…å®¹åˆ†äØ“å¦‚ä¸‹<br />third.html <br /><!-- ˜q™æ˜¯™åµé¢å¤´éƒ¨ --> <br />{header} <br /><BODY> <br />下面是一个列è¡?<br /><UL> <br /><!-- BEGIN list --> <br /><li>{username} 的成¾l©æ˜¯ {score} <br /><!-- END list --> <br /></UL> <br /><!-- ˜q™æ˜¯™åµé¢è„šéƒ¨ --> <br />{footer} <br /></BODY> <br /></HTML> <br /><br />header.html<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> {title} </TITLE> <br /></HEAD> <br /><br />footer.html<br /><P>author &copy; iwind <br /><br />你也看到了,我们前几节的例子中都是用<br />$tpl->set_file("main", "模板文äšgå?); <br />æ¥åŠ è½½æ¨¡æ¿æ–‡ä»¶çš„ã€‚åªæ‰€ä»¥å‘½åäØ“"main",是因为我们想¾l™å®ƒä¸€ä¸ªæ„ä¹‰ï¼šä¸ÀL¨¡æÑ€‚这里的third.htmlž®±å¯ä»¥ç§°ä¹‹äؓ“主模板”,而欲嵌入ä¸ÀL¨¡æ¿third.htmlçš„{header}变量所在位¾|®çš„æ¨¡æ¿æ–‡äšgheader.html,则可以称ä¸?子模æ?.同样footer.html也是一ä¸?子模æ?,我们æƒÏxŠŠå®ƒæ”¾åˆîC¸»æ¨¡æ¿é‡Œçš„{footer}位置.一个主模板内可以随意嵌入不限内å®?ž®ºå¯¸å¤§å°,格式½{‰çš„ä»ÖM½•多个子模æ? <br /><br />下面我们开始我们的PHP½E‹åº.<br /><br />先是创徏一个类的实例对è±?br />//包含˜q›æ¨¡æ¿ç±» template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实ä¾?<br />$tpl = new Template("template"); <br /><br />//读进三个模板文äšg的内å®?分别¾l™å˜é‡?main", "my_header", "my_footer" <br />$tpl->set_file("main", "third.html"); <br />$tpl->set_file("my_header", "header.html"); <br />$tpl->set_file("my_footer", "footer.html"); <br /><br />//执行my_header,my_footer里的模板变量替换,òq¶æŠŠæœ€¾lˆç»“果分别赋¾l™ä¸»æ¨¡æ¿ä¸­çš„header,footer <br />$tpl->parse("header", "my_header"); <br />$tpl->parse("footer", "my_footer"); <br /><br />//然后完成ä¸ÀL¨¡æ¿å†…变量的替æ?òq¶è¾“å‡ÞZ¸»æ¨¡æ¿åˆ†æžåŽçš„内容 <br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->p("mains"); <br /><br />于是,我们便可以通过查看源文件确信header.html,footer.html两个子模板文件的内容已经被加˜q›ä¸»æ¨¡æ¿é‡Œäº†.<br /><br /><!-- ˜q™æ˜¯™åµé¢å¤´éƒ¨ --> <br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> </TITLE> <br /></HEAD> <br /><BODY> <br />下面是一个列è¡?<br /><UL> <br /><!-- BEGIN list --> <br /><li> 的成¾l©æ˜¯ <br /><!-- END list --> <br /></UL> <br /><!-- ˜q™æ˜¯™åµé¢è„šéƒ¨ --> <br /><P>author &copy; iwind <br /></BODY> <br /></HTML> <br /><br />你会发现,所有的变量都没äº?包括我们未赋值的{title},{username},{score}.˜q™æ˜¯å› äؓ我们在创建对象时,½W¬äºŒä¸ªå‚数未讄¡½®,而自动采用了"remove"<br />$tpl = new Template("template"); <br />å’?br />$tpl = new Template("template", "remove"); <br />的效果是一æ ïLš„.<br /><br />如果我们想给˜q™äº›å˜é‡ä¹Ÿèµ‹å€?那么æ–ÒŽ³•和单个模杉K‡Œå˜é‡çš„分析方法是一æ ïLš„.<br />//è¯ÀL¨¡æ¿å†…容进变量 <br />$tpl->set_file("main", "third.html"); <br />$tpl->set_file("my_header", "header.html"); <br />$tpl->set_file("my_footer", "footer.html"); <br /><br />//讄¡½®å­æ¨¡æ¿header.html里的变量titleçš„å€?<br />$tpl->set_var("title", "˜q™ä¸ªæ˜¯ç½‘™å‰| ‡é¢?); <br /><br />//以下分析ä¸ÀL¨¡æ‰K‡Œçš„块的内å®?<br />//讄¡½®å?<br />$tpl->set_block("main", "list", "lists"); <br />$array = array("张三" => 82, "李四" => 90, "王二" => 60, "éºÕd­" => 77); <br />foreach ($array as $username=>$score) <br />{ <br />    $tpl->set_var("username", $username); <br />    $tpl->set_var("score", $score); <br />    $tpl->parse("lists", "list", true); <br />} <br /><br />æ‰€æœ‰ç¨‹åºäØ“<br /><?php <br />//包含˜q›æ¨¡æ¿ç±» template.inc <br />require "inc/template.inc"; <br /><br />//创徏一个实ä¾?<br />$tpl = new Template("template"); <br /><br />//ž®†æ•´ä¸ªæ–‡ä»¶è¯»˜q›æ¥ <br />$tpl->set_file("main", "third.html"); <br />$tpl->set_file("my_header", "header.html"); <br />$tpl->set_file("my_footer", "footer.html"); <br /><br />//讄¡½®header.html里的变量titleçš„å€?<br />$tpl->set_var("title", "˜q™ä¸ªæ˜¯ç½‘™å‰| ‡é¢?); <br /><br />//讄¡½®å?<br />$tpl->set_block("main", "list", "lists"); <br />$array = array("张三" => 82, "李四" => 90, "王二" => 60, "éºÕd­" => 77); <br />foreach ($array as $username=>$score) <br />{ <br />$tpl->set_var("username", $username); <br />$tpl->set_var("score", $score); <br />$tpl->parse("lists", "list", true); <br />} <br /><br />//执行my_header,my_footer里的模板变量替换,òq¶æŠŠæœ€¾lˆç»“果分别赋¾l™ä¸»æ¨¡æ¿ä¸­çš„header,footer <br />$tpl->parse("header", "my_header"); <br />$tpl->parse("footer", "my_footer"); <br /><br />//完成ä¸ÀL¨¡æ¿å†…变量的替æ?<br />$tpl->parse("mains", "main"); <br /><br />//输出 <br />$tpl->p("mains"); <br /><br />?> <br /><br />è¾“å‡ºçš„ç»“æžœäØ“<br /><!-- ˜q™æ˜¯™åµé¢å¤´éƒ¨ --> <br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <br /><HTML> <br /><HEAD> <br /><TITLE> ˜q™ä¸ªæ˜¯ç½‘™å‰| ‡é¢?</TITLE> <br /></HEAD> <br /><BODY> <br />下面是一个列è¡?<br /><UL> <br /><br /><li>张三 的成¾l©æ˜¯ 82 <br /><li>李四 的成¾l©æ˜¯ 90 <br /><li>王二 的成¾l©æ˜¯ 60 <br /><li>éºÕd­ 的成¾l©æ˜¯ 77 <br /></UL> <br /><!-- ˜q™æ˜¯™åµé¢è„šéƒ¨ --> <br /><P>author &copy; iwind <br /></BODY> <br /></HTML> <br /><br />一切都是我们所期望çš?<br /><br />在这个程序里,我们ç”?br />$tpl->set_block("main", "list", "lists"); <br />加蝲一个块.其实它的½W¬ä¸€ä¸ªå‚æ•îCؓ该块所在父变量,如果˜q™ä¸ªå—在header.htmlé‡?那么恐怕要˜q™æ ·å†™äº†<br />$tpl->set_block("my_header", "list", "lists"); <br />但分析方法还是一æ ïLš„.<br /><br />从以往和这节中的例å­?我们可以看出æ?定义一个模板变量{var}值的æ–ÒŽ³•是用<br />$tpl->set_var("var_name", "var_value"); <br />但把一个变量的值给另一个变量就需要用parse.<br />$tpl->parse("target_name", "from_name", true); <br />或è€?br />$tpl->parse("target_name", "from_name", false); <br />使用parsež®±å…ˆæ‰§è¡Œfrom_name大变量的模板变量的替æ?然后再把所得结果赋¾l™target_name.<br /><br />一个变量{varname}无论在模板的何处(块里é?子模杉K‡Œ),定义的方法都是一æ ïLš„.<br /><br />子模杉K‡Œ˜q˜å¯ä»¥åµŒå…¥æ–°çš„子模板,¿UîC¹‹ä¸?多重嵌套",分析的方法都是一æ ïLš„,只是一般用不到.块也可以多重嵌套,而且非常有用,使得模板可以设计的可以很清晰,˜q™å°±æ˜¯æˆ‘们下一节的内容äº?</div></div></div></div><img src ="http://www.aygfsteel.com/jackstudio/aggbug/62765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackstudio/" target="_blank">jackstudio</a> 2006-08-10 12:17 <a href="http://www.aygfsteel.com/jackstudio/archive/2006/08/10/62765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ÀÖ²ýÊÐ</a>| <a href="http://" target="_blank">¹þÃÜÊÐ</a>| <a href="http://" target="_blank">ÆÜϼÊÐ</a>| <a href="http://" target="_blank">¼¦Î÷ÊÐ</a>| <a href="http://" target="_blank">ÀÖ°²ÏØ</a>| <a href="http://" target="_blank">¶¨ÈÕÏØ</a>| <a href="http://" target="_blank">¼Î¶¨Çø</a>| <a href="http://" target="_blank">ÈøåÈÏØ</a>| <a href="http://" target="_blank">·ÊÏçÏØ</a>| <a href="http://" target="_blank">æÄÔ´ÏØ</a>| <a href="http://" target="_blank">ÁéÊÙÏØ</a>| <a href="http://" target="_blank">ÖÜÄþÏØ</a>| <a href="http://" target="_blank">³àË®ÊÐ</a>| <a href="http://" target="_blank">»ÆÁúÏØ</a>| <a href="http://" target="_blank">Ã÷Ë®ÏØ</a>| <a href="http://" target="_blank">»ÝÀ´ÏØ</a>| <a href="http://" target="_blank">°ÍÖÐÊÐ</a>| <a href="http://" target="_blank">³çÖÝÊÐ</a>| <a href="http://" target="_blank">ƽÑôÏØ</a>| <a href="http://" target="_blank">ËìÏªÏØ</a>| <a href="http://" target="_blank">ÅîÀ³ÊÐ</a>| <a href="http://" target="_blank">ÈýÃÅÏØ</a>| <a href="http://" target="_blank">±£Í¤</a>| <a href="http://" target="_blank">¡°²ÏØ</a>| <a href="http://" target="_blank">¶«Ã÷ÏØ</a>| <a href="http://" target="_blank">¼ÎÒåÊÐ</a>| <a href="http://" target="_blank">¾ÅÕ¯¹µÏØ</a>| <a href="http://" target="_blank">ÏéÔÆÏØ</a>| <a href="http://" target="_blank">ººÊÙÏØ</a>| <a href="http://" target="_blank">ÒËÀ¼ÊÐ</a>| <a href="http://" target="_blank">вÌÏØ</a>| <a href="http://" target="_blank">Ð˰²ÃË</a>| <a href="http://" target="_blank">ÁÖÖÜÏØ</a>| <a href="http://" target="_blank">¼ÎÒñÏØ</a>| <a href="http://" target="_blank">ÐÅÑôÊÐ</a>| <a href="http://" target="_blank">¾«ºÓÏØ</a>| <a href="http://" target="_blank">ÎijÉÏØ</a>| <a href="http://" target="_blank">Êæ³ÇÏØ</a>| <a href="http://" target="_blank">ËìÄþÊÐ</a>| <a href="http://" target="_blank">º£êÌÏØ</a>| <a href="http://" target="_blank">·îÏÍÇø</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>