锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涓. 鍙橀噺
1. php鍙橀噺
A. 鏅氬彉閲忥細(xì){$var}
B. 鍏寵仈鏁扮粍錛歿$array.var1.var2}
C. 鏁板瓧鏁扮粍錛歿$array[0][1]}
D. 瀵硅薄錛歿$object->var}
E. 鍦ㄥ紩鍙峰唴鐨勪嬌鐢ㄦ柟娉曪紝浠ュ叧鑱旀暟緇勪負(fù)渚嬶紝鍏朵粬綾諱技錛歿function var="{$array.var1.var2}"}
2. conf鍙橀噺
A. {#var#}
B. 鍦ㄥ紩鍙峰唴鐨勪嬌鐢ㄦ柟娉曪細(xì){function var="{#var#}"}
3. smarty淇濈暀鍙橀噺錛氱暐銆?br />
浜? 鍙橀噺璋冭妭鍣?/strong>
1. capitalize / lower / upper
鐢ㄩ旓細(xì)棣栧瓧姣嶅ぇ鍐?/ 杞負(fù)灝忓啓 / 杞負(fù)澶у啓
鐢ㄦ硶錛歿$var|capitalize} / {$var|lower} / {$var|upper}
2. count_characters / count_paragraphs / count_sentences / count_words
鐢ㄩ旓細(xì)璁$畻瀛楄妭鏁幫紝榛樿涓嶈綆楃┖鏍肩 / 璁$畻孌佃惤鏁伴噺 / 璁$畻鍙ュ瓙鏁伴噺 / 璁$畻璇嶆暟
鐢ㄦ硶錛歿$var|count_characters} {$var|count_characters:true} / {$article|count_paragraphs} / {$article|count_sentences} / {$sentence|count_words}
3. cat
鐢ㄩ旓細(xì)瀛楃涓茶繛鎺?br /> 鐢ㄦ硶錛歿$var|cat:" is a boy."}
4. nl2br
鐢ㄩ旓細(xì)鎹㈣絎︽浛鎹負(fù)<br/>
鐢ㄦ硶錛歿$var|nl2br}
5. regex_replace / replace
鐢ㄩ旓細(xì)姝e垯鏇挎崲 / 鏅氭浛鎹?br /> 鐢ㄦ硶錛歿$var|regex_replace:"/\[old\]/":"[new]"} / {$var|replace:"old":"new"}
6. spacify
鐢ㄩ旓細(xì)鍦ㄦ瘡涓瓧絎﹂棿鎻掑叆鎸囧畾瀛楃
鐢ㄦ硶錛歿$var|spacify:"^_^"}
7. date_format
鐢ㄩ旓細(xì)鏍煎紡鍖栨棩鏈燂紝綾諱技"-1 days ago"銆?201111010000"銆佹椂闂存埑絳夐兘鍙互錛屼笌strftime()鍔熻兘綾諱技
鐢ㄦ硶錛歿$time|date_format:"%H:%M:%S"}
8. default
鐢ㄩ旓細(xì)褰撳彉閲忎負(fù)絀烘椂錛岃緗粯璁ゅ?br /> 鐢ㄦ硶錛歿$var|default:"no value"}
9. escape
鐢ㄩ旓細(xì)杞爜錛屽寘鎷細(xì)html,htmlall,url,quotes,hex,hexentity,javascript
鐢ㄦ硶錛歿$articleTitle|escape:"html"}
10.indent
鐢ㄩ旓細(xì)鏂囧瓧緙╄繘錛屽彲浠ュ埗瀹氱緝榪涘瓧絎︽暟鍜屼嬌鐢ㄤ粈涔堝瓧絎︿唬鏇?br /> 鐢ㄦ硶錛歿$var|indent} {$var|indent:4} {$var|indent:4:"\t"}
11.string_format
鐢ㄩ旓細(xì)綾諱技鐢╯printf
鐢ㄦ硶錛歿$var|string_format:"%.2f"}
12.strip / strip_tags
鐢ㄩ旓細(xì)鍘婚櫎澶氫綑絀虹櫧絎︼紝鍙互鎸囧畾鍘婚櫎鐨勫瓧絎?/ 鍘婚櫎<>浠ュ強(qiáng)鍖呭惈鍦ㄩ噷闈㈢殑鎵鏈夊瓧絎?br /> 鐢ㄦ硶錛歿$var|strip} {$var|strip:" "} / {$var|strip_tags}
13.truncate
鐢ㄩ旓細(xì)瀛楃涓叉埅鍙栵紝榛樿鎴彇80瀛楃錛屽彲浠ユ寚瀹氳拷鍔犵殑瀛楃涓?br /> 鐢ㄦ硶錛歿$var|truncate:40} {$var|truncate:40:"...":true}
14.緇勫悎淇敼鍣?br /> 鐢ㄩ旓細(xì)欏懼悕鎬濅箟錛屽彲浠ュ皢澶氫釜鍙橀噺璋冭妭鍣ㄧ粍鍚堜嬌鐢紝涓棿鐢▅鏉ヤ唬鏇?br /> 渚嬪瓙錛歿$articleTitle|lower|spacify|truncate:30:"..."}
涓? 鍐呭緩鍑芥暟
1. capture
鐢ㄩ旓細(xì)鎹曡幏妯℃澘鍐呭鍒版煇鍙橀噺var錛屽茍涓嶈繘琛岃緭鍑?br /> 鐢ㄦ硶錛?br /> 鍦▄capture}{/capture}涓棿鐨勬暟鎹鎹曡幏錛屽彲浠ヤ嬌鐢?smarty.capture.var鏉ヤ嬌鐢紝涓嶆寚瀹歯ame鐨勮瘽錛岄粯璁や負(fù)default
{capture name=banner}
This is a test.
{/capture}
2. foreach
鐢ㄩ旓細(xì)寰幆澶勭悊
鐢ㄦ硶錛?br /> from: 鏁扮粍錛岄渶瑕佺敤$
item: 鍗曞厓鍏冪礌鍚嶇О錛屼笉闇瑕佺敤$
key: key鍚嶇О錛屼笉闇瑕佺敤$
name: 璇ュ驚鐜殑鍚嶇О錛屽彲浠ョ敤浜庤闂寰幆錛屼緥濡傦細(xì){$smarty.foreach.foreachname.varname}
{foreach item=contact from=$contacts}
{foreach key=key item=item from=$contact}
{$key}: {$item}<br>
{/foreach}
{/foreach}
娉ㄦ剰錛氬湪foreach涓湁涓浜涚壒孌婄殑鍙橀噺錛岄渶瑕佷嬌鐢▄$smarty.foreach.foreachname.***}鏉ヨ闂細(xì)
iteration: 琛ㄧず褰撳墠寰幆鐨勬墽琛屾鏁幫紝鍒濆涓?
first: 寰幆絎竴嬈℃墽琛屾椂琚疆涓簍rue
last: 鍚屼笂
total: 鐢ㄤ簬鏄劇ず寰幆鎵ц鐨勬鏁幫紝鍦ㄥ驚鐜腑鎴栬呭驚鐜悗鐨嗗彲浣跨敤
show: 鏄痜oreach鐨勪竴涓爣絳撅紝鐢ㄤ簬鍐沖畾鏄惁鏄劇ず璇oreach鐨勫唴瀹?br />3. include / insert
鐢ㄩ旓細(xì)鍖呭惈鍏朵粬妯℃澘 / 涓巌nclude涓嶅悓錛?insert 鎵鍖呭惈鐨勫唴瀹逛笉浼?xì)琚~撳瓨錛屾瘡嬈¤皟鐢ㄨ妯℃澘閮戒細(xì)閲嶆柊鎵ц璇ュ嚱鏁?
鐢ㄦ硶錛歿include file="footer.tpl" title="Main menu" logo="4. if elseif else
鐢ㄩ旓細(xì)鍒嗕箣鍒ゆ柇
鐢ㄦ硶錛?br /> {if $name eq "Fred"}
Welcome Sir.
{elseif $name eq "Wilma"}
Welcome Ma'am.
{else}
Welcome, whatever you are.
{/if}
5. ldelim / rdelim
鐢ㄩ旓細(xì)鍒嗗埆琛ㄧず宸︽嫭鍙楓佸彸鎷彿錛屽洜涓鴻繖涓や釜絎﹀彿琚敤浣渟marty妯℃澘鐨勬爣璇嗙
鐢ㄦ硶錛?br /> {ldelim} {rdelim}
6. literal
鐢ㄩ旓細(xì)鍦ㄥ唴閮ㄧ殑鏁版嵁褰撳仛鏂囨湰澶勭悊錛屼笉浣跨敤smarty妯℃澘瑙f瀽錛屼富瑕佺敤浜巎avascript鑴氭湰絳?br /> 鐢ㄦ硶錛?br /> {literal}
......
{/literal}
7. section
鐢ㄩ旓細(xì)寰幆澶勭悊
鐢ㄦ硶錛?br /> name: 璇ュ驚鐜殑鍚嶇О
loop錛氬喅瀹氬驚鐜鏁扮殑鏁扮粍錛屾敞鎰忚繖閲岀殑浣跨敤鏂規(guī)硶姣旇緝鐗瑰埆錛屽彲浠ヤ嬌鐢╯ection鏉ュ澶氫釜鏁扮粍榪涜澶勭悊錛屼絾蹇呴』鍏堢敤鍙互鍐沖畾寰幆嬈℃暟鐨勬暟緇勭粰loop璧嬪?br /> {section name=customer loop=$custid}
id: {$custid[customer]}<br>
name: {$name[customer]}<br>
address: {$address[customer]}<br>
{section name=contact loop=$contact_type[customer]}
{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
{/section}
<p>
{/section}
濡傛灉瑕侀亶鍘嗗緇村叧鑱旀暟緇勶紝闇瑕佽繖鏍鋒潵浣跨敤錛?br /> {section name=customer loop=$contacts}
name: {$contacts[customer].name}<br>
home: {$contacts[customer].home}<br>
cell: {$contacts[customer].cell}<br>
e-mail: {$contacts[customer].email}<p>
{/section}
娉ㄦ剰錛氫笌foreach綾諱技錛屽湪section涓悓鏍鋒湁涓浜涚壒孌婂彉閲忓彲渚涗嬌鐢紝浣跨敤鏂規(guī)硶鏄細(xì){$smarty.section.sectionname.***}
index: 鏄劇ず褰撳墠寰幆鐨勭儲(chǔ)寮曪紝榛樿浠?鎴栬卻tart寮濮?br /> index_prev: 鏄劇ず涓婁竴涓驚鐜儲(chǔ)寮曞鹼紝榛樿浠?1寮濮?br /> index_next: 鍚屼笂錛岀洿鑷蟲渶鍚庨兘姣斾笂涓嬈″ぇ1
ineration: 鍚宖oreach錛屼笌index涓嶅悓錛屽悗鑰呮槸绱㈠紩
first: 鍚宖oreach
last: 鍚宖oreach
show: 鍚宖oreach
total: 鍚宖oreach
8. strip
鐢ㄩ旓細(xì)灝嗕綅浜巤strip}{/strip}鍐呴儴html鏍囩澶栫殑鎵鏈夌┖鏍煎拰鍥炶濺娓呴櫎騫插噣錛屽茍浠tml鏍囩寮澶村拰緇撳熬
鐢ㄦ硶錛?br /> {strip}
<table border=0>
<tr>
<td>
<A HREF="{$url}">
<font color="red">This is a test</font>
</A>
</td>
</tr>
</table>
{/strip}
涓婅堪杈撳嚭涓猴細(xì)
<table border=0><tr><td><A HREF=" color="red">This is a test</font></A></td></tr></table>
鍥? 紼嬪簭鍛橀渶瑕佹敞鎰忕殑鍦版柟
1. 甯擱噺
SMARTY_DIR錛歋MARTY_DIR甯擱噺鐢ㄤ簬瀹氫綅smarty綾繪枃浠剁殑瀹屾暣緋葷粺璺緞錛屽繀欏諱互鏂滄潬緇撴潫錛屼篃鍙互涓嶅畾涔夛紝smarty妯℃澘浼?xì)鑷姩鍒涘缓鍚堥傜殑鍊箋?br />2. 綾誨睘鎬?br /> $template_dir: 妯℃澘鐩綍錛屼篃灝辨槸鍚刪tml鏂囦歡鏀劇疆鐩綍錛岄粯璁や負(fù)"./templates"
$compile_dir: 緙栬瘧鍚庣殑妯℃澘鐩綍錛岀粡榪噑marty瑙f瀽鍚庣殑html鏂囦歡鏀劇疆鐩綍錛岄粯璁や負(fù)"./templates_c"
$config_dir: 妯℃澘閰嶇疆鏂囦歡鐩綍錛岄粯璁や負(fù)"./configs"
$plugins_dir: 鎻掍歡鐩綍錛岄粯璁や負(fù)SMARTY_DIR 銆?"plugins"
$cache_dir: 瀛樻斁妯℃澘緙撳瓨鐨勭洰褰曪紝榛樿涓?./cache"
$debugging: 鍙互鍚姩璋冭瘯鎺у埗鍙幫紝榛樿涓篺alse錛屽緢鏈夌敤鍟婏紒錛侊紒
$debug_tpl: 瀹氫箟鐢ㄤ簬璋冭瘯鎺у埗鍙扮殑妯℃澘鏂囦歡鍚嶅瓧錛岄粯璁や負(fù)SMARTY_DIR . "libs/debug.tpl"
$global_assign: 鐢ㄤ簬瀹氫箟鍏ㄥ眬鍙橀噺錛屼緥濡傦細(xì)
php閲岋細(xì)$this->tpl->global_assign = array('my_global_1' => .....);
鍦╰emplate閲岋細(xì){$smarty.my_global_1.***}
$compile_check: 鑷姩緙栬瘧妯℃澘錛岄粯璁よ緗負(fù)true錛屾姇鍏ヤ駭鍝佸悗涓烘ц兘璧瘋錛屽彲浠ヨ緗負(fù)false銆?br /> $force_compile: 寮鴻揩姣忔璋冪敤鏃墮噸鏂扮紪璇戞ā鏉匡紝榛樿涓篺alse錛屼笉鍙?compile_check鐨勯檺鍒訛紝涓鏃﹁緗負(fù)true鍚庝細(xì)寮鴻揩閲嶆柊緙栬瘧銆?br /> $caching: 鏄惁緙撳瓨妯℃澘杈撳嚭錛岄粯璁や負(fù)false錛屾湁鍒╀簬澧炲己鎬ц兘銆?br /> $caching_lifetime: 緙撳瓨鐢熷瓨鏃墮棿錛屽彧鍦?caching涓簍rue鏃舵湁鏁堬紝-1琛ㄧず姘歌繙鏈夋晥錛?琛ㄧず姘歌繙闇瑕侀噸鏂扮敓鎴愩傚崟浣嶆槸縐掋?br /> 娉ㄦ剰錛?compile_check銆?force_compile銆?caching涓夎呯殑鍏崇郴濡備笅錛?br /> A. 濡傛灉璁劇疆浜?compile_check錛屽鏋滀換浣曟ā鏉挎枃浠舵垨閰嶇疆鏂囦歡鏇存柊錛岄兘浼?xì)閲嶆柊缂栬瘧锛尵~撳瓨涔熶細(xì)閲嶆柊鐢熸垚錛?br /> B. 濡傛灉璁劇疆浜?force_compile錛屽垯$compile_check涓嶈搗浣滅敤錛岃岀紦瀛樹篃鎬諱細(xì)閲嶆柊鐢熸垚錛?br /> C. 濡傛灉娌℃湁璁劇疆$caching錛屽垯娌℃湁緙撳瓨錛屾ц兘鍙椾竴瀹氬獎(jiǎng)鍝嶃?br />
浜? smarty鐨刴ethod
1. assign: 瀵規(guī)ā鏉夸嬌鐢ㄥ埌鐨刾hp鍙橀噺榪涜璧嬪?br />2. assign_by_ref: 涔熸槸璧嬪鹼紝涓嶈繃鏄紩鐢ㄨ祴鍊?br />3. clear_all_assign: 娓呴櫎鎵鏈夎祴鍊?br />4. clear_all_cache: 娓呴櫎鎵鏈夌紦瀛橈紝鍙傛暟鍙互鎸囧畾闃堝兼椂闂?br />5. clear_assign: 娓呴櫎鏌愪釜璧嬪鹼紝鍙互鎸囧畾鍗曚釜鍙橀噺鍚嶆垨鑰呮暟緇?br />6. clear_cache: 娓呴櫎鏌愪釜template鐨勭紦瀛橈紝闇瑕佹寚瀹歵emplate鐨勫悕縐?br />7. clear_config: 娓呴櫎鎵鏈夐厤緗彉閲忥紝濡傛灉鎸囧畾鍒欐竻闄ょ壒瀹氶厤緗彉閲?br />8. config_load: 鍔犺澆鏌愰厤緗枃浠跺茍灝嗘暟鎹緭鍑哄埌妯℃澘
9. display: 鏄劇ず鏌愪釜妯℃澘
10.fetch: 鎹曡幏鏌愪釜妯℃澘鐨勮緭鍑猴紝涓巇isplay涓嶅悓鐨勬槸錛屾ā鏉胯緭鍑哄唴瀹瑰茍涓嶄細(xì)鐩存帴鏄劇ず鍑烘潵錛堟湁浠涔堢敤鍛紵錛燂紵錛?br />11.get_config_vars: 鑾峰彇鎵鏈夐厤緗彉閲忕殑鍊鹼紝涔熷彲浠ユ寚瀹氭煇涓叿浣撶殑鍙橀噺鍚?br />12.get_template_vars: 鑾峰彇鎵鏈夋ā鏉垮彉閲忕殑鍊鹼紝涔熷彲浠ユ寚瀹氭煇涓叿浣撶殑鍙橀噺鍚?br />13.is_cached: 鍒ゆ柇鏌愭ā鏉跨殑緙撳瓨鏄惁瀛樺湪錛屽彧鏈夊湪$caching璁劇疆涓簍rue鏃舵墠鏈夋晥
14.template_exists: 鍒ゆ柇鏌愭ā鏉挎槸鍚﹀瓨鍦?br />
浣跨敤"insert into"璇彞榪涜鏁版嵁搴撴搷浣滄椂鍙兘閬囧埌涓婚敭鍐茬獊錛岀敤鎴烽渶瑕佹牴鎹簲鐢ㄥ満鏅繘琛屽拷鐣ユ垨鑰呰鐩栫瓑鎿嶄綔銆傛葷粨涓嬶紝鏈変笁縐嶈В鍐蟲柟妗堟潵閬垮厤鍑洪敊銆?br />
1. insert ignore into
閬囦富閿啿紿侊紝淇濇寔鍘熺邯褰曪紝蹇界暐鏂版彃鍏ョ殑璁板綍銆?br />mysql> select * from device ;
+-------+--------+-------------+
| devid | status | spec_char |
+-------+--------+-------------+
| 1 | dead | zhonghuaren |
| 2 | dead | zhong |
+-------+--------+-------------+
2 rows in set (0.00 sec)
mysql> insert into device values (1,'alive','yangting');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert ignore into device values (1,'alive','yangting');
Query OK, 0 rows affected (0.00 sec)
mysql> select * from device ;
+-------+--------+-------------+
| devid | status | spec_char |
+-------+--------+-------------+
| 1 | dead | zhonghuaren |
| 2 | dead | zhong |
+-------+--------+-------------+
2 rows in set (0.00 sec)
鍙 insert ignore into褰撻亣鍒頒富閿啿紿佹椂錛屼笉鏇存敼鍘熺邯褰曪紝涔熶笉鎶ラ敊
2. replace into
閬囦富閿啿紿侊紝鏇挎崲鍘熺邯褰曪紝鍗沖厛鍒犻櫎鍘熺邯褰曪紝鍚巌nsert鏂扮邯褰?/p>
mysql> replace into device values (1,'alive','yangting');
Query OK, 2 rows affected (0.00 sec)
mysql> select * from device ;
+-------+--------+-----------+
| devid | status | spec_char |
+-------+--------+-----------+
| 1 | alive | yangting |
| 2 | dead | zhong |
+-------+--------+-----------+
2 rows in set (0.00 sec)
3. insert into ... ON DUPLICATE KEY UPDATE
鍏跺疄榪欎釜鏄師鏈渶瑕佹墽琛?鏉QL璇彞錛圫ELECT,INSERT,UPDATE錛夛紝緙╁噺涓?鏉¤鍙ュ嵆鍙畬鎴愩?br />鍗?br />IF (SELECT * FROM where 瀛樺湪) {
UPDATE SET WHERE ;
} else {
INSERT INTO;
}
濡傦細(xì)mysql> insert into device values (1,'readonly','yang') ON DUPLICATE KEY UPDATE status ='drain';
Query OK, 2 rows affected (0.00 sec)
涓婇潰璇彞浼唬鐮佽〃紺哄嵆涓?br />if (select * from device where devid=1) {
update device set status ='drain' where devid=1
} else {
insert into device values (1,'readonly','yang')
}
寰堟槑鏄撅紝devid=1 鏄湁鐨勶紝榪欐牱灝辨墽琛寀pdate鎿嶄綔
mysql> select * from device ;
+-------+--------+-----------+
| devid | status | spec_char |
+-------+--------+-----------+
| 1 | drain | yangting |
| 2 | dead | zhong |
+-------+--------+-----------+
2 rows in set (0.00 sec)
嫻嬭瘯琛細(xì)
CREATE TABLE `device` (
`devid` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`status` enum('alive','dead','down','readonly','drain') DEFAULT NULL,
`spec_char` varchar(11) DEFAULT '0',
PRIMARY KEY (`devid`)
) ENGINE=InnoDB
class A {
public function x() {
echo "A::x() was called.\n";
}
public function y() {
self::x();
echo "A::y() was called.\n";
}
public function z() {
$this->x();
echo "A::z() was called.\n";
}
}
class B extends A {
public function x() {
echo "B::x() was called.\n";
}
}
$b = new B();
$b->y();
echo "--\n";
$b->z();
璇ヤ緥涓紝A::y()璋冪敤浜?jiǎn)A::x()錛岃孊::x()瑕嗙洊浜?jiǎn)A::x()錛岄偅涔堝綋璋冪敤B::y()鏃訛紝B::y()搴旇璋冪敤A::x()榪樻槸 B::x()鍛紵鍦–++涓紝濡傛灉A::x()鏈瀹氫箟涓鴻櫄鍑芥暟錛岄偅涔圔::y()錛堜篃灝辨槸A::y()錛夊皢璋冪敤A::x()錛岃屽鏋淎::x()浣跨敤 virtual鍏抽敭瀛楀畾涔夋垚铏氬嚱鏁幫紝閭d箞B::y()灝嗚皟鐢˙::x()銆?br />鐒惰岋紝鍦≒HP5涓紝铏氬嚱鏁扮殑鍔熻兘鏄敱 self 鍜?$this 鍏抽敭瀛楀疄鐜扮殑銆傚鏋滅埗綾諱腑A::y()涓嬌鐢?self::x() 鐨勬柟寮忚皟鐢ㄤ簡(jiǎn) A::x()錛岄偅涔堝湪瀛愮被涓笉璁篈::x()鏄惁琚鐩栵紝A::y()璋冪敤鐨勯兘鏄疉::x()錛涜屽鏋滅埗綾諱腑A::y()浣跨敤 $this->x() 鐨勬柟寮忚皟鐢ㄤ簡(jiǎn) A::x()錛岄偅涔堝鏋滃湪瀛愮被涓瑼::x()琚獴::x()瑕嗙洊錛孉::y()灝嗕細(xì)璋冪敤B::x()銆?/p>
涓婁緥鐨勮繍琛岀粨鏋滃涓嬶細(xì)
A::x() was called. A::y() was called.
--
B::x() was called. A::z() was called.
$test = new Test();
$b = var_export($test, true);
var_dump($b);
class Test {
public $a;
public static function __set_state($array) {
$ab = new Test();
$ab->a = 10;
return $ab;
}
}
1.鏁扮粍鍑芥暟
array_product() array_search() array_unique() extract() array_count_values() array_key_exists() array_sum() 2.鏂囦歡鍑芥暟 basename() dirname() feof() fflush() file() file_exists() file_get_contents() file_put_contents filesize() filetype() flock() is_dir() is_executable() parse_ini_file() tempnam() tmpfile() touch() 3.瀛楃涓插嚱鏁?/strong> addslashes() chr() convert_uuencode() convert_uudecode() crc32() crypt() explode() htmlentities() htmlspecialchars_decode() htmlspecialchars() implode() md5() md5_file() nl2br() number_format() ord() parse_str() str_ireplace() str_shuffle() str_split() str_word_count() strcasecmp() strchr() strcmp() strip_tags() stripslashes() stripos() strpos() strrev() strtolower() strtoupper() substr() substr_replace() ucwords() parse_url(); 瑙f瀽URL錛岃繑鍥炴暟緇勶紝[HOST]="ABC.COM";[PATH]="INDEX.PHP" 4.瀛楃涓插姞瀵?/strong> md5 urlencode urldecode base64_encode base64_decode convert_uuencode() convert_uudecode() 5.姝e垯琛ㄨ揪寮?/strong> [^a-z] str_replace(); ereg_replace(); preg_match(); preg_match_all(); preg_replace(); preg_split(); 6.鏁版嵁楠岃瘉 is_numeric(); is_bool(); is_string(); intval(); strval(); settype($input,integer); 璁劇疆綾誨瀷 7.緙撳啿鍖烘帶鍒跺嚱鏁?/strong> flush — 鍒鋒柊杈撳嚭緙撳啿鍖?br />淇濆瓨鍦ㄨ緭鍑虹紦鍐插尯鐨勫唴瀹逛細(xì)琚彂閫佸埌嫻忚鍣?br />ob_start — 鎵撳紑杈撳嚭緙撳啿鍖?br />榪欐牱鎵鏈夌殑杈撳嚭淇℃伅涓嶅湪鐩存帴鍙戦佸埌嫻忚鍣紝鑰屾槸淇濆瓨鍦ㄨ緭鍑虹紦鍐插尯閲岄潰
ob_get_contents — 榪斿洖杈撳嚭緙撳啿鍖虹殑鍐呭
濡傛灉浣犳兂浠ュ悗澶勭悊杈撳嚭鐨勫唴瀹癸紝鍙互璋冪敤榪欎釜鍑芥暟淇濈暀涓涓浠?br />ob_get_length — 榪斿洖杈撳嚭緙撳啿鍖虹殑鍐呭闀垮害
ob_end_flush — 緇撴潫錛堝彂閫侊級(jí)杈撳嚭緙撳啿鍖虹殑鍐呭錛屽叧闂緭鍑虹紦鍐插尯
ob_end_clean — 鍒犻櫎錛堟斁寮冿級(jí)杈撳嚭緙撳啿鍖虹殑鍐呭錛屽叧闂緭鍑虹紦鍐插尯
濡傛灉浣犵殑紼嬪簭鍙戠幇杈撳嚭鍐呭鏈夐棶棰橈紝鍙互鏀懼純鎵鏈夎緭鍑哄唴瀹癸紝鍙互闃叉娉勬紡鏌愪簺縐樺瘑淇℃伅
ob_implicit_flush — 鎵撳紑鎴栧叧闂洿鎺ュ埛鏂?br />鎵撳紑鍚庯紝姣忎釜鑴氭湰杈撳嚭閮界洿鎺ュ彂閫佸埌嫻忚鍣紝涓嶅啀闇瑕佽皟鐢?flush(),
]]>
1銆佸鏋滆兘灝嗙被鐨勬柟娉曞畾涔夋垚static錛屽氨灝介噺瀹氫箟鎴恠tatic錛屽畠鐨勯熷害浼?xì)鎻愬崌灏啒q?鍊嶃?br />PS錛氫簨瀹炰笂錛宖unction銆乵ethod銆乻tatic method鐨勯熷害涓嶄細(xì)鏈夊お澶у樊寮傘傚叿浣撳彲瑙?#8220;PHP鍑芥暟鐨勫疄鐜板師鐞嗗強(qiáng)鎬ц兘鍒嗘瀽銆愯漿杞姐?/span>”涓鏂囥?/span>
2銆?row[’id’] 鐨勯熷害鏄?row[id]鐨?鍊嶃?br />PS錛氫笉澶噦錛岃矊浼煎樊寮傚彧鏈夊悗鑰呬細(xì)鍏堝垽鏂璱d榪欎釜瀹忔槸鍚﹀瓨鍦紝濡傛灉涓嶅瓨鍦ㄥ垯鑷姩杞彉涓哄瓧絎︿覆銆?/span>
3銆乪cho 姣?print 蹇紝騫朵笖浣跨敤echo鐨勫閲嶅弬鏁?璇戞敞錛氭寚鐢ㄩ楀彿鑰屼笉鏄彞鐐?浠f浛瀛楃涓茶繛鎺ワ紝姣斿echo $str1,$str2銆?/p>
4銆佸湪鎵цfor寰幆涔嬪墠紜畾鏈澶у驚鐜暟錛屼笉瑕佹瘡寰幆涓嬈¢兘璁$畻鏈澶у鹼紝鏈濂借繍鐢╢oreach浠f浛銆?br />PS錛氬儚count銆乻trlen榪欐牱鐨勬搷浣滃叾瀹炴槸O(1)鐨勶紝鍥犳涓嶄細(xì)甯︽潵澶娑堣楋紝褰撶劧閬垮厤姣忔寰幆閮借綆楁槸姣旇緝濂界殑絳栫暐銆傛渶濂界敤foreach浠f浛for錛岃繖涓晥鐜囨洿楂橈紝濡傛灉鑰冭檻鍒癴oreach($array as $var)姣忔鎷瘋礉鐨勬秷鑰楋紝鍙互浣跨敤foreach($array as &$var)榪欐牱鐨勫紩鐢ㄣ?/span>
5銆佹敞閿閭d簺涓嶇敤鐨勫彉閲忓挨鍏舵槸澶ф暟緇勶紝浠ヤ究閲婃斁鍐呭瓨銆?br />PS錛氬鏋滄病鏈夎閿欑殑璇濓紝unset($array)涓嶄細(xì)绔嬪埢閲婃斁鍐呭瓨錛屼絾闅忔椂閲婃斁鏄釜濂戒範(fàn)鎯?/span>
6銆佸敖閲忛伩鍏嶄嬌鐢╛_get錛宊_set錛宊_autoload銆?/p>
7銆乺equire_once()浠d環(huán)鏄傝吹銆?br />PS錛歳equire_once鍜宨nclude_once闇瑕佸垽閲嶏紝鍥犳鏁堢巼涓婅浣庯紝浣嗘槸5.2鐗堟湰鍚庢晥鐜囬棶棰樺凡緇忓熀鏈В鍐熾?/span>
8銆乮nclude鏂囦歡鏃跺敖閲忎嬌鐢ㄧ粷瀵硅礬寰勶紝鍥犱負(fù)瀹冮伩鍏嶄簡(jiǎn)PHP鍘籭nclude_path閲屾煡鎵炬枃浠剁殑閫熷害錛岃В鏋愭搷浣滅郴緇熻礬寰勬墍闇鐨勬椂闂翠細(xì)鏇村皯銆?br />PS錛氭敮鎸侊紝灝介噺灝戠敤iniset()鏉ヨ緗甶nclude_path銆?/span>
9銆佸鏋滀綘鎯崇煡閬撹剼鏈紑濮嬫墽琛?璇戞敞錛氬嵆鏈嶅姟鍣ㄧ鏀跺埌瀹㈡埛绔姹?鐨勬椂鍒伙紝浣跨敤$_SERVER['REQUEST_TIME']瑕佸ソ浜巘ime()銆?br />PS錛?_SERVER['REQUEST_TIME']淇濆瓨浜?jiǎn)鍙戣弹偗ヨh眰鏃跺埢鐨勬椂闂存埑錛岃宼ime()鍒欒繑鍥炲綋鍓嶆椂鍒葷殑Unix鏃墮棿鎴熾?/span>
10銆佸嚱鏁頒唬鏇挎鍒欒〃杈懼紡瀹屾垚鐩稿悓鍔熻兘銆?br />PS錛氳繖縐嶅嚱鏁版槸鎸噑trtok銆乻trstr銆乻trpos銆乻tr_replace銆乻ubstr銆乪xplode銆乮mplode絳夌瓑銆?/span>
11銆乻tr_replace鍑芥暟姣攑reg_replace鍑芥暟蹇紝浣唖trtr鍑芥暟鐨勬晥鐜囨槸str_replace鍑芥暟鐨勫洓鍊嶃?br />PS錛氬瓧絎︿覆鎿嶄綔姣旀鍒欐浛鎹㈣蹇?/span>
12銆佸鏋滀竴涓瓧絎︿覆鏇挎崲鍑芥暟錛屽彲鎺ュ彈鏁扮粍鎴栧瓧絎︿綔涓哄弬鏁幫紝騫朵笖鍙傛暟闀垮害涓嶅お闀匡紝閭d箞鍙互鑰冭檻棰濆鍐欎竴孌墊浛鎹唬鐮侊紝浣垮緱姣忔浼犻掑弬鏁版槸涓涓瓧絎︼紝鑰屼笉鏄彧鍐欎竴琛屼唬鐮佹帴鍙楁暟緇勪綔涓烘煡璇㈠拰鏇挎崲鐨勫弬鏁般?br />PS錛氶渶瑕佽冭檻鍒板唴緗嚱鏁板拰鐢ㄦ埛鑷畾涔夊嚱鏁扮殑寮閿宸紓錛屾亹鎬曡繖縐嶅仛娉曞緱涓嶅伩澶便?/span>
13銆佷嬌鐢ㄩ夋嫨鍒嗘敮璇彞(璇戞敞錛氬嵆switch case)濂戒簬浣跨敤澶氫釜if錛宔lse if璇彞銆?br />PS錛歱hp涓璼witch鏀寔鏁板煎拰瀛楃涓插彉閲忥紝姣擟鐨剆witch瑕佸ソ鐢紝寤鴻浣跨敤銆?/span>
14銆佺敤@灞忚斀閿欒娑堟伅鐨勫仛娉曢潪甯鎬綆鏁堬紝鏋佸叾浣庢晥銆?br />PS錛氭湁浠涔堟浛浠f柟娉曞悧錛熸病鏈夌殑璇濊繕鏄笉寰椾笉鐢ㄧ殑……
15銆佹墦寮apache鐨刴od_deflate妯″潡錛屽彲浠ユ彁楂樼綉欏電殑嫻忚閫熷害銆?/p>
16銆佹暟鎹簱榪炴帴褰撲嬌鐢ㄥ畬姣曟椂搴斿叧鎺夛紝涓嶈鐢ㄩ暱榪炴帴銆?br />PS錛氬湪榪炴帴涔嬪墠錛屾渶濂借緗竴涓嬬浉搴旂殑瓚呮椂鏈哄埗錛屼緥濡傞摼鎺ヨ秴鏃躲佽鍐欒秴鏃躲佺瓑寰呰秴鏃剁瓑銆?/span>
17銆侀敊璇秷鎭唬浠鋒槀璐點(diǎn)?/p>
18銆佸湪鏂規(guī)硶涓掑灞閮ㄥ彉閲忥紝閫熷害鏄渶蹇殑銆傚嚑涔庝笌鍦ㄥ嚱鏁頒腑璋冪敤灞閮ㄥ彉閲忕殑閫熷害鐩稿綋銆?/p>
19銆侀掑涓涓叏灞鍙橀噺瑕佹瘮閫掑涓涓眬閮ㄥ彉閲忔參2鍊嶃?/p>
20銆侀掑涓涓璞″睘鎬?濡傦細(xì)$this->prop++)瑕佹瘮閫掑涓涓眬閮ㄥ彉閲忔參3鍊嶃?/p>
21銆侀掑涓涓湭棰勫畾涔夌殑灞閮ㄥ彉閲忚姣旈掑涓涓瀹氫箟鐨勫眬閮ㄥ彉閲忔參9鑷?0鍊嶃?/p>
22銆佷粎瀹氫箟涓涓眬閮ㄥ彉閲忚屾病鍦ㄥ嚱鏁頒腑璋冪敤瀹冿紝鍚屾牱浼?xì)鍑忔參閫熷害(鍏剁▼搴︾浉褰撲簬閫掑涓涓眬閮ㄥ彉閲?銆侾HP澶ф浼?xì)妫鏌ョ湅鏄惁瀛樺湪鍏ㄥ眬鍙橀噺銆?/p>
23銆佹柟娉曡皟鐢ㄧ湅鏉ヤ笌綾諱腑瀹氫箟鐨勬柟娉曠殑鏁伴噺鏃犲叧錛屽洜涓烘垜(鍦ㄦ祴璇曟柟娉曚箣鍓嶅拰涔嬪悗閮?娣誨姞浜?0涓柟娉曪紝浣嗘ц兘涓婃病鏈夊彉鍖栥?/p>
24銆佹淳鐢熺被涓殑鏂規(guī)硶榪愯璧鋒潵瑕佸揩浜庡湪鍩虹被涓畾涔夌殑鍚屾牱鐨勬柟娉曘?/p>
25銆佽皟鐢ㄥ甫鏈変竴涓弬鏁扮殑絀哄嚱鏁幫紝鍏惰姳璐圭殑鏃墮棿鐩稿綋浜庢墽琛?鑷?嬈$殑灞閮ㄥ彉閲忛掑鎿嶄綔銆傜被浼肩殑鏂規(guī)硶璋冪敤鎵鑺辮垂鐨勬椂闂存帴榪戜簬15嬈$殑灞閮ㄥ彉閲忛掑鎿嶄綔銆?/p>
26銆丄pache瑙f瀽涓涓狿HP鑴氭湰鐨勬椂闂磋姣旇В鏋愪竴涓潤(rùn)鎬丠TML欏甸潰鎱?鑷?0鍊嶃傚敖閲忓鐢ㄩ潤(rùn)鎬丠TML欏甸潰錛屽皯鐢ㄨ剼鏈?/p>
27銆侀櫎闈炶剼鏈彲浠ョ紦瀛橈紝鍚﹀垯姣忔璋冪敤鏃墮兘浼?xì)閲嶆柊缂栬瘧涓嬈°傚紩鍏ヤ竴濂桺HP緙撳瓨鏈哄埗閫氬父鍙互鎻愬崌25%鑷?00%鐨勬ц兘錛屼互鍏嶉櫎緙栬瘧寮閿銆?/p>
28銆佸敖閲忓仛緙撳瓨錛屽彲浣跨敤memcached銆俶emcached鏄竴嬈鵑珮鎬ц兘鐨勫唴瀛樺璞$紦瀛樼郴緇燂紝鍙敤鏉ュ姞閫熷姩鎬乄eb搴旂敤紼嬪簭錛屽噺杞繪暟鎹簱璐熻澆銆傚榪愮畻鐮?(OP code)鐨勭紦瀛樺緢鏈夌敤錛屼嬌寰楄剼鏈笉蹇呬負(fù)姣忎釜璇鋒眰鍋氶噸鏂扮紪璇戙?/p>
29銆佸綋鎿嶄綔瀛楃涓插茍闇瑕佹楠屽叾闀垮害鏄惁婊¤凍鏌愮瑕佹眰鏃訛紝浣犳兂褰撶劧鍦頒細(xì)浣跨敤strlen()鍑芥暟銆傛鍑芥暟鎵ц璧鋒潵鐩稿綋蹇紝鍥犱負(fù)瀹冧笉鍋氫換浣曡綆楋紝鍙繑鍥炲湪zval 緇撴瀯(C鐨勫唴緗暟鎹粨鏋勶紝鐢ㄤ簬瀛樺偍PHP鍙橀噺)涓瓨鍌ㄧ殑宸茬煡瀛楃涓查暱搴︺備絾鏄紝鐢變簬strlen()鏄嚱鏁幫紝澶氬灝戝皯浼?xì)鏈変簺鎱㈠Q屽洜涓哄嚱鏁拌皟鐢ㄤ細(xì)緇忚繃璇稿姝ラ錛屽瀛楁瘝灝忓啓鍖?璇戞敞錛氭寚鍑芥暟鍚嶅皬鍐欏寲錛孭HP涓嶅尯鍒嗗嚱鏁板悕澶у皬鍐?銆佸搱甯屾煡鎵撅紝浼?xì)璺熼殢琚皟鐢ㄧ殑鍑芥曨C竴璧鋒墽琛屻傚湪鏌愪簺鎯呭喌涓嬶紝浣犲彲浠ヤ嬌鐢╥sset() 鎶宸у姞閫熸墽琛屼綘鐨勪唬鐮併?/p>
銆銆(涓句緥濡備笅)
銆銆if (strlen($foo) < 5) { echo “Foo is too short”$$ }
銆銆(涓庝笅闈㈢殑鎶宸у仛姣旇緝)
銆銆if (!isset($foo{5})) { echo “Foo is too short”$$ }
銆銆璋冪敤isset()鎭板閥姣攕trlen()蹇紝鍥犱負(fù)涓庡悗鑰呬笉鍚岀殑鏄紝isset()浣滀負(fù)涓縐嶈璦緇撴瀯錛屾剰鍛崇潃瀹冪殑鎵ц涓嶉渶瑕佸嚱鏁版煡鎵懼拰瀛楁瘝灝忓啓鍖栥備篃灝辨槸璇達(dá)紝瀹為檯涓婂湪媯(gè)楠屽瓧絎︿覆闀垮害鐨勯《灞備唬鐮佷腑浣犳病鏈夎姳澶寮閿銆?br />PS錛氶暱瑙佽瘑浜?jiǎn)銆?/span>
30銆佸綋鎵ц鍙橀噺$i鐨勯掑鎴栭掑噺鏃訛紝$i++浼?xì)姣?+$i鎱竴浜涖傝繖縐嶅樊寮傛槸PHP鐗規(guī)湁鐨勶紝騫朵笉閫傜敤浜庡叾浠栬璦錛屾墍浠ヨ涓嶈淇敼浣犵殑C鎴朖ava浠g爜騫舵寚鏈涘畠浠兘绔嬪嵆鍙樺揩錛屾病鐢ㄧ殑銆?+$i鏇村揩鏄洜涓哄畠鍙渶瑕?鏉℃寚浠?opcodes)錛?i++鍒欓渶瑕?鏉℃寚浠ゃ傚悗緗掑瀹為檯涓婁細(xì)浜х敓涓涓復(fù)鏃跺彉閲忥紝榪欎釜涓存椂鍙橀噺闅忓悗琚掑銆傝屽墠緗掑鐩存帴鍦ㄥ師鍊間笂閫掑銆傝繖鏄渶浼樺寲澶勭悊鐨勪竴縐嶏紝姝eZend鐨凱HP浼樺寲鍣ㄦ墍浣滅殑閭f牱銆傜墷璁拌繖涓紭鍖栧鐞嗕笉澶變負(fù)涓涓ソ涓繪剰錛屽洜涓哄茍涓嶆槸鎵鏈夌殑鎸囦護(hù)浼樺寲鍣ㄩ兘浼?xì)鍋氬悓鏍风殑浼樺寲澶勭悊锛岒q朵笖瀛樺湪澶ч噺娌℃湁瑁呴厤鎸囦護(hù)浼樺寲鍣ㄧ殑浜掕仈緗戞湇鍔℃彁渚涘晢(ISPs)鍜屾湇鍔″櫒銆?/p>
31銆佸茍涓嶆槸浜嬪繀闈㈠悜瀵硅薄(OOP)錛岄潰鍚戝璞″線寰寮閿寰堝ぇ錛屾瘡涓柟娉曞拰瀵硅薄璋冪敤閮戒細(xì)娑堣楀緢澶氬唴瀛樸?/p>
32銆佸茍闈炶鐢ㄧ被瀹炵幇鎵鏈夌殑鏁版嵁緇撴瀯錛屾暟緇勪篃寰堟湁鐢ㄣ?/p>
33銆佷笉瑕佹妸鏂規(guī)硶緇嗗垎寰楄繃澶氾紝浠旂粏鎯蟲兂浣犵湡姝f墦綆楅噸鐢ㄧ殑鏄摢浜涗唬鐮?
34銆佸綋浣犻渶瑕佹椂錛屼綘鎬昏兘鎶婁唬鐮佸垎瑙f垚鏂規(guī)硶銆?br />PS錛氬垎瑙f垚鏂規(guī)硶瑕侀傚綋錛岃鏁板皯浣跨敤棰戠巼楂樼殑鏂規(guī)硶灝介噺鐢ㄧ洿鎺ュ啓浠g爜錛屽彲浠ュ噺灝戝嚱鏁板爢鏍堝紑閿錛涗笖鏂規(guī)硶宓屽涓嶅疁榪囨繁錛屽惁鍒欏ぇ澶у獎(jiǎng)鍝峆HP鐨勮繍琛屾晥鐜囥?/span>
35銆佸敖閲忛噰鐢ㄥぇ閲忕殑PHP鍐呯疆鍑芥暟銆?/p>
36銆佸鏋滃湪浠g爜涓瓨鍦ㄥぇ閲忚楁椂鐨勫嚱鏁幫紝浣犲彲浠ヨ冭檻鐢–鎵╁睍鐨勬柟寮忓疄鐜板畠浠?/p>
37銆佽瘎浼版楠?profile)浣犵殑浠g爜銆傛楠屽櫒浼?xì)鍛婅瘔浣犲Q屼唬鐮佺殑鍝簺閮ㄥ垎娑堣椾簡(jiǎn)澶氬皯鏃墮棿銆俋debug璋冭瘯鍣ㄥ寘鍚簡(jiǎn)媯(gè)楠岀▼搴忥紝璇勪及媯(gè)楠屾諱綋涓婂彲浠ユ樉紺哄嚭浠g爜鐨勭摱棰堛?/p>
38銆乵od_zip鍙綔涓篈pache妯″潡錛岀敤鏉ュ嵆鏃跺帇緙╀綘鐨勬暟鎹紝騫跺彲璁╂暟鎹紶杈撻噺闄嶄綆80%銆?/p>
39銆佸湪鍙互鐢╢ile_get_contents鏇夸唬file銆乫open銆乫eof銆乫gets絳夌郴鍒楁柟娉曠殑鎯呭喌涓嬶紝灝介噺鐢╢ile_get_contents錛屽洜涓轟粬鐨勬晥鐜囬珮寰楀!浣嗘槸瑕佹敞鎰廸ile_get_contents鍦ㄦ墦寮涓涓猆RL鏂囦歡鏃跺欑殑PHP鐗堟湰闂;
PS錛氳繖涓璁頒綇錛屽敖閲忎嬌鐢╢ile_get_contents鍜宖ile_put_contents錛屼笉闇瑕佽嚜宸卞垽鏂枃浠跺彞鏌勬墦寮鏄惁鎴愬姛銆?/span>
40銆佸敖閲忕殑灝戣繘琛屾枃浠舵搷浣滐紝铏界劧PHP鐨勬枃浠舵搷浣滄晥鐜囦篃涓嶄綆鐨?
41銆佷紭鍖朣elect SQL璇彞錛屽湪鍙兘鐨勬儏鍐典笅灝介噺灝戠殑榪涜Insert銆乁pdate鎿嶄綔(鍦╱pdate涓婏紝鎴戣鎭舵壒榪?;
42銆佸敖鍙兘鐨勪嬌鐢≒HP鍐呴儴鍑芥暟(浣嗘槸鎴戝嵈涓轟簡(jiǎn)鎵句釜PHP閲岄潰涓嶅瓨鍦ㄧ殑鍑芥暟錛屾氮璐逛簡(jiǎn)鏈彲浠ュ啓鍑轟竴涓嚜瀹氫箟鍑芥暟鐨勬椂闂達(dá)紝緇忛獙闂鍟?);
PS錛氬唴緗嚱鏁版瘮鐢ㄦ埛鑷畾涔夊嚱鏁版晥鐜囬珮浜?jiǎn)灏啒q戜竴涓暟閲忕駭銆?/span>
43銆佸驚鐜唴閮ㄤ笉瑕佸0鏄庡彉閲忥紝灝ゅ叾鏄ぇ鍙橀噺錛氬璞?榪欏ソ鍍忎笉鍙槸PHP閲岄潰瑕佹敞鎰忕殑闂鍚?);
PS錛氳繖涓繀欏葷殑錛屽彉閲忚繃澶氭垨鑰呰繃澶ф椂錛屾瘡嬈¢噸鍒嗛厤鐨勫紑閿灝辨棤娉曞拷鐣ャ?/span>
44銆佸緇存暟緇勫敖閲忎笉瑕佸驚鐜祵濂楄祴鍊?
45銆佸湪鍙互鐢≒HP鍐呴儴瀛楃涓叉搷浣滃嚱鏁扮殑鎯呭喌涓嬶紝涓嶈鐢ㄦ鍒欒〃杈懼紡;
46銆乫oreach鏁堢巼鏇撮珮錛屽敖閲忕敤foreach浠f浛while鍜宖or寰幆;
47銆佺敤鍗曞紩鍙鋒浛浠e弻寮曞彿寮曠敤瀛楃涓?
PS錛氭檿錛岃繖涓笉灝辨槸絎竴鏉″悧錛?/span>
48銆?#8220;鐢╥+=1浠f浛i=i+1銆傜鍚坈/c++鐨勪範(fàn)鎯紝鏁堢巼榪橀珮”;
49銆佸global鍙橀噺錛屽簲璇ョ敤瀹屽氨unset()鎺?
<?php
//鍒涘緩瀵硅薄
$mysqli = mysqli_init();//璁劇疆瓚呮椂閫夐」
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);//榪炴帴
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'world');//濡傛灉瓚呮椂鎴栬呭叾浠栬繛鎺ュけ璐ユ墦鍗伴敊璇俊鎭?/span>
if (mysqli_connect_errno()) {
printf("Connect failed: %s/n", mysqli_connect_error());
exit();
}
//鎴愬姛杈撳嚭榪炴帴淇℃伅
printf ("Connection: %s/n.", $mysqli->host_info);$mysqli->close();
?>
榪欎釜鏄繛鎺ヨ秴鏃訛紝浣嗘槸鏈変簺鏃跺欐垜浠渶瑕佹煡璇㈣鍐欒秴鏃訛紝姣斿璇存垜浠竴涓暟鎹簱鍘嬪姏寰堝ぇ錛屾垨鑰呰繛鎺ュ緢澶氾紝閭d箞鏁版嵁搴撴煡璇㈠氨寰堢紦鎱紝浣嗘槸鎴戝笇鏈涙煇浜涗笉閲嶈鐨勬暟鎹紝姣斿璇存枃绔犵偣鍑?yán)L暟榪欑濡傛灉鏌ヨ瓚呮椂浜?jiǎn)灏变笉鏄窘C猴紝鑷沖皯鑳藉淇濊瘉涓諱綋欏甸潰姝g‘鏄劇ず錛屼絾鏄煡閬峆HP鎵嬪唽娌℃湁鍙戠幇榪欎釜鎿嶄綔閫夐」鎴栬呭嚱鏁般傛墜鍐岄噷鍙湁榪欎箞鍥涗釜閫夐」錛?/p>

璺熻釜 mysqli 鐨勬墿灞曟簮浠g爜鍙戠幇瀹冨簳灞傝皟鐢ㄧ殑鏄?libmysqlclient 鐨?mysql_options錛?/p>
php-5.2.8/ext/mysqli/mysqli_api.c

騫朵笖鍦╩ysqli鐨凱HP鎵╁睍涓氨鍙鍑轟簡(jiǎn)鍑犱釜鍙橀噺錛?/p>
php-5.2.8/ext/mysqli/mysqli.c

澶ф鐪嬩簡(jiǎn)涓涓?libmysqlclient 鐨勪唬鐮侊紝鍙戠幇鍏跺疄瀹冭嚜甯︽槸鏈夎鍐欒秴鏃惰緗殑錛?/p>
mysql-5.1.30/sql-common/client.c

鍥犱負(fù)瀹冭嚜宸卞畾涔変簡(jiǎn)寰堝鎿嶄綔閫夐」錛屽彧鏄痯hp鎵╁睍閲屾病鏈夛細(xì)
mysql-5.1.30/include/mysql.h

鐪嬬湅mysql涓殑璇誨啓瓚呮椂鏄浣曞疄鐜扮殑錛?/span>
mysql-5.1.30/sql-common/client.c


璇誨啓瓚呮椂鐪熸鎿嶄綔鐨勫湴鏂癸紝瓚呮椂澶勭悊榪欓噷閲嶈瘯浜?jiǎn)涓啤锛寴q樻槸鍐欐浜?jiǎn)锛?xì)
mysql-5.1.30/sql/net_serv.cc


鐜板湪鍩烘湰寰楀嚭浜?jiǎn)缁撹锛?xì)
鎸夌収涓婇潰鏌ョ湅浠g爜鏉ョ湅錛岀洰鍓峆HP閽堝MySQL鏌ヨ瓚呮椂浠ヤ笅闄愬埗錛?/span> 1. 瓚呮椂璁劇疆鍗曚綅涓虹錛屾渶灝戦厤緗?縐?/span> 2. 浣唌ysql搴曞眰鐨剅ead浼?xì)閲嶈瘯涓啤锛屾墍浠ュ疄闄呬細(xì)鏄?3 縐?/span> 閲嶈瘯涓ゆ +銆鑷韓涓嬈?= 3鍊嶈秴鏃舵椂闂淬?/span> 閭d箞灝辨槸璇存渶灝戣秴鏃舵椂闂存槸3縐掞紝涓嶄細(xì)浣庝簬榪欎釜鍊鹼紝瀵逛簬澶ч儴鍒嗗簲鐢ㄦ潵璇村彲浠ユ帴鍙楋紝浣嗘槸瀵逛簬灝忛儴鍒嗗簲鐢ㄩ渶瑕佷紭鍖栥?/span>
鐜板湪鎴戜滑鏉ョ湅鐪嬪鏋滄垜浠嚜宸辮璁劇疆瓚呮椂錛屾垜浠嚜宸卞帇鍏?MYSQL_OPT_READ_TIMEOUT 涔熸槸鍙互杈懼埌璇誨啓瓚呮椂鏁堟灉鐨勶紝鍐欎竴孌典唬鐮佹潵嫻嬭瘯涓涓嬶細(xì)
<?php
//鑷繁瀹氫箟璇誨啓瓚呮椂甯擱噺
if (!defined('MYSQL_OPT_READ_TIMEOUT')) {
define('MYSQL_OPT_READ_TIMEOUT', 11);
}
if (!defined('MYSQL_OPT_WRITE_TIMEOUT')) {
define('MYSQL_OPT_WRITE_TIMEOUT', 12);
}//璁劇疆瓚呮椂
$mysqli = mysqli_init();
$mysqli->options(MYSQL_OPT_READ_TIMEOUT, 3);
$mysqli->options(MYSQL_OPT_WRITE_TIMEOUT, 1);//榪炴帴鏁版嵁搴?br />$mysqli->real_connect("localhost", "root", "root", "test");
if (mysqli_connect_errno()) {
printf("Connect failed: %s/n", mysqli_connect_error());
exit();
}//鎵ц鏌ヨ sleep 1縐掍笉瓚呮椂
printf("Host information: %s/n", $mysqli->host_info);
if (!($res=$mysqli->query('select sleep(1)'))) {
echo "query1 error: ". $mysqli->error ."/n";
} else {
echo "Query1: query success/n";
}//鎵ц鏌ヨ sleep 9縐掍細(xì)瓚呮椂
if (!($res=$mysqli->query('select sleep(9)'))) {
echo "query2 error: ". $mysqli->error ."/n";
} else {
echo "Query2: query success/n";
}$mysqli->close();
echo "close mysql connection/n";
?>
鏌ョ湅涓婇潰浠g爜鐨勬墽琛岀粨鏋滐紝楠岃瘉浜?jiǎn)涓婇潰鐨勮鐐瑰Q岀涓涓煡璇㈡垚鍔熶簡(jiǎn)錛岀浜屼釜鏌ヨ榪炴帴琚柇寮浜?jiǎn)锛?xì)

鍩烘湰涓婂埌榪欓噷灝卞熀鏈兘澶熻В鍐砅HP鍦ㄩ拡瀵筂ySQL璇誨啓鏌ヨ鎿嶄綔瓚呮椂鐨勫鐞嗕簡(jiǎn)錛屽笇鏈涘浣犳湁甯姪銆?br />
// #####################################################
// #####################################################
鏈漢鎸夌収浣滆呯殑鏂規(guī)硶緙栦唬鐮侊紝榪愯鏃跺湪$mysqli->options(MYSQL_OPT_READ_TIMEOUT, 3);榪欎竴姝ュ氨榪斿洖false浜?jiǎn)锛屽疄闄呮煡璇㈡椂READ_TIMEOUT涔熸病鏈夊彂鎸ヤ綔鐢ㄣ傚悗鏉ョ湅php-5.3.8\php-5.3.8\ext\mysqli\mysqli_api.c婧愪唬鐮佹椂鍙戠幇PHP_FUNCTION(mysqli_options)閲屾湁涓琛屼唬鐮侊細(xì)
expected_type = mysqli_options_get_option_zval_type(mysql_option);
榪欎釜鍑芥暟鐨勪綔鐢ㄦ槸鍒ゆ柇options鍊肩被鍨嬶紝鍏朵腑鏈変竴孌碉細(xì)
#ifdef MYSQL_OPT_READ_TIMEOUT
case MYSQL_OPT_READ_TIMEOUT:
case MYSQL_OPT_WRITE_TIMEOUT:
case MYSQL_OPT_GUESS_CONNECTION:
case MYSQL_OPT_USE_EMBEDDED_CONNECTION:
case MYSQL_OPT_USE_REMOTE_CONNECTION:
case MYSQL_SECURE_AUTH:
#endif /* MySQL 4.1.1 */
.........
return IS_LONG;
.........
default:
return IS_NULL;
璨屼技鐢變簬娌℃湁瀹氫箟MYSQL_OPT_READ_TIMEOUT榪欎釜瀹忥紝鎵浠ptions絳変簬MYSQL_OPT_READ_TIMEOUT鏃惰褰掑埌IS_NULL鐨勮繑鍥炵粨鏋滀腑浜?jiǎn)锛屾鏃禤HP_FUNCTION(mysqli_options)浼?xì)鎵ц濡備笅缁撴灉锛?xì)
switch (expected_type) {
case IS_STRING:
ret = mysql_options(mysql->mysql, mysql_option, Z_STRVAL_PP(mysql_value));
break;
case IS_LONG:
l_value = Z_LVAL_PP(mysql_value);
ret = mysql_options(mysql->mysql, mysql_option, (char *)&l_value);
break;
default:
ret = 1;
break;
}
涔熷氨鏄錛屼笉浼?xì)鎵цmysql_options()鏂規(guī)硶錛岃屾槸鐩存帴榪斿洖false銆?/span>
鍦ㄤ換浣曡璦涓紝鍑芥暟閮芥槸鏈鍩烘湰鐨勭粍鎴愬崟鍏冦傚浜巔hp鐨勫嚱鏁幫紝瀹冨叿鏈夊摢浜涚壒鐐癸紵鍑芥暟璋冪敤鏄庝箞瀹炵幇鐨勶紵php鍑芥暟鐨勬ц兘濡備綍錛屾湁浠涔堜嬌鐢ㄥ緩璁紵
鏈枃灝嗕粠鍘熺悊鍑哄彂榪涜鍒嗘瀽緇撳悎瀹為檯鐨勬ц兘嫻嬭瘯灝濊瘯瀵硅繖浜涢棶棰樿繘琛屽洖絳旓紝鍦ㄤ簡(jiǎn)瑙e疄鐜扮殑鍚屾椂鏇村ソ鐨勭紪鍐檖hp紼嬪簭銆傚悓鏃朵篃浼?xì)瀵逛竴浜涘父瑙佺殑php鍑芥暟榪涜浠嬬粛銆?
涓涓猵hp鍑芥暟鏈緇堟槸濡備綍鎵ц錛岃繖涓祦紼嬫槸鎬庝箞鏍風(fēng)殑鍛紵
瑕佸洖絳旇繖涓棶棰橈紝鎴戜滑鍏堟潵鐪嬬湅php浠g爜鐨勬墽琛屾墍緇忚繃鐨勬祦紼嬨?
浠庡浘1鍙互鐪嬪埌錛宲hp瀹炵幇浜?jiǎn)涓涓吀鍨嬬殑鍔ㄦ佽璦鎵ц榪囩▼錛氭嬁鍒頒竴孌典唬鐮佸悗錛岀粡榪囪瘝娉曡В鏋愩佽娉曡В鏋愮瓑闃舵鍚庯紝
婧愮▼搴忎細(xì)琚炕璇戞垚涓涓釜鎸囦護(hù)(opcodes)錛岀劧鍚嶼END铏氭嫙鏈洪『嬈℃墽琛岃繖浜涙寚浠ゅ畬鎴愭搷浣溿侾hp鏈韓鏄敤c瀹炵幇鐨勶紝
鍥犳鏈緇堣皟鐢ㄧ殑涔熼兘鏄痗鐨勫嚱鏁幫紝瀹為檯涓婏紝鎴戜滑鍙互鎶妏hp鐪嬪仛鏄竴涓猚寮鍙戠殑杞歡銆?br />閫氳繃涓婇潰鎻忚堪涓嶉毦鐪嬪嚭錛宲hp涓嚱鏁扮殑鎵ц涔熸槸琚炕璇戞垚浜?jiǎn)opcodes鏉ヨ皟鐢紝姣忔鍑芥暟璋冪敤瀹為檯涓婃槸鎵ц浜?jiǎn)涓鏉℃垨澶氭潯鎸囦護(hù)銆?
瀵逛簬姣忎竴涓嚱鏁幫紝zend閮介氳繃浠ヤ笅鐨勬暟鎹粨鏋勬潵鎻忚堪
typedef union _zend_function { zend_uchar type; /* MUST be the first element of this struct! */ struct { zend_uchar type; /* never used */ char *function_name; zend_class_entry *scope; zend_uint fn_flags; union _zend_function *prototype; zend_uint num_args; zend_uint required_num_args; zend_arg_info *arg_info; zend_bool pass_rest_by_reference; unsigned char return_reference; } common; zend_op_array op_array; zend_internal_function internal_function; } zend_function; typedef struct _zend_function_state { HashTable *function_symbol_table; zend_function *function; void *reserved[ZEND_MAX_RESERVED_RESOURCES]; } zend_function_state;
鍏朵腑錛?br />type鏍囨槑浜?jiǎn)鍑芥暟鐨劸c誨瀷錛氱敤鎴峰嚱鏁般佸唴緗嚱鏁般侀噸杞藉嚱鏁般?br />Common涓寘鍚嚱鏁扮殑鍩烘湰淇℃伅錛屽寘鎷嚱鏁板悕錛屽弬鏁頒俊鎭紝鍑芥暟鏍囧織錛堟櫘閫氬嚱鏁般侀潤(rùn)鎬佹柟娉曘佹娊璞℃柟娉曪級(jí)絳夊唴瀹廣?br />鍙﹀錛屽浜庣敤鎴峰嚱鏁幫紝榪樻湁涓涓嚱鏁扮鍙瘋〃錛岃褰曚簡(jiǎn)鍐呴儴鍙橀噺絳夛紝榪欎釜灝嗗湪鍚庨潰璇﹁堪銆?
Zend緇存姢浜?jiǎn)涓涓叏灞function_table錛岃繖鏄竴涓ぇ鐨刪ash琛ㄣ傚嚱鏁拌皟鐢ㄧ殑鏃跺欎細(xì)棣栧厛鏍規(guī)嵁鍑芥暟鍚嶄粠琛ㄤ腑鎵懼埌瀵瑰簲鐨剒end_function銆?br />褰撹繘琛屽嚱鏁拌皟鐢ㄦ椂鍊欙紝铏氭嫙鏈轟細(xì)鏍規(guī)嵁type鐨勪笉鍚屽喅瀹氳皟鐢ㄦ柟娉曪紝 涓嶅悓綾誨瀷鐨勫嚱鏁幫紝鍏舵墽琛屽師鐞嗘槸涓嶇浉鍚岀殑 銆?
鍐呯疆鍑芥暟錛屽叾鏈川涓婂氨鏄湡姝g殑c鍑芥暟錛屾瘡涓涓唴緗嚱鏁幫紝php鍦ㄦ渶緇堢紪璇戝悗閮戒細(xì)灞曞紑鎴愪負(fù)涓涓悕鍙珃if_xxxx鐨刦unction錛屾瘮濡傛垜浠父瑙佺殑sprintf錛?br />瀵瑰簲鍒板簳灞傚氨鏄痾if_sprintf銆俍end鍦ㄦ墽琛岀殑鏃跺欙紝濡傛灉鍙戠幇鏄唴緗嚱鏁幫紝鍒欏彧鏄畝鍗曠殑鍋氫竴涓漿鍙戞搷浣溿?
Zend鎻愪緵浜?jiǎn)涓緋誨垪鐨刟pi渚涜皟鐢紝鍖呮嫭鍙傛暟鑾峰彇銆佹暟緇勬搷浣溿佸唴瀛樺垎閰嶇瓑銆傚唴緗嚱鏁扮殑鍙傛暟鑾峰彇錛岄氳繃zend_parse_parameters鏂規(guī)硶鏉ュ疄鐜幫紝
瀵逛簬鏁扮粍銆佸瓧絎︿覆絳夊弬鏁幫紝zend瀹炵幇鐨勬槸嫻呮嫹璐濓紝鍥犳榪欎釜鏁堢巼鏄緢楂樼殑銆傚彲浠ヨ繖鏍瘋錛屽浜巔hp鍐呯疆鍑芥暟錛屽叾鏁堢巼鍜岀浉搴攃鍑芥暟鍑犱箮鐩稿悓錛?br />鍞竴澶氫簡(jiǎn)涓嬈¤漿鍙戣皟鐢ㄣ?
鍐呯疆鍑芥暟鍦╬hp涓兘鏄氳繃so鐨勬柟寮忚繘琛屽姩鎬佸姞杞斤紝鐢ㄦ埛涔熷彲浠ユ牴鎹渶瑕佽嚜宸辯紪鍐欑浉搴旂殑so錛屼篃灝辨槸鎴戜滑甯歌鐨勬墿灞曘?br />ZEND鎻愪緵浜?jiǎn)涓緋誨垪鐨刟pi渚涙墿灞曚嬌鐢紝涓嬮潰鏄痬ysqli_real_query鍑芥暟鐨凜鍑芥暟瀹炵幇錛?br />php-5.3.8\php-5.3.8\ext\mysqli\mysqli_api.c
PHP_FUNCTION(mysqli_real_query)
{
MY_MYSQL *mysql;
zval *mysql_link;
char *query = NULL;
int query_len;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &mysql_link, mysqli_link_class_entry, &query, &query_len) == FAILURE) {
return;
}
MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
MYSQLI_DISABLE_MQ; /* disable multi statements/queries */
if (mysql_real_query(mysql->mysql, query, query_len)) {
MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql);
RETURN_FALSE;
}
if (!mysql_field_count(mysql->mysql)) {
if (MyG(report_mode) & MYSQLI_REPORT_INDEX) {
php_mysqli_report_index(query, mysqli_server_status(mysql->mysql) TSRMLS_CC);
}
}
RETURN_TRUE;
}
鍜屽唴緗嚱鏁扮浉姣旓紝鐢ㄦ埛閫氳繃php瀹炵幇鐨勮嚜瀹氫箟鍑芥暟鍏鋒湁瀹屽叏涓嶅悓鐨勬墽琛岃繃紼嬪拰瀹炵幇鍘熺悊銆傚鍓嶆枃鎵榪幫紝
鎴戜滑鐭ラ亾php浠g爜鏄緲昏瘧鎴愪負(fù)浜?jiǎn)涓鏉℃潯opcode鏉ユ墽琛岀殑錛岀敤鎴峰嚱鏁頒篃涓嶄緥澶栵紝瀹為檯涓瘡涓嚱鏁板搴斿埌涓緇刼pcode錛?br />榪欑粍鎸囦護(hù)琚繚瀛樺湪zend_function涓備簬鏄紝鐢ㄦ埛鍑芥暟鐨勮皟鐢ㄦ渶緇堝氨鏄搴斿埌涓緇刼pcodes鐨勬墽琛屻?
瀵逛簬鏍堢殑緇存姢錛寊end鍦ㄨ繖閲屽仛浜?jiǎn)浼樺寲銆傞鍏堝垎閰嶄竴涓暱搴︿負(fù)N鐨勯潤(rùn)鎬佹暟緇勬潵妯℃嫙鍫嗘爤錛?br />榪欑閫氳繃闈?rùn)鎬佹暟緇勬潵妯℃嫙鍔ㄦ佹暟鎹粨鏋勭殑鎵嬫硶鍦ㄦ垜浠嚜宸辯殑紼嬪簭涓篃緇忓父鏈変嬌鐢紝榪欑鏂瑰紡閬垮厤浜?jiǎn)姣弸啤璋冪敤甯︽潵鐨勫唴瀛樺垎閰嶃侀攢姣併?br />ZEND鍙槸鍦ㄥ嚱鏁拌皟鐢ㄧ粨鏉熸椂灝嗗綋鍓嶆爤欏剁殑絎﹀彿琛ㄦ暟鎹甤lean鎺夊嵆鍙?br />鍥犱負(fù)闈?rùn)鎬佹暟緇勯暱搴︿負(fù)N錛屼竴鏃﹀嚱鏁拌皟鐢ㄥ眰嬈¤秴榪嘚錛岀▼搴忎笉浼?xì)鍑虹幇鏍堟孩鍑哄Q岃繖縐嶆儏鍐典笅zend灝變細(xì)榪涜絎﹀彿琛ㄧ殑鍒嗛厤銆侀攢姣侊紝鍥犳浼?xì)瀵艰嚧鎬ц兘涓嬮檷寰堝銆?br />鍦▃end閲岄潰錛孨鐩墠鍙栧兼槸32銆傚洜姝わ紝鎴戜滑緙栧啓php紼嬪簭鐨勬椂鍊欙紝鍑芥暟璋冪敤灞傛鏈濂戒笉瑕佽秴榪?2銆?br />褰撶劧錛屽鏋滄槸web搴旂敤錛屾湰韜彲浠ュ嚱鏁拌皟鐢ㄥ眰嬈$殑娣卞害銆?
铏界劧鍑芥暟鍚嶉暱搴﹀鎬ц兘鏈変竴瀹氬獎(jiǎng)鍝嶏紝浣嗗叿浣撴湁澶氬ぇ鍛紵榪欎釜闂搴旇榪樻槸闇瑕佺粨鍚堝疄闄呮儏鍐墊潵鑰冭檻錛屽鏋滀竴涓嚱鏁版湰韜瘮杈冨鏉傜殑璇濓紝
閭d箞瀵規(guī)暣浣撶殑鎬ц兘褰卞搷騫朵笉澶с?br />涓涓緩璁槸瀵逛簬閭d簺浼?xì)璋冪敤寰堝娆″Q屾湰韜姛鑳藉張姣旇緝綆鍗曠殑鍑芥暟錛屽彲浠ラ傚綋鍙栦竴浜涜█綆鎰忚祬鐨勫悕瀛椼?
鍦╬hp涓紝鏈夎繖鏍蜂竴浜涘嚱鏁幫紝瀹冧滑鍦ㄤ嬌鐢ㄤ笂鏄爣鍑嗙殑鍑芥暟鐢ㄦ硶錛屼絾搴曞眰瀹炵幇鍗村拰鐪熸鍑芥暟璋冪敤瀹屽叏涓嶅悓錛岃繖浜涘嚱鏁頒笉灞炰簬鍓嶆枃鎻愬埌鐨勪笁縐峟unction涓殑浠諱綍涓綾伙紝
鍏跺疄璐ㄦ槸涓鏉″崟鐙殑opcode錛岃繖閲屼及涓斿彨鍋氫吉鍑芥暟鎴栬呮寚浠ゅ嚱鏁般?
濡備笂鎵璇達(dá)紝浼嚱鏁頒嬌鐢ㄨ搗鏉ュ拰鏍囧噯鐨勫嚱鏁板茍鏃犱簩鑷達(dá)紝鐪嬭搗鏉ュ叿鏈夌浉鍚岀殑鐗瑰緛銆備絾鏄粬浠渶緇堟墽琛岀殑鏃跺欐槸琚珃end鍙嶆槧鎴愪簡(jiǎn)涓鏉″搴旂殑鎸囦護(hù)錛坥pcode錛夋潵璋冪敤錛?br />鍥犳鍏跺疄鐜版洿鎺ヨ繎浜巌f銆乫or銆佺畻鏈繍綆楃瓑鎿嶄綔銆?
閫氳繃涓婇潰鐨勪粙緇嶅彲浠ョ湅鍑猴紝浼嚱鏁扮敱浜庤鐩存帴緲昏瘧鎴愭寚浠ゆ潵鎵ц錛屽拰鏅氬嚱鏁扮浉姣斿皯浜?jiǎn)涓嬈″嚱鏁拌皟鐢ㄦ墍甯︽潵鐨勫紑閿錛屽洜姝ゆц兘浼?xì)鏇村ソ涓浜涖?br />鎴戜滑閫氳繃濡備笅嫻嬭瘯鏉ュ仛涓涓姣斻?Array_key_exists鍜宨sset涓よ呴兘鍙互鍒ゆ柇鏁扮粍涓煇涓猭ey鏄惁瀛樺湪錛岀湅涓涓嬩粬浠殑鎬ц兘
浠庡浘涓婂彲浠ョ湅鍑猴紝鍜宎rray_key_exists鐩告瘮錛宨sset鎬ц兘瑕侀珮鍑哄緢澶氾紝鍩烘湰鏄墠鑰呯殑4鍊嶅乏鍙籌紝鑰屽嵆浣挎槸鍜岀┖鍑芥暟璋冪敤鐩告瘮錛?br />鍏舵ц兘涔熻楂樺嚭1鍊嶅乏鍙熾傜敱姝や篃渚ч潰鍗拌瘉鍐嶆璇存槑浜?jiǎn)php鍑芥暟璋冪敤鐨勫紑閿榪樻槸姣旇緝澶х殑銆?
#include <opnet.h>

/**//***** constants *****/

/**//* propagation velocity of radio signal (m/s) */
#define PROP_VELOCITY 3.0E+08

/**//* The variable defining a maximum range across which the station can communicate (meters) */
static double wlan_max_distance = OPC_DBL_INFINITY;

/**//***** pipeline procedure *****/
#if defined (__cplusplus)
extern "C"
#endif
void
Zhou_wlan_propdel (pkptr)
Packet* pkptr;
{
double start_prop_delay, end_prop_delay;
double start_prop_distance, end_prop_distance;

// Compute the propagation delay separating the
// radio transmitter from the radio receiver.
FIN (wlan_propdel (pkptr));
// Get the start distance between transmitter and receiver.
start_prop_distance = op_td_get_dbl (pkptr, OPC_TDA_RA_START_DIST);
// Get the end distance between transmitter and receiver.
end_prop_distance = op_td_get_dbl (pkptr, OPC_TDA_RA_END_DIST);
// Compute propagation delay to start of reception.
start_prop_delay = start_prop_distance / PROP_VELOCITY;
// Compute propagation delay to end of reception.
end_prop_delay = end_prop_distance / PROP_VELOCITY;
// If the maximum transmission range of the station is not already set
// then extract it from the user defined simulation attribute.
if (wlan_max_distance == OPC_DBL_INFINITY)
{
if (op_ima_sim_attr_exists ("Wireless LAN Range (meters)") == OPC_TRUE)
{
op_ima_sim_attr_get (OPC_IMA_DOUBLE, "Wireless LAN Range (meters)", &wlan_max_distance);
}
//printf ("wlan_max_distance is %f \n", wlan_max_distance);
}
// If the starting and ending propagation distance is more than the maximum transmission
// range then discard the packet in the pipeline stage. This will model the physical
// transmission boundary of a wireless station.
if (end_prop_distance > wlan_max_distance || start_prop_distance > wlan_max_distance)
{
// Discard the packet if the destination is more than the specified range
op_td_set_int (pkptr, OPC_TDA_RA_MATCH_STATUS, OPC_TDA_RA_MATCH_IGNORE);
}
// Place both propagation delays in packet transmission data attributes.
op_td_set_dbl (pkptr, OPC_TDA_RA_START_PROPDEL, start_prop_delay);
op_td_set_dbl (pkptr, OPC_TDA_RA_END_PROPDEL, end_prop_delay);
FOUT;
}
#include <opnet.h>

/**//***** constants *****/

/**//* propagation velocity of radio signal (m/s) */
#define PROP_VELOCITY 3.0E+08

/**//* The variable defining a maximum range across which the station can communicate (meters) */
static double wlan_max_distance = OPC_DBL_INFINITY;

/**//***** pipeline procedure *****/
#if defined (__cplusplus)
extern "C"
#endif
void
wlan_propdel (pkptr)
Packet* pkptr;
{
double start_prop_delay, end_prop_delay;
double start_prop_distance, end_prop_distance;

// Compute the propagation delay separating the
// radio transmitter from the radio receiver.
FIN (wlan_propdel (pkptr));
// Get the start distance between transmitter and receiver.
start_prop_distance = op_td_get_dbl (pkptr, OPC_TDA_RA_START_DIST);
// Get the end distance between transmitter and receiver.
end_prop_distance = op_td_get_dbl (pkptr, OPC_TDA_RA_END_DIST);
// Compute propagation delay to start of reception.
start_prop_delay = start_prop_distance / PROP_VELOCITY;
// Compute propagation delay to end of reception.
end_prop_delay = end_prop_distance / PROP_VELOCITY;
// If the maximum transmission range of the station is not already set
// then extract it from the user defined simulation attribute.
if (wlan_max_distance == OPC_DBL_INFINITY)
{
if (op_ima_sim_attr_exists ("Wireless LAN Range (meters)") == OPC_TRUE)
{
op_ima_sim_attr_get (OPC_IMA_DOUBLE, "Wireless LAN Range (meters)", &wlan_max_distance);
}
//printf ("wlan_max_distance is %f \n", wlan_max_distance);
}
// If the starting and ending propagation distance is more than the maximum transmission
// range then discard the packet in the pipeline stage. This will model the physical
// transmission boundary of a wireless station.
if (end_prop_distance > wlan_max_distance || start_prop_distance > wlan_max_distance)
{
// Discard the packet if the destination is more than the specified range
op_td_set_int (pkptr, OPC_TDA_RA_MATCH_STATUS, OPC_TDA_RA_MATCH_IGNORE);
}
// Place both propagation delays in packet transmission data attributes.
op_td_set_dbl (pkptr, OPC_TDA_RA_START_PROPDEL, start_prop_delay);
op_td_set_dbl (pkptr, OPC_TDA_RA_END_PROPDEL, end_prop_delay);
FOUT;
} 璋冭瘯鑴氭湰錛?br>sh [-nvx] scripts
-n 涓嶆墽琛岃剼鏈紝鏌ヨ鑴氭湰鍐呯殑璇硶錛岃嫢鏈夐敊璇垯鍒楀嚭
-v 鍦ㄦ墽琛岃剼鏈箣鍓嶏紝鍏堝皢鑴氭湰鐨勫唴瀹規(guī)樉紺哄湪灞忓箷涓?br>-x 灝嗙敤鍒扮殑鑴氭湰鍐呭鏄劇ず鍦ㄥ睆騫曚笂錛屼笌-v紼嶅井涓嶅悓
娉ㄦ剰錛?br>1.鍦ㄦ潯浠跺垽鏂椂涓鑸嬌鐢?$var"鐨勫艦寮忥紝榪欐槸涓轟簡(jiǎn)闃叉鍑虹幇var涓虹┖鐨勬儏鍐碉紝渚嬪錛歩f [ $var = "yes" ]涓紝濡傛灉var涓虹┖錛岄偅涔堜細(xì)鍑虹幇if [ = "yes" ]鐨勬儏鍐碉紝榪欐槸涓嶅悎娉曠殑錛岃宨f [ "$var" = "yes"]鍒欎笉浼?xì)鍑虹幇璇ラ棶棰樸?br>