You are on page 1of 55

CHNG 1 : GII THIU, CI T V CU HNH APACHE, PHP V MYSQL

I_ APACHE HTTP SERVER 1_Gii thiu Apache HTTP Server


D n Apache l mt s c gng pht trin phn mm cng tc nhm n vic to ra mt HTTP server mnh m, c hng thng mi, c cao,v m ngun thc hin min ph. D n c tham gia qun l bi mt nhm ngi tnh nguyn trn ton th gii s dng internet v Web truyn thng , dng k hoch v pht trin server . Nhng ngi tnh nguyn ny c bit n nh l nhm Apache. Thm na, hng trm ngi s dng ng gp cc tng, m v cc ti liu cho d n. Vo khong thng 2 nm 1995, phn ln phn mm server c a chung trn web l tn min HTTP daemon cng cng c pht trin bi Rob McCool ti trung tm quc gia ca cc ng dng siu my tnh, trng i hc Illinois, Urbana-Champaign. Tuy nhin, s pht trin httpd b ngng tr sau khi Rob ri NCSA vo khong gia nm 1994, v rt nhiu nh pht trin web pht trin phn m rng ca chnh h v khc phc li trong s cn thit ca mt s phn pht chung. Mt nhm nh ca cc nh pht trin web ny, kt hp vi nhau thng qua e-mail l chnh, kt hp cng vi nhau cho mc ch phi hp nhng thay i ca h ( trong hnh thc cc ming v). Bng cch dng httpd 1.3 lm nn, h thm vo ton b cc ming v c cng b v cc tnh nng cao cp khc, th nghim trn chnh cc server ca h, v cho ra i phin bn cng khai chnh thc u tin (0.6.2) ca server Apache trong thng 4 nm 1995. Server Apache ban u l mt s thnh cng ln, nhng h cho rng m ban u cn phi c kim tra k lng v thit k li. Trong sut thng 5 nm v thng 6 nm 1995, Robert Thau thit k mt kin trc server mi( m c t tn l Shambhala) n bao gm mt cu trc module v API cho vic m rng c tt hn. Nhm lm vic chuyn sang nn server mi ny t thng su v thm cc c im t phin bn 0.7.x, a n kt qu trong Apache 0.8.8 ( v cc anh em ca n) trong thng tm. Sau khi pht hnh rng ri bn th nghim beta, rt nhiu l hng trong cc nn khc nhau c tm thy, mt tp ti liu mi ( ca David Robinson), v qu trnh thm rt nhiu cc chc nng trong dng ca cc module chun ca h, Apache 1.0 c pht hnh vo ngy1 thng 12 nm 1995. Theo nh gi ca Netcraft (http://www.netcraft.com/survey/) ch ra rng ngy nay Apache c s dng mt cch rng ri hn so vi tt c cc web server c tng hp.

2_S dng Apache vi Microsoft Windows


2.1_Cc yu cu: Apache 1.3 c thit k trn Windows NT 4.0 v Windows 2000. Trnh ci t nh phn s ch lm vic vi h vi x l x86,v d nh ca hng Intel. Apache cng c th chy trn Windows 95 v 98. Trong mi trng hp, TCP/IP networking phi c ci t. Nu chy trn NT 4.0 th phi chc rng my c ci t Service Pack 3 hoc Service 6. Ch : "Winsock 2" phi c yu cu cho Apache 1.3.7 v cc bn sau ny. Nu chy trn Windows 95, bn nmg cp "Winsock2" phi c ci t trc khi Apache chy. "Winsock2" cho Windows 95 c sn ti cc a ch: http:// www.microsoft.com/windows95/downloads. Bn cp nht Winsock2 phi c ci t li sau khi ci t Windows 95 dialup networking. 2.2_Downloading Apache cho Windows Thng tin v phin bn mi nht cho Apache c th c tm thy trn webserver ca Apache ti http://www.apache.org/httpd. Ti y s lit k phin bn pht hnh v cc bn pht hnh th. C th download bn nh phn ca Apache cho Windows c t tn nh: apache_1_3_#-win32with_src.msi nu mun nghin cu m ngun ca Apache th ta c th ti bn apache_1_3_#-win32no_src.msi. Cc bn ny u c Apache runtime. Trc khi ci t Apache runtime, trong my PC phi c ci Microsoft Installer version 1.10. Windows 2000 v Windows ME u c h tr Microsoft Installer,cn nu khng th ta phi download trn trang web ca Microsoft. 2.3_Ci t Apache trn Windows Chy file Apache .msi m ta download v. S c mt s li nhc nh:

Tn ca ta v tn ca cng ty ta, v trn Windows NT/2000, c th ta mun tt c user truy cp vo Apache nh l mt dch v, hoc nu ta mun ci t chy khi ta chn Start Apache shortcut. Tn Server ca ta, tn Domain v ti khon qun tr ca ta. Th mc m ta mun ci t Apache (mc nh l C:\Program Files\Apache Group\Apache mc d ta c th thay i iu ny ti bt k th mc no ta thch) kiu c t. Tu chn "Complete" s ci t tt c mi th, bao gm m ngun nu ta download gi -with_src.msi . Chn ci t "Custom" nu ta chn khng ci t ti liu, hoc m ngun t gi.

Trong qu trnh ci t, Apache s cu hnh cc file trong th mc conf cho s la chn th mc ci t ca ta.Tuy nhin, nu c bt k mt file no trong th mc ny th chng cng khng b ghi . Thay vo , bn copy mi s c gn vi ui .default. Sau khi ci t Apache, ta s phi bin tp file cu hnh trong th mc conf, iu ny l bt buc. Cc file ny s c cu hnh trong qu trnh ci t chun b cho Apache c chy t th mc m n c ci t, vi cc ti liu c p ng trong th mc con htdocs.C rt nhiu cc tu chn s c thit lp trc khi ta thc s bt u s dng Apache.Tuy nhin, c th bt u mt cch nhanh chng, cc file s c thc hin nh khi c ci t.Nu ta mun r b Apache, cc file cu hnh s khng b b i. Ta phi xo cy th mc ("C:\Program Files\Apache Group" l mc nh) nu ta thy khng cn thit gi cc file cu hnh v cc file web ca ta.

2.4_Chy Apache trn Windows C hai cch ta c th chy Apache:

Nh l mt "service" (ch c kim tra trn NT/2000 , nhng bn thc nghim cng c sn cho 95/98). y l tu chn tt nht nu ta mun Apache t ng khi ng khi my ca ta boot, v gi cho Apache lun chy khi ta log-off. T mt console window. y l tu chn tt nht cho ngi s dng trn Windows 95/98 .

Cc bc thc hin trc khi bt u Apache nh l mt dch v Windows chy Apache t mt ca s , chn thu chn "Start Apache as console app" t menu Start menu (trong Apache 1.3.4 v cc bn sm hn, tu chn ny c gi l "Apache Server"). iu ny s m ra mt ca s console v bt u Apache chy trong . Mn hnh ny vn s cn cho n khi ta dng Apache. dng Apache khi n ang chy, c th chn biu tng"Shutdown Apache console app" t menu Start(iu ny khnng c trong Apache 1.3.4 hoc cc bn sm hn, hoc c th dng cc lnh iu khin Apache trong mn hnh console. Trong cc phin bn Apache 1.3.13 v trc , ta c th g Ctrl+C hoc Ctrl+Break tt mn hnh Apache console.V trn Windows NT/2000 vi phin bn 1.3.13, Apache s dng nu ta chn 'Close' t menu h thng (bm vo biu tng trn gc trn tri ca mn hnh console) hoc bm vo nt (X) trn gc phi mn hnh console. Th Apache cho Windows Nu gp trc trc khi bt u khi ng Apache, hy theo cc bc di c lp vn . iu ny c ng dng nu ta bt u Apache vi shortcut "Start Apache as a console app" t menu Start v mn hnh console t nhin tt hoc nu ta gp trc trc khi khi ng Apache nh l mt dch v. Chy "Command Prompt" t Start Menu - Programs . Chuyn n th mc m ta ci Apache, nh lnh apache, v c thng bo li. Sau xem trc file error.log tm hiu cc l. Nu ta chp nhn cc mc nh khi ta co t Apache, cu lnh s l:
c: cd "\program files\apache group\apache" apache Wait for Apache to exit, or press Ctrl+C more <logs\error.log

Sau khi xem file error.log, ta c th thy c li l g v bit cch khc phc chng v th li ln na. Sau khi khi ng, Apache s chy (hoc trong mt mn hnh console window hoc l mt dch v) nu c listening ti cng 80 (Nu ta khng thay i Port, Listen hoc BindAddress ch dn trong cc file cu hnh). kt ni vo server v truy cp vo trang web mc nh, chy trnh duyt v nhp vo a ch URL nh sau:
http://localhost/

iu ny s phn hi li vi mt trang cho mng, v mt lin kt n trang sch hc Apache. Nu khng c g xy ra hoc c mt li xut hin, hy xem file error.log trong th mc logs. Nu my ca ta khng kt ni vo internet, ta phi nhp vo dng a ch URL nh sau:
http://127.0.0.1/

Mt khi cc ci t ang lm vic, ta s phi cu hnh chnh xc bng cch bin tp cc file trong th mc conf.

Bi v Apache khng th chia s cng mt cng vi mt ng dng TCP/IP khc, ta phi dng hoc d b cc dch v no trc. iu ny bao gm c cc web server khc v cc sn phm firewall nh Blackile.Nu ta ch c th chy Apache khi dng cc dch v ny, hy cu hnh li Apache hoc cc sn phm khc sao cho chng khng chung cng listen TCP/IP.C l ta phi chy dng lnh "netstat -an" xem cng no c s dng. 2.5_Cu hnh Apache trn Windows Apache c cu hnh bi cc file trong th mc conf . y cng l cc file c s dng cu hnh cho phin bn Unix nhng cng c mt s ch dn khc trn phin bn Apache cho Windows. Bt u cu hnh Apache server bng cch xem trc httpd.conf v cc li hng dn ca n. Mc d cc file access.conf v srm.conf u tn ti, y l cc file c thng khng c s dng bi hu ht cc nh qun tr , v bn cng khng thy nhng li hng dn y. httpd.conf cha ti liu tht tuyt vi, bng cch theo cc hng dn cu hnh mc nh c khuyn dng khi bt u vi Apache server. Bt u bng cch c cc ch thch ny hiu file cu hnh ,v thc hin mt s nh cc thay i,bt u Apache trong mt mn hnh console vi mt thay i. Nu bn gp phi li, tht d dng sao lu cu hnh nhng g lm lc cui cng. Bn s c mt tng tt hiu thay i no gy nn li cho server. Nhng iu khc nhau chnh trong Apache cho Windows l:

Bi v Apache cho Windows l a lung, n khng s dng mt tin trnh ring bit cho mt yu cu nh Apache trn Unix. Thay vo ch c 2 tin trnh ang chy: mt tin trnh cha v mt tin trnh con n ch cc yu cu. Trong tin trnh con mi yu cu c n ch bi mt lung ring bit. Bi vy,"cch thc"-cc li ch dn qun l l khc nhau: o MaxRequestsPerChild - Ging nh ch th Unix, n iu khin c bao nhiu yu cu m mt tin trnh s phc v trc khi tn ti. Tuy nhin, khng ging nh Unix, mt tin trnh s phc v tt c cc yu cu cng mt lc, khng ch mt, bi vy nu iu ny c lp, s c mt s ln c s dng. iu khuyn dng l mc nh, MaxRequestsPerChild 0, khng lm cho tin trnh kt thc mi mi. o ThreadsPerChild - Ch th ny l mi, v ch cho server bit c bao nhiu lung n s dng. y l con s ln nht cc kt ni m server c th n ch cng mt lc; phi chc chn v thit lp s ny ln cho trang ca bn nu bn c nhiu vic thnh cng. Gi tr mc nh khuyn l ThreadsPerChild 50. Cc ch th chp nhn tn file lm i s by gi phi dng tn file ca windows thay v nh unix trc y.Tuy nhin, bi v Apache s dng tn kiu cch Unix cc b, bn phi s dng du gch cho trc, khng phi l du gch cho sau. Cc tn ch ci ca a c th c dng, nu b b st, a vi kh nng thc thi ca Apache s c tha nhn. Apache cho Windows c kh nng load cc module trong thi gian chy m khng cn bin dch li server. Nu Apache c bin dch mt cch thng thng, n s ci t mt s cc module tu chn trong th mc \module. kch hot iu ny, hoc cc module khc, ch th LoadModule phi c dng. V d, kch hot module trng thi, ta lm nh sau ( thng tin thm v cc ch th kch hot trng thi trong file access.conf):
LoadModule status_module modules/mod_status.so

Thng tin v vic to cc module c kh nng ti cng c sn. Ch mt vi module ca cc hng th 3 c th c pht hnh vi cc kiu cch t tn c,

ApacheModuleFoo.dll. Thng xuyn thit lp lnh LoadModule theo hng dn trong cc ti liu ca cc hng th 3.

Apache cho Windows phin bn 1.3 c thc hin trong cc cuc gi ng b. iu ny gy ra mt vn to ln cho cc tc CGI , ngi s khng thy cc kt qu khng c m c gi trc tip ti trnh duyt. iu ny khng c m t cho CGI trong Apache, nhng n c tc ng hiu qu vi cng Windows. Apache 2.0 c ci tin thc hin cc tnh trng khng ng b c mong ch, v chng ta hi vng tm ra rng s thc thi trong Win NT/2000 cho php CGI c i x nh ti liu c cung cp. Apache cng c th np cc phn m rng ca ISAPI (v d: Internet Server Applications), nh th chng c dng bi Microsoft's IIS, v cc server Windows khc. Ch rng Apache khng np cc b lc ISAPI.

Chy Apache trong mt Console Window Biu tng menu Start v trnh qun l dch v NT c th cung cp mt giao din n gin cho vic qun tr Apache. Nhng mt s trng hp th d dng hn khi lm vic t dng lnh. Khi lm vic vi Apache ta phi bit bng cch no n s tm cc file cu hnh. Ta c th ch ra mt file cu hnh c th trn dng lnh qua hai cch:

-f ch ra mt ng dn ti mt file cu hnh chuyn bit:

apache -f "c:\my server\conf\my.conf" apache -f test\test.conf

-n ch ra file cu hnh ca mt dch v Apache c ci t (Apache 1.3.7 v sau ny):

apache -n "tn dch v "

Trong cc trng hp ny, ServerRoot tht s s c thit lp trong file cu hnh. Nu ta khng ch ra mt tn file cu hnh vi -f hoc -n, Apache s s dng tn file c bin dch trong server, thng thng l "conf/httpd.conf". Gi Apache vi chuyn dch V s hin th gi tr ny c gn nhn l SERVER_CONFIG_FILE. Apache tip n s nh r ServerRoot ca n bng cch c gng thc hin theo trnh t nh sau:

Mt ch th ServerRoot thng qua mt chuyn tc -C . Chuyn tc -d trn dng lnh. Th mc hin ti ang lm vic. Mt u vo ng k , c to nu bn thc hin ci t nh phn. Server root c bin dch trong server.

Server root c bin dch trong server thng thng l "/apache". Thc hin apache vi chuyn tc -V s hin th gi tr ny c gn nhn l HTTPD_ROOT. Khi c thc hin t menu start, Apache thng thng b qua cc i s, bi vy s dng u vo ni ng k l k thut c yu thch hn cho console Apache. Trong khi ci t nh phn, mt kho ng k s c ci t, v d:
HKEY_LOCAL_MACHINE\Software\Apache Group\Apache\1.3.13\ServerRoot

Kho ny c bin dch trong server v c th cho php bn kim tra cc phin bn mi m khng gy nn hu qu cho phin bn hin ti. D nhin ta phi cn thn khng ci t phin bn mi ln trn phin bn c trong h thng file.

Nu bn khng thc hin ci t nh phn khi Apache s trong mt s tnh hung gy li v vic thiu kho ng k. Cnh bo ny c th b qua nu c th tm thy cc file cu hnh ca n. Gi tr ca kho ny l th mc "ServerRoot" , cha th mc conf . Khi Apache bt u, n s c file httpd.conf t th mc ny. Nu file ny cha mt ch th ServerRoot khc vi th mc m c kho trc , Apache s qun kho ng k v s dng th mc t file cu hnh. Nu bn copy th mc Apache hoc cc file cu hnh ti mt v tr mi iu quan trng l ta cp nht th mc ServerRoot trong file httpd.conf ti v tr mi. chy Apache t dng lnh nh l mt ng dng console, s dng lnh sau:
apache

Apache s thc thi v s cn chy cho n khi ta nhn phm ctrl-C. iu khin Apache trong mt mn hnh Console Ta c th ch cho Apache trong khi ang chy phi dng bng cch m mt mn hnh console khc v chy lnh:
apache -k shutdown

Ch : Tu chn ny ch c th c hiu lc vi Apache 1.3.3 v sau ny. Vi cc phin bn trc, bn phi dng ctrl-C trong mn hnh console tt server. T phin bn 1.3.3 ti 1.3.12, iu ny s thay cho vic nhn ctrol-c trong mt mn hnh console Apache, bi v n cho php Apache kt thc bt k cc giao dch hin thi v thu gn nhanh chng. Ti phin bn 1.3.13 khi nhn Control-C trong mn hnh ang chy s lm sch Apache kh tt, v bn c th dng k stop nh l mt b danh cho k shutdown .Cc phin bn trc khng hiu k stop. Ta cng c th ch cho Apache khi ng li. iu ny lm cho n c li cc file cu hnh. Bt k giao dch no trong pht trin u c php hon thin m khng cn ngt qung. khi ng li Apache, chy:
apache -k restart

Ch : Tu chn ny ch c c trong Apache 1.3.3 v sau ny. Vi cc phin bn trc, ta cn phi dng Control-C trong mn hnh Apache console tt server, v khi ng li vi lnh ca Apache. Chc nng khc rt hu dng l tu chn kim tra cc file cu hnh . kim tra cc file cu hnh , chy:
apache -t

y l s thay i sau ny c bit hu dng vi cc file cu hnh trong khi Apache thm ch ang chy. Ta c th thc hin mt s thay i, khng nh l c php lnh "apache -t" l chnh xc, k n khi ng li Apache vi "apache -k restart". Apache s c li cc file cu hnh, cho php bt k giao dch no trong s tin trin hon thnh m khng phi ngt qung.Bt k yu cu mi no cng s c phc v s dng cu hnh mi. Ch : Vi nhng ngi quen thuc vi Apache cho Unix cc lnh ny cung cp mt s tng ng vi Windows kill -TERM pid v kill -USR1 pid. Tu chn dng lnh c dng, -k, c chn nh l mt nhc nh lnh "kill" c s dng trong Unix.

II_H QUN TR CSDL MySQL


MySQL, c s d liu SQL m ngun m thng dng nht , c cung cp bi MySQL AB. MySQL AB l mt cng ty thng mi thc hin vic to ra cc dch v cung cp cho doanh nghip xung quanh c s d liu MySQL.

1_MySQL l mt h qun tr CSDL.


Mt CSDL l mt tp hp cu trc ca d liu. N c th l bt k mt ci g t mt danh sch bn hng n gin cho ti gallery nh hoc s lng ln cc thng tin trong mt mng doanh nghip. thm, truy nhp v x l d liu c lu tr trong mt CSDL my tnh, ta cn mt h qun tr CSDL nh MySQL. T khi cc my tnh thc hin tt vic x l lng ln d liu, qun tr CSDL ng mt vai tr chnh yu trong vic tnh ton, nh l cc cng c n l, hoc mt phn ca cc ng dng khc. 2_MySQL l mt h qun tr CSDL quan h. Mt CSDL quan h lu tr d liu trong trong mt s bng chuyn bit tt hn l vic t ton b d liu trong mt ni lu trln. iu ny lm tng thm tc v s linh hot. Cc bng c lin kt vi nhau bng cch nh ngha cc quan h to cho n kh nng kt ni d liu t mt vi bng khc nhau theo yu cu. SQL l mt phn ca MySQL trong Structured Query Language- ngn ng chun thng dng nht c dng truy nhp cc CSDL.

3_MySQL l mt phn mm m ngun m


M ngun m c ngha l n c th c s dng bi bt k ai cho mc ch s dng hoc thay i no. Bt k ai cng c th download MySQL t internet v s dng n m khng phi tr bt k mt th g. Bt k ai c thch cng c th nghin cu m ngun v thay i chng theo yu cu ca ring mnh. MySQL dng GPL (GNU General Public License) http:// www.gnu. Org, nh ra ta c th c lm g v khng c lm g vi phn mm trong cc hon cnh khc nhau. Nu ta cm thy kh chu vi GPL hoc mun nhng MySQL trong mt ng dng thng mi th ta c th mua mt bn quyn thng mi t cc nh cung cp.

4_L do dng MySQL


MySQL rt nhanh, ng tin cy v d dng s dng. Nu iu l ci m bn ang mong mun, bn c th dng th n. MySQL cng c mt tp cc c im rt thit thc c pht trin trong mt s hp tc rt cht ch vi ngi s dng. Bn c th em so snh mt cch cng phu gia MySQL v mt s h qun tr CSDL khc trong trang web chm im ca nh cung cp. MySQL c pht trin mt cch sng to nm bt cc CSDL rt ln v nhanh hn rt nhiu cc gii php hin ti v thnh cng trong vic c s dng trong cc mi trng sn xut i hi cao trong vi nm. Thng qua qu trnh pht trin khng ngng, ngy nay, MySQL cung cp mt tp cc hm rt hu ch v di do. S kt ni, tc v s bo mt lm cho MySQL tr nn thch ng cao cho vic truy cp cc CSDL trn internet.

5_Cc cim v mt k thut ca MySQL


MySQL l mt h thng client/server bao gm mt SQL server a lung cho php h tr nhiu thit b u cui khc nhau, mt vi chng trnh client khc nhau v cc th vin, cc cng c qun tr v mt vi giao din lp trnh. Cc nh cung cp cng cung cp MySQL nh l mt th vin a lung m ta c th kt ni trong ng dng ca ta t ti mt sn phm nh hn, nhanh hn, d dng qun l hn. MySQL c nhiu cc phn mm c phn phi c sn. iu ny tht s thun tin cho ta trong vic tm ng dng yu thch ca ta hoc ngn ng h tr MySQL.

II_Hypertext Preprocessor - PHP


1_Khi nim PHP PHP ( mt cch chnh thc l PHP: Hypertext Preprocessor) l mt ngn ng script c nhng bn server HTML. V d:
<html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body>

</html> Ch v s khc nhau ca mt script c vit bng cc ngn ng khc nhau ging nh perl hoc C thay v vit mt chng trnh vi rt nhiu lnh xut ra HTML, ta vit mt script HTML vi mt s m nhng thc hin mt cng vic g ( trong trng hp ny, a ra mt s vn bn) . M PHP c ng kn trong cc tag bt u v cc tag kt thc c bit cho php ta nhy vo v nhy ra ch PHP. iu nhn ra PHP t nhng g ging Javascript bn pha Client l m chng trnh c thc hin bn pha server. Nu ta c mt script ging nh trn bn pha server ca ta, client s nhn cc kt qu t vic chy script , m khng cn cch no xc nh iu g bn di m lnh. Thm ch ta c th cu hnh webserver ca ta x l tt c cc file HTML ca ta vi PHP, v v vy khng cn cch no m nhng ngi s dng c th bit iu g ta ln k hoch.

2_PHP c th lm c nhng g ?
Ti hu ht cc mc c bn nht, PHP c th lm bt k iu g m cc chng trnh CGI khc c th lm, v d nh tp hp cc dng d liu, sinh ra ni dung cc trang web ng, hoc gi v nhn cc cookie. C l c im mnh nht v thun tin nht trong PHP l n h tr kh nng rng ln cc c s d liu. Vit mt trang web c tng tc c s d liu tr nn n gin mt cch ng kinh ngc. Cc c s dliu di y hin ti c h tr : Adabas D Ingres Oracle (OCI7 and OCI8) dBase InterBase Ovrimos Empress FrontBase PostgreSQL FilePro (read-only) mSQL Solid Hyperwave Direct MS-SQL Sybase IBM DB2 MySQL Velocis Informix ODBC Unix dbm PHP cng h tr cho vic ni chuyn vi cc dch v khc s dng cc thao tc nh IMAP,SNMP,NNTP,POP3,HTTP v v s giao thc khc. Ta cng c th m cc socket mng mi v tng tc s dng cc giao thc khc.

3_Bn tm tt lch s ca PHP


PHP c ngh n trong khong cui nm 1994 bi Rasmus Lerdorf. Cc phin bn khng pht hnh trc c dng trn chnh trang ch ca anh ta theo di ai ang tm bn l lch trc tuyn ca anh ta. Phin bn u tin c dng bi nhng ngi khc c sn trong khong thi gian trc nm 1995 v c bit n nh l cc cng c trang ch c nhn. N bao gm mt b my phn tch t loi mt cch n gin m ch c hiu l mt s t cc macro c bit v mt s cc tin ch m c dng mt cch thng dng trn cc trang ch trc . B phn tch t loi c vit li vo gia nm 1995 v c tn l PHP/FI phin bn 2. FI c c l do t mt gi khc ca Rasmus c vit li c bin dch nh dng d liu HTML. Anh ta kt hp cc script cc cng c trang ch c nhn vi trnh bin dch form v thm vo h tr mSQL v PHP/FI ra i. PHP/FI pht trin ln mt cch ng kinh ngc v mi ngi bt u ng gp m cho n. thng k mt cch nghim khc l mt iu phc tp, nhng c lng khong cui nm 1996 PHP/FI c dng trn t nht 15000 trang web trn khp th gii. Khong gia nm 1997 con s ny tng ln trn 50000 trang web. Gia nm 1997 cng thy mt s thay i trong vic pht trin PHP. N thay i t vic s hu d n cng ca Rasmus rng mt nhm ngi ng gp vo, c thm nhiu s thng nht c trt t ca nhm sao cho t hiu qu cao. B phn tch t loi c vit li mt cch hn tp bi Zeev Suraski v Andi Gutmans v b phn tch t loi mi ny nh hnh nn tng cho phin bn 3 ca PHP. Nhiu m tin ch t PHP/FI c dng cho PHP3 v nhiu trong s c vit li mt cch hon ton. Phin bn PHP4 dng b my scripting Zend phn phi s thc hin cao cp hn, h tr mt mng cc th vin v cc m rng ca cc hng th 3 rng ri hn v chy nh l mt module server a phng vi ton b cc web server c a chung. Ngy nay, PHP 3 hoc PHP 4 hin ti chuyn ch mt s lng cc sn phm thng mi nh web server Red Hats Stronghold. Ngy nay, theo c lng th PHP c dng trong khong 5.1 triu trang trn ton th gii v hn c IIS server ca Microsoft ( khong 5.03 triu trang).

4_Ci t PHP trn Windows


Ci t trn cc h thng Windows 98/Me/NT/2000/XP C hai cch chnh ci t PHP cho Windows: Cch thng thng hoc bng cch s dng chng trnh InstallShield installer. 4.1_Windows InstallShield Trnh ci t PHP trnWindows c trn trang web ti www.php.net. N ci t phin bn CGI ca PHP v, cho IIS, PWS, v Xitami, cu hnh web server tt. Ch rng phin bn ny khng ci t bt k phn m rng hoc server api phin bn ca PHP no. Ci t HTTP server m ta chn trn h thng ca ta v m bo rng n hot ng tt. Chy trnh ci t v theo cc hng dn c cung cp bi trnh ci t t ng. C hai loi ci t c h tr, standard, cung cp cc gi tr mc nh cho tt c cc thit lp c th , v advance, yu cu mt s cu hi hon tt qu trnh ci t. Trnh ci t t ng hi t cc thng tin thit lp file php.ini v cu hnh webserver s dng PHP. Mt khi tin trnh ci t c hon thnh, trnh ci t s bo tin cho ta nu ta mun khi ng li h thng , khi ng li server, hoc ch bt u dng PHP. 4.2_Hng dn cch ci t t file nh phn zip trn Windows Phn hng dn ci t ny s gip ta ci t v cu hnh PHP trn cc webserver Windows 9x/Me/NT/2000/XP .Phn hng dn ny c th ph hp vi cc phin bn ca : Apache 1.3.x Apache 2.0.x (bn th nghim) OmniHTTPd 2.0b1 v trn na Oreilly Website Pro Xitami Netscape Enterprise Server, iPlanet PHP 4 cho Windows vi hai cch thc thc hin - mt chng trnh CGI c kh nng thc thi (php.exe), v mt vi module SAPI (v d php4isapi.dll). Dng sau th mi i vi PHP4 v cung cp ci tin mt cch ng k cc thao tc v mt vi chc nng mi.Tuy vy, ch rng cc module SAPI khng thc s c xem nh l sn phm cht lng cao. Trong trng hp c bit, vi module ISAPI, bn s gp phi nhng vn c tnh c bit trm trng trn cc nn c hn . L do cho iu ny l cc module PHP SAPI ang s dng phin bn lung an ton cho m PHP, iu ny mi so vi PHP,v cng cha c kim nghim v kim chng mt cch y c th xem nh l hon ton vng chc v n nh, v s thc l cng c mt s nh li .Mt khc, mt vi ngi a ra bo co cc kt qu rt tt vi cc module,v c rt t cc bo co c vn vi phin bn module Apache. Nu ta chn mt trong cc module SAPI v dng Windows 95, hy chc rng ta phi ti bn cp nht DCOM ti a ch: http://download.microsoft.com/msdownload/dcom/95/x86/en/dcom95.exe" Cho module ISAPI, yu cu mt bn ISAPI 4.0 tng thch Web server ( c kim tra trn IIS 4.0, PWS 4.0 v IIS 5.0). IIS 3.0 khng c h tr; Ta s phi ti v v ci t WinNT4.0 v tu chn IIS 4.0 nu ta mun PHP h tr .

10

Cc bc di y s thao tc trn tt c cc trnh ci t trc khi c cc ch dn r rng vi server. Gii nn file c ti vo mt th mc no . C:\PHP\ l tt nht bt u. Bn cn phi chc rng cc file dlls m php dng c th c tm th y mt cch d dng. Cc dlls r rng s lin quan n loi webserver no ta dng v ni no ta mun chy php nh l mt cgi hoc l mt module server. Php4ts.dll thng xuyn c s dng. Nu ta ang dng mt server module ( v d isapi hoc apache) khi ta cn cc file dlls lin quan t th mc sapi . Nu ta ang s dng cc php dll m rng khi ta s cn chng . chc rng cc dll c th c tm thy, ta c th copy chng vo th mc h thng (winnt/system hoc windows/system) hoc bn phi chc rng chng cha trong cng mt th mc vi th mc c cha php thc thi hoc dll webserver ca ta (v d php.exe, php4apache.dll). Chp file php.ini vo th mc Windows hoc Winnt, winnt4. Bin tp file php.ini : Ta cn phi thay i thit lp 'extension_dir' ti th mc ci t php hoc ni ta t cc file 'php_*.dll', v d c:\php t 'doc_root' ch ti webservers document_root. V d: c:\apache\htdocs hoc c:\webroot Chn cc m rng ta mun c ti khi php,ch mt s m rng c to ra trong cc phin bn ca Windows. Ta c th b cc du ch thch trn cc dng nh 'extension=php_*.dll' trong php.ini ti cc m rng. Ch rng th mc mibs c cung cp vi pht hnh ca Windows cha cc file h tr cho SNMP. Th mc ny s c chuyn ti DRIVE:\usr\mibs (DRIVE l a ni ta ci PHP) 4.3_Ci t cc chc nng m rng trn Windows Sau khi ci t PHP v mt webserver trn windows, ta c l cng mun ci t thm mt s m rng thm cc chc nng. Bng di y m t mt vi chc nng c sn. Ta cng c th thm cc chc nng bng cch b cc du ch thch ng trc cc file php_*.dll trong file php.ini. Ch : Mt vi m rng dll yu cu theo m rng ca PHP , ta nn copy cc file dll t th mc dlls trong gi pht hnh vo th mc windows/system hoc winnt/system32. Nu ta ang c cc file dll ny ri, ta ch ghi chng trong trng hp mt vn g lm vic khng chnh xc. Trc khi ghi chng, tt nht l ta sao lu chng hoc chuyn chng vo mt th mc khc ch phng mt ci g li. Download phin bn sau nht ca Microsoft Data Access Components (MDAC) Cho nn ca bn, c bit vi ngi dng Microsoft Windows 9x/NT4. MDAC c sn ti a ch http://www.microsoft.com/data/ . Cng cn ch rng mt s m rng i hi cc th vin ca cc hng th 3, v d php_oci8.dll cn cc th vin client Oracle 8 c ci t trn h thng ca ta. iu ny khng c cung cp vi PHP. Ch : Cc dlls cho phn m rng ca PHP c bt u bng tin t php_ iu ny trnh s ln xn gia cc m rng ca PHP v cc th vin ca cc hng th 3 cung cp. Ch : Trong PHP 4.0.5 h tr MySQL, ODBC, FTP, Calendar, BCMath, COM, PCRE, Session, WDDX v XML c kt hp vo.

11

5_Cu hnh PHP vi Web server


5.1_Ci t PHP trn Windows vi Apache 1.3.x C hai cch thit lp PHP lm vic c vi Apache 1.3.x trn Windows. Mt l s dng file nh phn CGI (php.exe), cch cn li l dng Apache module .dll. Trong cch sau, ta phi dng Apache server, v bin tp file httpd.conf hoc srm.conf cu hnh Apache lm vic vi PHP. 5.2_Ci t PHP cho Apache nh l mt module Phin bn 4.1 gii thiu module sapi an ton hn, theo nh gi th ta nn cu hnh PHP nh l mt module ca Apache th tt hn. thc hin iu ny, ta phi np file php4apache.dll trong Apache httpd.conf. Ch : Bt k khi no ta np php4apache.dll , php4apache.dll cn c php4ts.dll c tnh n trong phn b PHP 4. php4apache.dll da trn php4ts.dll c np sm nh l Apache ti php4apache.dll. Nu php4ts.dll khng c tm thy, ta s nhn c mt li : Cannot load c:/php/sapi/php4apache.dll into server Vy tht s php4ts.dll c np t u ? php4ts.dll c tm trong th t nh sau : 1) trong th mc ni apache.exe t c bt u 2) trong th mc m php4apache.dll t c np 3) trong th mc %SYSTEMROOT%\System32, %SYSTEMROOT%\system v %SYSTEMROOT% . Ch : %SYSTEMROOT%\System32 ch ng vi Windows NT/2000/XP) 4) trong tong b %PATH% Thng thng ta ch cn copy n vo th mc %SYSTEMROOT%\System32. Sau khi ta thit lp mt cch ng n, ta s cu hnh Apache np module PHP4 ch cn thm vi dng vo file httpd.conf: LoadModule php4_module c:/php/sapi/php4apache.dll AddModule mod_php4.c AddType application/x-httpd-php .php Ch : c bit cc phin bn mi hn ca Apache khng cn nh hng AddModule . Ta phi t file php.ini mt trong hai ni sau: 1) trong th mc ci t Apache (v d. c:\apache\apache) 2) trong th mc %SYSTEMROOT% . 5.3_Ci t PHP cho Apache nh l CGI nh phn Nu bn mun ci t PHP nh l CGI nh phn, trc ht hy c trang ny trc: http://www.cert.org/advisories/CA-1996-11.html v sau nu ta tht s chc chn, cn chn nhng dng sau vo file conf: ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php

12

Action application/x-httpd-php "/php/php.exe" phng nga xa, ta nn thay /php ScriptAlias thnh mt ci g ngu nhin hn, ngn chn nh phn c gi trc tip, nh l mt s bo mt ri ro. Nh rng khi ta hon thnh vic khi ng li server, v d, NET STOP APACHE tip n l NET START APACHE s dng chc nng m ngun c lm sng, thm dng sau vo file apache httpd.conf : AddType application/x-httpd-php-source .phps Ch , iu ny ch lm vic khi ta ci t php l module sapi. Nu bn thch dng c im ny vi cgi nh phn, hy to mt file mi v dng hm show_source("path/to/original_file.php"); 5.4_Gch tri hay gch phi trong ng dn? Trn Win-Apache, tn ng dn c th gm c gch tri v gch phi. V d: LoadModule php4_module C:\php\sapi\php4apache.dll lm vic tt nh: LoadModule php4_module C:/php/sapi/php4apache.dll Ta cng c th trn ln hai kiu gch: LoadModule php4_module C:\php/sapi\php4apache.dll

13

CHNG 2 : NGN NG LP TRNH SCRIPT PHP

I_C PHP C BN 1_S thot khi m HTML


C 4 cch thot khi m HTML v thc hin ch m PHP V d 1: Cc cch thot khi m HTML:
1. <? echo ("this is the simplest, an SGML processing instruction\n"); ?> 2. <?php echo("if you want to serve XHTML or XML documents, do like this\n"); ?> 3. <script language="php"> echo ("some editors (like FrontPage) don't like processing instructions"); </script> 4. <% echo ("You may optionally use ASP-style tags"); %> <%= $variable; # This is a shortcut for "<%echo .." %>

Cch th nht ch c th c thc hin c nu cc tag ngn c lm cho c th. iu ny c th c thc hin bng cch cho php cu hnh short open tag thit lp trong file cu hnh ca PHP, hoc bng cch bin dch PHP vi tu chn enable-short-tags cu hnh. Cch th hai l phng php thng thng c yu thch hn, l n cho php th h tip theo XHTML c th d dng c thc thi vi PHP. Cch th ba l ch ra r PHP l mt ngn ng script. Cch th t th ch c php nu cc tag kiu ASP c php s dng cc tag asp thit lp cu hnh. Ch : H tr cho cc tag ASP c thm vo trong phin bn 3.0.4 Tag ng cho khi s bao gm ng thng mi ko di ngay lp tc nu n c hin th.

2_Ngn cch cc ch dn
Cc ch dn c ngn cch ging nh trong ngn ng C hoc Perl-kt thc mi cu lnh l mt du chm phy. Tag ng (?>) cng ng ti cui ca dng lnh, bi vy sau y l cc cu lnh tng ng:
<?php echo "This is a test"; ?> <?php echo "This is a test" ?>

14

3_Cc li ch thch
PHP h tr cc ki ch gii nh ca C,C++ v shell Unix . V d:
<?php echo "This is a test"; // This is a one-line c++ style comment /* This is a multi line comment yet another line of comment */ echo "This is yet another test"; echo "One Final Test"; # This is shell-style style comment ?>

Cc kiu ch gii one line tht s ch ch gii ti cui dng hoc khi hin ti ca m lnh PHP, c a ln trc.
<h1>This is an <?php # echo "simple";?> example.</h1> <p>The header above will say 'This is an example'.

Bn s phi cn thn khng c t cc ch thch ca C, n c th xy ra khi ghi ch cc khi ln.


<?php /* echo "This is a test"; /* This comment will cause a problem */ */

?>

II_CC KIU D LIU 1_Kiu s nguyn


Cc s nguyn c th c ch ra bng cch s dng bt k cc c php sau:
$a = 1234; # s thp phn $a = -123; # Mt s m $a = 0123; # s h c s 8 (tng ng s 83 h thp phn) $a = 0x12; # s h 16 (tng ng s 18 h thp phn)

Kch c ca mt s nguyn ph thuc vo nn, mc d mt gi tr ln nht khong 2 t cng l mt gi tr thng thng ( l 32 bit c nh tr).

2_Cc s thc du chm ng


Cc s thc du chm ng (doubles) c th c ch ra bng cch dng mt trong cc c php sau: $a = 1.234; $a = 1.2e3; Kch c ca mt s thc du chm ng ph thuc vo nn, mc d mt gi tr ln nht tng ng 1.8e308 vi mc ng n n 10 ch s thp phn cng ch l mt gi tr thng thng( l nh dng 64 bit IEEE). Ch : Cng kh thng thng rng mt s thp phn ging nh 0.1 hoc 0.7 khng th c chuyn i thnh cc bn sao nh phn ca chnh bn thn chng m khng c mt cht sai lch no. iu ny c th dn n nhng kt qu kh hiu. V d: floor((0.1+0.7)*10) thng thng s tr v 7 thay v chnh xc l 8 l v kt qu cui cng c th l mt s: 7.9999999999.....

15

iu ny c lin quan n mt s tht l khng th chnh xc trong mt s cc biu thc phn s trong k hiu thp phn vi mt s hn ch v cc s. V d: 1/3 trong dng thp phn tr thnh 0.333333333... Bi vy khng bao gi c gi tr chnh xc cho cc kt qu l mt s ng v khng bao gi so snh cc s tr ng vi s ngang bng. Nu ta tht s mun s ng n cao hn, ta s dng cc hm ton hc chuyn bit hoc thay v cc hm gmp.

3_Cc chui
Cc chui c th c ch ra bng cch dng mt trong hai tp phn nh. Nu chui c ng li trong du nhy kp(), s lng bn trong chui s c m rng ra (ph thuc vo mt s hn ch ca t loi). Cng nh C v Perl, du x ngc (\) c th c s dng trong vic ch ra cc k t c bit: Th t ngha \n xung dng (LF hoc 0x0A trong ASCII) \r tr v u dng (CR hoc 0x0D trong ASCII) \t Tab ngang (HT hoc 0x09 trong ASCII) \\ x ngc \$ du la \" Nhy kp th t ca cc k t ph hp vi biu thc thng thng l mt k t trong h c \[0-7]{1,3} s 8 th t ca cc k t ph hp vi biu thc thng thng l mt k t trong h c \x[0-9A-Fa-f]{1,2} s 16 Nu ta c gng a ra bt k mt k t no khc , c du x tri v k t s l u ra. Trong PHP3, mt li cnh bo s c pht ra ti mc E_NOTICE khi iu ny xy ra. Trong PHP4, khng mt li cnh bo no c a ra. Cch th hai a ra mt chui s dng du nhy n( ).Khi mt chui c bao bi du nhy n, ch c nhng b qua s c hiu l \\ v \.iu ny nhm mc ch to s thun li, bi vy ta c th dng du nhy n hoc du x ngc trong mt chui trch dn n. S lng s khng c tri rng ra trong mt chui trch dn n. Cch khc nh gii cc chui l s dng c php (<<<). Trc ht s cung cp mt nh danh sau khi thc hin <<<, tip theo l chui, v sau l nh danh ging ban u ng ch thch. nh danh ng phi bt u trong ct u tin ca dng. Cng vy, nh danh c s dng phi theo sau cc quy tc t tn ging nhau nh l cc nhn khc trong PHP:N ch cha cc k t ch v s v cc du gch di, v phi bt u vi k t khng phi l s hoc gch di.

16

<?php $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD; /* More complex example, with variables. */ class foo { var $foo; var $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MyName'; echo <<<EOT My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ?>

Cc chui Strings may be concatenated using the '.' (dot) operator. Note that the '+' (addition) operator will not work for this. Please see String operators for more information. Characters within strings may be accessed by treating the string as a numerically-indexed array of characters, using C-like syntax. See below for examples. V d. Vi v d v chui

17

<?php /* Assigning a string. */ $str = "This is a string"; /* Appending to it. */ $str = $str . " with some more text"; /* Another way to append, includes an escaped newline. */ $str .= " and a newline at the end.\n"; /* This string will end up being '<p>Number: 9</p>' */ $num = 9; $str = "<p>Number: $num</p>"; /* This one will be '<p>Number: $num</p>' */ $num = 9; $str = '<p>Number: $num</p>'; /* Get the first character of a string */ $str = 'This is a test.'; $first = $str[0]; /* Get the last character of a string. */ $str = 'This is still a test.'; $last = $str[strlen($str)-1]; ?>

18

S chuyn i chui
Khi mt chui c xc nh l mt gi tr s, gi tr kt qu v kiu c m t nh sau: Chui s c lng nh l mt s double nu n cha bt k mt trong s cc k t .,e, or E. Trong trng hp khc, n s c lng l mt s nguyn. Gi tr c xc nh bi phn ban u ca chui. Nu chui bt u vi s liu l s, n s l gi tr c dng. Trong trng hp khc, gi tr s l 0 . S liu dng s l mt du hiu tu chn, c theo sau bi mt hoc nhiu con s( tu chn cha mt du chm thp phn), c theo sau bi mt tu chn s m. S m l mt k te hoc E ctheo sau bi mt hoc nhiu s. Khi biu thc u tin l mt chui, dng cu bin s ph thuc vo biu thc th hai.
$foo = 1 + "10.5"; // $foo is double (11.5) $foo = 1 + "-1.3e3"; // $foo is double (-1299) $foo = 1 + "bob-1.3e3"; // $foo is integer (1) $foo = 1 + "bob3"; // $foo is integer (1) $foo = 1 + "10 Small Pigs"; // $foo is integer (11) $foo = 1 + "10 Little Piggies"; // $foo is integer (11) $foo = "10.0 pigs " + 1; // $foo is integer (11)

$foo = "10.0 pigs " + 1.0; // $foo is double (11) c thm thng tin v s chuyn i ny, sem thm trang Unix manual cho strod(3). Nu bn mun kim tra bt k mt v d no trong phn ny, bn c th ct v dn cc v d v chn dng sau xem iu g s xy ra: echo "\$foo==$foo; type is " . gettype ($foo) . "<br>\n";

4_Cc mng
Cc mng tht s va ging cc bng hn tp ( Cc mng c lin kt vi nhau) va ging cc mng ch s( cc vector). 4.1_Mng mt chiu PHP h tr c mng v hng v mng c hng. Trong thc t, khng c g khc bit gia chng. Ta c th to mt mng s dng cc hm list() hoc array(), hoc ta c th thit lp cc gi tr ca cc phn t ca mng mt cch r rng.
$a[0] = "abc"; $a[1] = "def";

$b["foo"] = 13; Ta cng c th to mt mng bng cch n gin l thm cc gi tr vo mng. Khi ta gn mt gi tr vo mt bin mng dng du ngoc n trng, gi tr s c thm vo cui mng.
$a[] = "hello"; // $a[2] == "hello"

$a[] = "world"; // $a[3] == "world" Cc mng c th c sp xp bng cch dng cc hm asort() , arsort() , ksort() , sort() , uasort() , usort() , v uksort(). Ta c th m s cc phn t trong mt mng bng cch dng hm count(). Ta c th duyt qua mt mng bng cch dng cc hm next() v prev(). Mt cch thng thng khc duyt qua cc phn t ca mng l dng hm each(). 4.2_Cc mng a chiu Cc mng nhiu chiu tht s kh n gin. Cho mi chiu ca mng, ta c th thm gi tr khc[kho] vo cui:
$a[1] = $f; $a["foo"] = $f; # one dimensional examples

19

$a[1][0] = $f; $a["foo"][2] = $f; $a[3]["bar"] = $f;

# two dimensional # (you can mix numeric and associative indices) # (you can mix numeric and associative indices)

$a["foo"][4]["bar"][0] = $f; # four dimensional! Trong PHP 3 khng cho php tham chiu cc mng a chiu trc tip trong cc chui. V d sau y s khng cho kt qu mong mun: $a[3]['bar'] = 'Bob'; echo "This won't work: $a[3][bar]"; Trong PHP 3, trn s cho u ra l: This won't work: Array[bar].

Ta c th lm li nh sau:
$a[3]['bar'] = 'Bob';

echo "This will work: " . $a[3][bar]; Tuy nhin, trong PHP 4, tt c cc vn c th c dng mo bng cch ng tham chiu mng( bn trong chui) trong du ngoc nhn:
$a[3]['bar'] = 'Bob'; echo "This will work: {$a[3][bar]}";

Ta c th in y cc mng a chiu bng nhiu cch, nhng mt iu phc tp hiu l bng cch no dng lnh array() cho cc mng kt hp. C 2 onm in y mng mt chiu trong cng mt cch:
# Example 1: $a["color"]= "red"; $a["taste"] = "sweet"; $a["shape"] = "round"; $a["name"] = "apple"; $a[3] = 4; # Example 2: $a = array( "color" => "red", "taste" => "sweet", "shape" => "round", "name" => "apple", 3 => 4

); Hm array() c th c lng vo nhau cho ra cc mng nhiu chiu:


<?php $a = array( "apple" => array( "color" => "red", "taste" => "sweet", "shape" => "round" ), "orange" => array( "color" => "orange", "taste" => "tart", "shape" => "round" ), "banana" => array( "color" => "yellow", "taste" => "paste-y", "shape" => "banana-shaped" ) );

20

echo $a["apple"]["taste"]; ?>

# will output "sweet"

5_Cc i tng
Khi to i tng khi to mt i tng, ta dng cu lnh new a i tng ti mt bin.
<?php class foo { function do_foo() { echo "Doing foo."; } } $bar = new foo; $bar->do_foo();

?> tho lun k hn, tham kho phn cc lp v cc i tng.

6_Kiu linh hot


PHP khng yu cu ( hoc h tr) nh ngha kiu r rng trong vic khai bo bin. mt kiu bin c nh nghi bi ng cnh trong bin c s dng. iu mun ni rng nu ta gn mt gi tr chui cho mt bin var , var s tr thnh mt chui. Nu tip theo ta gn mt gi tr s nguyn cho bin var, n s tr thnh mt s nguyn. Mt v d v vic chuyn i kiu t ng l ton t cng +. Nu bt k mt ton hng l mt s double, khi ton b cc ton hng c gn tr l cc s double, v gi tr tr v l mt s double. Trng hp khc, cc ton hng s c th hin l cc s nguyn, v kt qu cng s l mt s nguyn. Ch rng iu ny khng lm thay i bn thn cc ton hng; iu thay i l bng cch no cc ton hng c n gi.
$foo = "0"; // $foo is string (ASCII 48) $foo++; // $foo is the string "1" (ASCII 49) $foo += 1; // $foo is now an integer (2) $foo = $foo + 1.3; // $foo is now a double (3.3) $foo = 5 + "10 Little Piggies"; // $foo is integer (15)

$foo = 5 + "10 Small Pigs";

// $foo is integer (15)

Nu mun kim tra bt k cc v d no trong mc ny, ta c th ct v dn cc v d v chn cc dng di y ta c th t kim tra. echo "\$foo==$foo; type is " . gettype ($foo) . "<br>\n"; Ch : Cch thc chuyn i t ng sang mng hin cha c xc n r.
$a = 1; // $a is an integer

$a[0] = "f"; // $a becomes an array, with $a[0] holding "f"

21

Trong khi v d trn c l xem nh n cho kt qu r rng trong $A tr thnh mt mng, phn t u tin ca n l f, c th xem nh sau:
$a = "1"; // $a is a string

$a[0] = "f"; // What about string offsets? What happens? T khi PHP h tr ch mc trong cc chu da trn cc khong trng s dng chung c php nh ch s mng, v d trn ch ra mt vn : c th $a tr thnh mt mng vi phn t u tin ca n l f , hoc c l f tr thnh k t u tin ca chui $a ? i vi PHP 3.0.12 v PHP 4.0b3-RC4, kt qu ca vic t ng chuyn i kiu c xem nh khng c xc nh.

p kiu
p kiu trong PHP lm vic ging nh trong C: Tn ca kiu mong i c vit trong cc du ngoc trc bin m n s c p kiu.
$foo = 10; // $foo is an integer

$bar = (double) $foo; // $bar is a double Cc loi p kiu cho php l:


(int), (integer) p sang s nguyn (real), (double), (float) p sang s double (string) p sang kiu chui (array) p sang kiu mng (object) p sang kiu i tng

Ch rng cc tab v cc khong trng cng c php trong cc du ngoc, bi vy cc biu thc di y cho kt qu tng t:
$foo = (int) $bar;

$foo = ( int ) $bar; N c th khng c tht s r rng chnh xc rng iu g s xy ra khi p kiu gia cc kiu no . V d sau s ch ra iu . Khi p kiu t mt bin kiu v hng hoc mt bin kiu chui sang mt mng, bin s tr thnh phn t u tin ca mng:
$var = 'ciao'; $arr = (array) $var;

echo $arr[0]; // outputs 'ciao' Khi p kiu t mt bin v hng hoc mt bin chui sang mt i tng, bin s tr thnh mt thuc tnh ca i tng, tn ca thuc tnh s l v hng
$var = 'ciao'; $obj = (object) $var;

echo $obj->scalar; // outputs 'ciao'

22

III_CC BIN S 1_Khi nim c bn


Bin s trong PHP c m t bi k hiu ca ng la theo sau bi tn ca bin .Tn ca bin c phn bit bi ch hoa v ch thng . Tn ca cc bin theo sau bi cc quy tc ging nh cc nhn khc trong PHP .Mt tn bin ng bt u vi mt k t hoc mt ng gch chn , c theo sau bi bt c s lng k t no ,cc con s hoc cc ng gch chn .Khi din t ng th n s c th hin l: [a-zAZ--\x7f-\xff] [a-zA-Z0-9--\x7f-\xff]* Ch :Do mc ch s dng ca chng ta ,mt k t l a-z,A_Z v cc k t ca b m ASCII t 127 n 255 (ox7f-oxff).
$var = "Bob"; $Var = "Joe"; echo "$var, $Var";

// outputs "Bob, Joe"

$4site = 'not yet'; // invalid; starts with a number $_4site = 'not yet'; // valid; starts with an underscore $tyte = 'mansikka'; // valid; '' is ASCII 228.

Trong PHP3 cc bin lun lun c gn bi cc gi tr . iu c ngha l khi ta gn mt biu thc cho mt bin th ton b gi tr ca biu thc ngun s c sao chp n bin ch . iu ny c ngha l ,v d nh sau khi gn mt gi tr ca mt bin cho bin kia, s thay i ca mt trong s nhng bin ny s khng nh hng n bin kia . bit thm thng tin v s gn tr ny hy xem mc Expressions PHP4 cung cp mt cch khc gn cc gi tr cho cc bin gn bng cch tham chiu . iu ny c ngha l bin mi d dng tham chiu (hay ni cch khc ltr thnh mt bit hiu hoc tr ti) bin gc .Nhng s thay i ny ca bin mi lm nh hng n bin gc v ngc li . iu ny cng c ngha l s khng c mt s sao chp no c ,do vy s gn tr xy ra rt nhanh .Tuy nhin bt c s tng tc no cng c th c lu l ch trong nhng vng lp kn hoc khi gn nhng mng ln cho cc i tng. gn tr bng cch tham chiu ,mt cch n gin hy mt du & trc bin m ang c gn (bin ngun ) V d on m sau y cho xut hin chui My name is Bob hai ln :
<?php $foo = 'Bob'; // Assign the value 'Bob' to $foo $bar = &$foo; // Reference $foo via $bar. $bar = "My name is $bar"; // Alter $bar... echo $foo; // $foo is altered too. echo $bar; ?>

Cn lu mt iu quan trng l ch c tn ca cc bin mi c th c gn bi tham chiu.


<?php

23

$foo = 25; $bar = &$foo; // This is a valid assignment. $bar = &(24 * 7); // Invalid; references an unnamed expression. function test() { return 25; } $bar = &test(); // Invalid. ?>

2_Cc bin c nh ngha trc


PHP cung cp mt s lng ln cc bin s c nh ngha trc cho bt c script no m n chy.Rt nhiu cc bin ny ,tuy nhin , khng th chng minh mt cch y rng chng ph thuc trn nhng server ang chy ,phin bn v thit lp ca mt server v cc nhn t khc .Mt vi nhng bin ny s khng sn sng khi PHP chy trn dng lnh . Bt chp nhng nhn t by , y l danh sch nhng bin c nh ngha trc c sn di mt qu trnh ci t sn c ca PHP 3 chy nh mt mun di trnh ci t sn c ca Apache 1.3.6. c danh sch nhng bin c nh ngha trc ny (v rt nhiu cc thng tin hu ch khc) hy xem (v s dng) Phpinfo(). Ch : Danh sch ny khng c ht c nhng kha cnh m bn mong ch .N ch n gin l mt nguyn tc dn n cc trnh t g ca nhng bin c nh ngha trc m bn c th mong ch truy cp vo script ca ta. 2.1_Cc bin Apache Nhng bin ny c to ra bi Apache webserver.Nu bn ang chy mt webserver no khc s khng c s m bo rng n s c cung cp nhng bin tng t nh th ,n c th b qua mt s hoc cung cp nhng bin khc khng c lit k y . iu ni rng mt s lng ln nhng bin ny c gii thch trong CGI 1.1 ,do bn c th mong i nhng ci ny .
GATEWAY_INTERFACE

Xem li iu g ca CGI ch r server ang s dng, v d CGI/1.1


SERVER_NAME

Tn ca server host di script hin ti ang thc hin. Nu script ang chy trn mt host o, iu ny s l gi tr c nh ngha cho host o .
SERVER_SOFWARE

Chui nhn nh server, c ly ra trong cc phn u phn hi cc yu cu.


SERVER_PROTOCOL

Tn v xem li cc thng tin giao thc thng qua trang web c yu cu, v d HTTP/1.0;
REQUEST_METHOD

Phng thc yu cu no dng truy cp vo trang web; v d: GET,HEAD,P T,PUT.


QUERY_STRING

Th mc ti liu gc di script hin ti ang chy, c nh ngha trong file cu hnh ca server.
HTTP_ACCEPT

Cc ni dung ca Accept-Charset: Phn u ca yu cu hin ti, nu c mt yu cu. V d: 'iso-8859-1,*,utf-8'.

24

HTTP_ACCEPT_ENCODING

Cc ni dung ca Accept-Encoding: Phn u ca yu cu hin ti, nu c n V d: gzip


HTTP_ACCEPT_LANGUAGE

Cc ni dung ca Accept-Languag: Phn u ca yu cu hin ti, nu c n, v d:en


HTTP_CONNECTION

Cc ni dung ca Connection: Phn u t yu cu hin ti, nu c n V d: Keep-Alice.


HTTP_HOST

Cc ni dung ca Host : Phn u ca trang web hin ti, nu c n. HTTP_REFERER i ch ca trang c quy cho b trnh duyt ti trang hin ti. iu ny c thit lp bi b trnh duyt ca ngi s dng, khng pah tt c cc trnh duyt s c thit lp h th ny.
HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT SCRIPT_FILENAME SERVER_ADMIN

SERVER_PORT
SERVER_SIGNATURE PATH_TRANSLATED SCRIPT_NAME REQUEST_URI

Ni dung ca cc bin ny ta c th tra cu trong PHP Manual. 2.2_Cc bin mi trng Cc bin mi trng ny c php vo trong vng t tn ton cc ca PHP t mi trng di PHP ang chy. C rt nhiu th c cung cp bi nn shell ni m PHP ang chy v cc h thng khc nhau cng ang chy trn cc shell khc nhau,mt danh sch cui cng l khng th . Cc bin mi trng khc bao gm cc bin CGI, c t ti m khng ch n vic PHP ang chy nh l mt module hoc b x l CGI. Cc bin PHP Cc bin c to bi chnh bn thn PHP. Cc bin $HTTP_*_VARS ch c sn nu cu hnh track_vars c bt nn. Khi c bt nn, cc bin thng thng c xc lp, ngay c khi chng l cc mng trng. iu ny ngn nga nhng ngi c c mun la cc bin ny. Ch : Ging nh PHP 4.0.3, track_vars lun lun c m, mc cho vic thit lp file cu hnh . Nu nh hng register_globals c thit lp, khi cc bin ny cng s c to sn trong phm vi ton cc ca script, v d, mt vi t cc mng $HTTP_*_VARS. Chc nng ny s c s dng trong trng hp cn thn, v c tt i nu khng cn thit; Trong khi cc bin $HTTP_*_VARS c bo v, cc bin ton cc trng tng ng c th c ghi bi d liu nhp ca ngi s dng, c l v mc ch him c. Nu ta khng th tt register_globals, ta phi thc hin cc bc no l cn thit m bo d liu ta ang s dng l an ton. Argv Mng cc i s c gi ti script. Khi script c chy trn dng lnh, iu ny a ra kiu mu C truy cp vo cc tham s dng lnh. Khi c gi thng qua phng thc GET, iu ny s cha cc chui truy vn. Argc

25

Cha mt s lng cc tham s dng lnh c gi ti script( nu c chy trn dng lnh).
PHP_SELF HTTP_COOKIE_VARS HTTP_GET_VARS HTTP_POST_VARS HTTP_POST_FILES HTTP_ENV_VARS

HTTP_SERVER_VARS Cc bin ny ta c th tham kho thm trong PHP manual.

3_Phm vi ca bin
Phm vi ca bin l ng cnh trong n c nh ngha. Cho hu ht cc phn ton b cc bin PHP ch c mt phm vi n. Phm vi n ny bao gm m rng v cc file c yu cu , v d: $a = 1; include "b.inc"; y l bin $a s c sn trong script included b.inc. Tuy nhin, trong cc hm nh ngha ca ngi s dng mt hm phm vi cc b c gii thiu. Bt k bin no c dng trong mt hm th c mc nh gii hn ti hm phm vi cc b. v d:
$a = 1; /* global scope */ Function Test () { echo $a; /* reference to local scope variable */ } Test ();

Script ny s khng to ra bt k u ra no bi v c php hin th c gn cho mt phin bn bin $a cc b, v n khng c gn tr trong phm vi ny. Ta c th ch rng y l mt iu khc bit nh t ngn ng C trong cc bin ton cc trong C c t ng gn tr ti cc hm nu khng c t ng ho vic ghi bi mt nh ngha cc b. iu ny c th dn n mt vi vn trong mi ngi c th tnh c thay i mt bin ton cc. Trong PHP , cc bin ton cc phi c khai bo tng th bn trong mt hm nu chng chun b c dng trong hm . V d:
$a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;

script trn s cho u ra l 3. Bng cch khai bo bin tng th $a v $b bn trong hm, ton b cc tham chiu n cc bin s c gn cho phin bn cc b. Khng c mt gii hn trong s lng cc bin ton cc m c th c thao tc bi mt hm. Cch th hai truy cp cc bin t phm vi ton cc l bng cch s dng im c bit ca PHP - nh ngha mng $GLOBALS. V d trc c th c vit l nh sau:
$a = 1; $b = 2; Function Sum () {

26

$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum (); echo $b;

Mng $GLOBALS l mt mng lin kt vi tn bin cc b c kho v cc ni dung ca bin c gi tr ca phn t ca mng. Mt c im quan trng khc ca phm vi bin l bin tnh. Mt bin tnh ch tn ti trong mt hm phm vi cc b, nhng n khng lm mt gi tr ca n khi chng trnh thc hin vic thot khi phm vi ny. Ging nh v d di y:
Function Test () { $a = 0; echo $a; $a++; }

Hm ny kh v ch khi mi ln n c gi n thit lp $a gi tr 0 v in 0. $a++ tng ln mt n v cho bin $a mi khi hm c gi. to mt hm m hu dng m khng b mt gi tr hin ti, bin $a c khai bo tnh:
Function Test () { static $a = 0; echo $a; $a++; }

By gi mi khi hm Test()c gi n s in gi tr ca bin $a v tng gi tr ca n. Cc bin tnh cng cung cp mt cch c lin quan n cc hm qui. Mt hm qui l hm m n gi chnh bn thn n. Phi cn thn khi vit mt hm qui bi v n c th to mt li gi qui v hn nh. Ta phi chn chn rng phi c mt cch hp l kt thc li gi qui. V d sau hm s c gi qui m n 10, s dng bin tnh $count bit khi kt thc.
Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; }

4_Cc bin c th thay i c


i khi tht tin li c th c tn cc bin c th thay i c. iu c ngha l, mt tn bin m c th c thit lp v s dng mt cch linh hot. Mt bin thng thng c thit lp vi mt cu lnh nh sau:
$a = "hello";

Mt bin c th thay i ly gi tr ca mt bin v xem nh l tn ca mt bin .Trong v d trn, hello, c th c s dng nh l tn ca mt bin bng cch s dng hai du $, v d:
$$a = "world";

Ti im ny hai bin c nh ngha v c lu tr trong cy c php PHP: $a vi ni dung hello v $hello vi ni dung world. Bi vy, cu lnh sau:
echo "$a ${$a}";

a ra u ra chnh xc tng t nh:


echo "$a $hello";

c hai v d trn u to ra:hello world

27

Trong trng hp s dng cc bin c th thay i vi cc mng, ta phi gii quyt mt vn m h. l, nu ta vit $$a[1] tip theo c php cn bit nu ta c nh dng $a[1] nh l mt bin, hoc nu ta mun $$a nh l bin v tip n [1] ch s t bin . C php gii quyt iu mp m ny l: ${a[1] } trong trng hp th nht v ${$a}[1] cho trng hp th hai.

5_Cc bin t bn ngoi PHP


5.1_Cc form HTML(GET v POST) Khi mt form c trnh ti mt script ca PHP, bt k cc bin t form s r ng c to thnh c sn ti script bi PHP. Nu tu chn cu hnh track_vars c thit lp l on, khi cc bin ny s c xc nh trong cc mng kt hp $HTTP_POST_VARS,$HTTP_GET_VARS v/hoc $HTTP_POST_FILES ph hp vi ngun ca bin trong cu hi. V d: Bin form n gin:
<form action="foo.php" method="post"> Name: <input type="text" name="username"><br> <input type="submit"> </form>

Khi form trn c trnh, gi tr t u vo text s c c hiu lc trong $HTTP_POST_VARS[username]. Nu nh hng cu hnh register_globals c thit lp l on, khi bin cng s c hiu lc nh $username trong phm vi ton cc. PHP cng hiu cc mng trong ng cnh ca cc bin form.Ta c th, v d, nhm cc bin lin quan vi nhau, hoc s dng chc nng ny nhn cc gi tr t nhiu la chn u vo: V d: cc bin form phc tp hn
<form action="array.php" method="post"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness <option value="stuttgarter">Stuttgarter Schwabenbru </select> <input type="submit"> </form>

Trong PHP3, cch dng bin form mng c gii hn ti cc mng mt chiu n. Trong PHP 4, khng c mt gii hn no c p dng. 5.2_Cc tn bin IMAGE SUBMIT Khi trnh mt form, c th s dng mt hnh nh thay v nt submit chun vi mt tag nh sau:
<input type=image src="image.gif" name="sub">

Khi ngi s dng click vo mt ni no trong hnh nh, form km theo s c chuyn ti server vi hai bin thm vo, sub_x v sub_y. Cc bin ny cha cc toa ca ngi dng click vo trong hnh nh. Kinh nghim c th cho ta thy rng cc tn bin tht s c gi ti bi trnh duyt cha mt du chm cu cn hn l mt du gch di chn, nhng PHP t ng chuyn du chm cu thnh du gch di. 5.3_HTTP Cookies PHP h tr HTTP cookies mt cch trong sut nh c nh ngha bi Netscapes Spec. Cookies l mt k xo cho vic lu tr d liu trong cc trnh duyt t xa v theo theo

28

di hoc nhn bit cc ngi s dng tr v. Ta c th thit lp cc cookies bng cch dng hm SetCookies(). Cc cookies l mt phn ca phn u HTTP, bi vy hm SetCookie phi c gi trc bt k u ra c gi ti trnh duyt. y cng l gii hn nh l i vi hm Header(). Bt k cookies no c gi ta t client s ct ng tr v mt bin PHP ging nh l phng thc GET v POST d liu. Nu ta mun gn nhiu gi tr ti mt cookie n, ch cn thm [ ] ti tn cookie. V d:
SetCookie ("MyCookie[]", "Testing", time()+3600);

Ch rng mt cookie s thay th mt cookie trc bi tn ging nh trong trnh duyt ca ta nu ng dn hoc domain l khng khc nhau. Bi vy, i vi ng dng xe cha hng ta c l cn phi gi mt quy tnh tin v cho qua v pha ny. V d:
$Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600);

5.3_Cc bin mi trng PHP to cc bin mi trgn mt cch t ng c sn nh l cc bin PHP thng thng.
echo $HOME; /* Shows the HOME environment variable, if set. */

T khi thng tin c nhp vo thng qua thng qua cc c ch GET,POST v Cookie cng to cc bin PHP mt cch t ng, i khi n cng tt nht cho vic c mt bin t mi trng trong khi chc chn rng ta ang ly phin bn ng. Hm getenv() c th c dng cho trgn hp ny. Ta cng c th thit lp mt bin mi trng vi hm putenv(). 5.4_Cc im trong cc tn bin thay th Thng thng, PHP khng thc hin thay i cc tn ca cc bin khi chng c a qua trong mt script. Tuy nhin, phi ch rng du chm khng phi l mt k t ng trong mt tn bin PHP. Nguyn nhn ta c th xem nh sau:
$varname.ext; /* invalid variable name */

By gi c php phn tch ta thy l mt bin c nh tn l $varname, c theo sau bi mt chui cc thao tc lin tip ging nhau, c theo sau bi chui trng. C th thy rng iu ny khng cho kt qu nh mong i. L do ca iu ny l , iu quan trng cn ch rng PHP s thay th cc du chm trong cc bin mi n bng cc du gch di mt cch t ng. 5.5_Xc nh cc kiu bin Bi v PHP xc nh cc kiu ca cc bin v chuyn i chng (mt cch thng thng) l cn thit, n khng thng xuyn ch ra mt cch rnh mch kiu g ca mt bin a ra ti bt k mt thi im no. PHP bao gm mt vi hm ch ra kiu ca mt bin. Chng l cc hm gettype(),is_long(),is_double(),is_string(),is_array(),is_object().

IV_CC HNG S
PHP nh ngha mt s hng s v cung cp mt c ch cho vic nh ngha nhiu hn ti thi gian chy. Cc hng s cng kh ging cc bin s, cc hng phi c nh ngha bng vic s dng hm define(), v chng khng th c nh ngha li sau ny ti gi tr khc. Cc hng c tin nh ngha ( lun lun c hiu lc) l:
_FILE_

29

Tn ca file script c tch ngay tc th. Nu c dng trong mt file m c bao gm hoc c i hi, khi tn ca file bao gm c cn c vo, v khng cng tn vi tn ca file ngun. _LINE_ S lng dng trong file script hin ti ang c tch ra. Nu c dng trong mt file m c bao gm hoc c yu cu, khi v tr ca fie bao gm c cn c vo.
PHP_VERSION

Chui m t phin bn ca PHP hin ang c dng.


PHP_OS

Tn ca h iu hnh trn PHP ang thc hin.


TRUE

Mt gi tr thc t
FALSE

Mt gi tr sai
E_ERRO

Th hin mt li khc vi mt li c php t m kh nng ly li c l khng th.


E_WARNING

Th hin mt iu kin m PHP bit mt iu g b sai, nhng s khng tip tc c bng bt k cch no, cc s vic ny c th c bt bi chnh bn thn script. Mt vi bin mi trng khc ta c th tra trong PHP Manual nh:
E_PARSE E_NOTICE E_ALL

V d v vic nh ngha cc hng s:


<?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." ?>

S dng _FILE_ v _LINE_


<?php function report_error($file, $line, $message) { echo "An error occured in $file on line $line: $message."; } report_error(__FILE__,__LINE__, "Something went wrong!"); ?>

V_CC BIU THC


Cc biu thc l cc nn tng quan trng nht ca PHP.Trong PHP, hu nh ci g ta vit u l biu thc. Cch n gin v chnh xc nht nh ngha mt biu thc l bt k ci g u c mt gi tr. Nhng kiu cch n gin nht ca cc biu thc l cc hm v cc bin. Khi ta g $a=5, ta ang gn 5 cho $a. C th thy 5c gi tr 5, hoc ni cch khc 5 l mt biu thc vi gi tr ca 5 ( trong trng hp ny, 5 l mt hng s nguyn). Sau s gn ny, ta thy rng gi tr ca $a s l 5, bi vy nu ta vit $b=$a, ta s cho rng kt qa cng tng t nh khi ta vit $b=5. Ni cch khc, $a l mt biu thc vi gi tr ca 5. Nu mi vic u ng, iu ny l chnh xc iu g s xy ra. Cc v d hi phc tp hn mt cht ca cc biu thc l cc hm. V d, ta hy xem v d sau:
function foo () { return 5;

30

Cho rng bn bit qua v khi nim ca cc hm, bn s cho rng khi g $c=foo() th cng ging nh vit $c=5, v bn cng ng. Cc hm l cc biu thc vi gi tr l gi tr c tr v ca chng. Khi foo() tr v gi tr 5, gi tr ca biu thc foo() l 5. Thng thng khng ch tr v mt gi tr tnh ngoi ra cn tnh ton mt th g . D nhin l cc gi tr trong PHP khng phi l cc s nguyn. PHP h tr 3 kiu gi tr v hng: cc gi tr s nguyn,cc gi tr con tr ng v cc gi tr chui (Cc gi tr v hng l cc gi tr m ta khng th b thnh cc cc thnh phn nh hn, khng nh cc mng). PHP cng h tr hai kiu phc: cc mng v cc i tng. Mt trong cc kiu gi tr ny c th c gn vo trong cc bin hoc c tr v t cc hm. Trc , ngi s dng ca PHP/FI 2 s khng cm nhn c bt k thay i no. Tuy vy, PHP t c cc biu hin nhiu hn trong cng mt cch m nhiu ngn ng khc lm. PHP l mt ngn ng hng biu thc, trong s cm nhn rng mi th u l biu thc. Hy n v d trc y, $a=5. Tht d dng thy rng c hai gi tr c gi ln t y, gi tr ca hng s nguyn 5, v gi tr ca $a m ang c cp nht ti 5. Nhng s tht l ch c mt gi tr thm vo c gi ra y, v l gi tr ca s gn tr ca chnh bn thn n . S gn tr kiu ny c lng ti gi tr c gn, trong trng hp ny l 5. Trong thc tin, n c ngha l $a=5, khng ch n g n thc hin, l mt biu thc vi gi tr 5. Do , vit mt th g nh $b=($a=5) cng ging nh vit $a=5;$b=5;) (mt du hai chm nh du s kt thc ca mt cu lnh). Ta cng c th thc hin vic gn tr nh sau:$b=$a=5. Mt v d tt khc ca s hng biu thc l cc ton t tng v gim. Ngi s dng ca PHP/FI 2 v rt nhiu ngn ng khc c th quen vi k hiu bin++ v bin--. y l cc ton t tng v gim. Trong PHP/FI 2, c php $a++ khng c gi tr ( khng phi l mt biu thc), v v vy ta khng th gn n v s dng n trong bt k trng hp no.PHP nng cao cc kh nng tng v gim bng cch to cc biu thc ny, tng t nh C. Trong PHP, ging nh C, c hai dng tng tin t v tng hu t. C hai cch ny v bn cht lm tng gi tr ca bin v nh hng ti cc bin l nh nhau. S khc nhau l vi gi tr cu biu thc tng. Dng tin t, c vit ++$bin, xc nh gi tr ca bin c tng (PHP tng bin trc khi c gi tr ca n). Dng hu t, c vit nh bin++ xc nh ti gi tr thng thng ca $bin, trc khi n c tng( PHP tng bin sau khi c gi tr ca n). Mt dng thng dng nht ca cc bin thc l cc biu thc so snh. Cc biu thc ny xc nh ti 0 hoc 1,ngha l tng ng vi FALSE hoc TRUE. PHP h tr > (ln hn), >= (ln hn hoc bng), = (bng), != (khc), < (nh hn), <= (nh hn hoc bng). Cc biu thc ny c s dng mt cch thng dng nht bn cnh s thc hin cc iu kin, nh l cu trc iu kin if. V d cui cng ca cc biu thc chng ta s cp n y c kt hp vi cc biu thc gn ton t. Ta tht s bit rng nu ta mun tng $a ln 1, ta c th n gin vit $a++ hoc ++$a. Nhng nu ta mun cng thm hn mt ln cho n, v d nh 3 ? Ta c th vit $a++ thnh nhiu ln nhng iu ny l khng hp l v t ra bt tin. Cch thng dng nht l vit $a=$a+3. $a+3 xc nh ti gi tr ca $a cng 3, v c gn tr li trong bin $a. Trong PHP, cng nh trong mt s ngn ng ging C, ta c th vit tng t nh vy trong mt cch ngn hn, nhng li sng sa hn v d hiu hn. Cng thm 3 vo gi tr hin ti ca $a c th c vit $a+=3. iu ny thc s chnh xc l ly gi tr ca $a, cng thm 3, v gn tr li $a.Ngoi vic cch vit ny va ngn va d hiu, n cn c thc hin nhanh hn. Gi tr ca $a+=3, ging nh gi tr ca mt php gn thng thng, l gi tr c gn. Ch rng y khng phi l 3, m l gi tr kt hp ca $a cng 3(y l gi tr c gn vo trong bin $a). C hn mt biu thc c th xem l k quc nu ta khng thy iu ny trong cc ngng ng khc, ton t 3 yu t: $first ? $second : $third

31

Nu gi tr ca biu thc con u tin l ng( khc khng), khi biu thc th hai s c nh gi cho n, v l kt qa ca biu thc iu kin. Trong trng hp khc, biu thc nh th 3 s c nh gi, v o cng l gi tr ca n. V d sau s gip ta hiu cc biu thc tng trc v tng sau trong mt trng hp kh thng thng:
function double($i) { return $i*2; } $b = $a = 5; /* assign the value five into the variable $a and $b */ $c = $a++; /* post-increment, assign original value of $a (5) to $c */ $e = $d = ++$b; /* pre-increment, assign the incremented value of $b (6) to $d and $e */ /* at this point, both $d and $e are equal to 6 */ $f = double($d++); /* assign twice the value of $d before the increment, 2*6 = 12 to $f */ $g = double(++$e); /* assign twice the value of $e after the increment, 2*7 = 14 to $g */ $h = $g += 10; /* first, $g is incremented by 10 and ends with the value of 24. the value of the assignment (24) is then assigned into $h, and $h ends with the value of 24 as well. */

Trong phn u ca chng chng ta ni rng chng ta s tho lun v cc loi cu lnh khc nhau, v nh ha, cc biu thc c th l cc cu lnh. Tuy vy, khng phi mi biu thc l mt cu lnh. Trong trng hp ny, mt cu lnh c dng l mt biu thc, iu ny c ngha l, mt biu thc c theo sau bi du chm phy. Trong $b=$a=5;, $a =5 l mt biu thc ng, nhng chnh bn thn n khng phi l mt cu lnh. Tuy nhin $b=$a=5; l mt cu lnh ng. iu cui cng ng ni n l gi tr thc s ca cc biu thc. Trong rt nhiu s kin, ch yu trong vic thc hin cc iu kin v cc vng lp, ta khng thch th g trong gi tr c th ca biu thc, nhng ch ch n vic gi tr ca chng l TRUE hay FALSE ( PHP khng cung cp mt kiu logic). Gi tr thc s ca cc biu thc trong PHP c tnh vi cch kh ging vi cch trong Perl. Bt k gi tr khc khng u l TRUE, cc gi tr bng khng l FALSE. Hy thn trng rng cc gi tr m l khc khng v v vy n c gi tr TRUE. Chui trng v chui 0 l FALSE; Cc chui cn li khc l TRUE. Vi cc gi tr khng v hng ( cc mng v cc i tng) - Nu gi tr khng cha cc phn t n c xem nh FALSE, cc trng hp khc l TRUE. PHP cung cp mt s b sung y v mnh m ca cc biu thc, v iu ny c chng minh trong ti liu PHP Manual ny.

32

V_CC TON T 1_Cc ton t s hc


V d $a + $b $a - $b $a * $b $a / $b $a % $b Tn Php cng Php tr Php nhn Php chia Php chia d Kt qu Tng $a v $b. Hiu $a v $b. Tch s $a v $b. Thng s $a v $b. S d ca $a chia cho $b.

Ton t chia ("/") tr li mt gi tr s nguyn (Kt qu ca mt php chia s nguyn) nu hai ton t l cc s nguyn( hoc cc chui c chuyn i thnh cc s nguyn) v thng s l mt s nguyn. Nu mt ton hng l mt gi tr s thc ng, hoc cc kt qu php ton khng phi l mt s nguyn, gi tr s thc ng c tr v.

2_Cc ton t gn
Ton t gn c bn l =. ngh trc tin ca ta c th cho rng iu ny l bng vi. Khng phi nh vy. N tht s l ton t pha bn tri ly gi tr ca biu thc bn phi. Gi tr ca mt biu thc gn l mt gi tr c gn. iu c ngha l, gi tr ca $a=3 l 3. iu ny cho php ta thc hin mt s vic phc tp: $a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4 Trong php cng vi ton t gn, c s kt hp cc ton t cho tt c cc s hc nh phn v cc ton t chui cho php ta dng mt gi tr trong mt biu thc v tip theo thit lp gi tr ca n ti kt qu ca biu thc . V d:
$a = 3; $a += 5; // sets $a to 8, as if we had said: $a = $a + 5; $b = "Hello ";

$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!"; Ch rng php gn sao chp bin thng thng ti mt bin mi( Php gn bi gi tr), bi vy thay i ti mt bin s khng nh hng n cc bin cn li. iu ny c th cng thch hp nu ta cn sao chp mt th g ging nh mt mng ln trong mt vng lp v hn. PHP 4 h tr php gn bng tham chiu, s dng $bin = &$ bin khc; Nhng c php ny khng cho php trong PHP3.Ph p gn bng tham chiu c ngha cc bin cng ch vo mt gi tr ging nhau, v khng c mt s sao chp t bt k u.

33

3_Cc ton t mc bit


Example Name $a & $b And $a | $b Or $a ^ $b ~ $a $a << $b $a >> $b Result Bits that are set in both $a and $b are set. Cc bit c lp trong trng hp $a hoc $b c lp. Cc bit c lp khi $a hoc $b c lp nhng c hai khng Xor ng thi lp. Not Cc bit c lp nu $a khng c lp v ngc li. Dch cc bit ca $a sang tri $b v tr(mi bc dch tng ng Shift left vic nhn vi 2). Shift Dch cc bit ca $a sang phi $b v tr (mi bc dch tng right ng vi vic chia cho 2).

4_Cc ton t so snh


Cc ton t so snh, nh tn ca chng ng , cho php ta so snh hai gi tr V d $a == $b Kt qu ng nu $a bng vi $b. ng nu $a bng vi $b , nhng chng khng cng kiu ( Ch c $a === $b ng nht PHP4). $a != $b Khc ng nu $a khc $b $a !== $b Khng ng nht ng nu $a khc $b hoc chng khng cng kiu $a < $b Nh hn ng nu $a hon ton nh hn $b $a > $b Ln hn ng nu $a hon ton ln hn $b $a <= $b $a >= $b Nh hn bng Ln hn bng hoc hoc ng nu $a nh hn hoc bng $b ng nu $a ln hn hoc bng $b Tn Bng

Mt ton t iu kin khc l ton t ? n thao tc ging nh trong C v rt nhiu ngn ng khc. (expr1) ? (expr2) : (expr3); Biu thc ny c lng vi expr2 nu expr1 c lng l ng, v expr3 nu expr1 c lng l sai.

34

5_Cc ton t iu khin li


PHP h tr mt ton t iu khin li: du at ( @). Khi ch n mt biu thc trong PHP, bt k thng bo li no m c th c to ra bi biu thc s b t chi. Nu chc nng track_errors c kch hot, bt k mt li no c pht sinh bi biu thc s c ghi li trong mt bin cc b $php_errormsg. Bin ny s c ghi sau mi ln b li, bi vy hy kim tra mt cch sm nu ta mun s dng n.
<?php /* Intentional SQL error (extra quote): */ $res = @mysql_query ("select name, code from 'namelist") or die ("Query failed: error was '$php_errormsg'");

?> Cnh bo Tin t ton t iu khin li @hin ti s vn khng c th bo co li cho cc li nguy cp lm ngng s thc thi script. Ni cch khc, iu ny c ngha l nu ta dng @ tiu dit cc li t mt hm no v n cng khng sn c hoc b v hiu ho, script s b cht m khng c bt k mt hin th l ti sao.

6_Cc ton t thc thi


PHP cung cp mt ton t thc thi: Hai du nhy kp pha di k t ~ (``). Ch rng khng phi l mt du nhy n !. PHP s c gng thc hin cc ni dung ca hai du nhy nh l mt lnh shell; Kt qa u ra s c tr v( n khng ch n gin l a ra mt kt qu cho u ra, n c th c gn ti mt bin).
$output = `ls -al`;

echo "<pre>$output</pre>"; Ch : Ton t nhy n s mt tc dng khi safe_mode c thit lp.

7_Cc ton t tng / gim


PHP cung cp kiu cch ca ngn ng C l cc ton t pha trc v pha sau tng hay gim gi tr ca mt bin. Cc ton t tng/gim V d ++$a $a++ --$a $a-Tn Tng trc Tng sau Gim trc Gim sau Kt qu Tng $a ln 1, tip n tr li gi tr cho $a. Tr gi tr cho $a, sau mi tng $a ln 1 . Gim $a mt n v, sau mi tr li gi tr. Tr gi tr cho $a, sau mi gim gi tr ca $a.

35

Sau y l mt script n gin:


<?php echo "<h3>Postincrement</h3>"; $a = 5; echo "Should be 5: " . $a++ . "<br>\n"; echo "Should be 6: " . $a . "<br>\n"; echo "<h3>Preincrement</h3>"; $a = 5; echo "Should be 6: " . ++$a . "<br>\n"; echo "Should be 6: " . $a . "<br>\n"; echo "<h3>Postdecrement</h3>"; $a = 5; echo "Should be 5: " . $a-- . "<br>\n"; echo "Should be 4: " . $a . "<br>\n"; echo "<h3>Predecrement</h3>"; $a = 5; echo "Should be 4: " . --$a . "<br>\n"; echo "Should be 4: " . $a . "<br>\n"; ?>

8_Cc ton t logic


Cc ton t logic: V d $a and $b $a or $b $a xor $b ! $a $a && $b $a || $b Tn And Or Xor Not And Or Kt qu ng nu c $a v $b u ng. ng nu $a hoc $b ng. ng nu ch c $a hoc ch c $b ng. ng nu $a sai. ng nu c $a v $b u ng. ng nu $a hoc $b ng.

9_ Quyn u tin ca cc ton t


Quyn u tin ca mt ton t ch ra bng cch no rng buc hai biu thc vi nhau. V d, trong biu thc 1+5*3, cu tr li l 16 v khng phi l 18 bi v ton t nhn ( * ) c mt quyn u tin cao hn i vi ton t cng ( + ). Cc du ngoc n c th c thc hin ch ra quyn u tin nu thy cn thit. V d (1+5)*3 s cho gi tr 18. Bng sau ch ra quyn u tin ca cc ton t vi cc ton t c quyn u tin thp nht c lit k trc.

36

Quyn u tin cc ton t Kt hp Tri Tri Tri Tri Phi Tri Tri Tri Tri Tri Tri Tri Khng kt hp Khng kt hp Tri Tri Tri Phi Phi Khng kt hp Cc ton t , or xor and print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === !== < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ new

10_Cc ton t chui


C hai ton t chui. Ton t u tin l ton t ghp ( . ), n tr v s ghp cc i s ca bn tri v bn phi ca n. Ton t th hai l ton t ghp gn ( .= ), cho php ni thm i s pha bn phi vo i s pha bn tri ca n.
$a = "Hello "; $b = $a . "World!"; // now $b contains "Hello World!" $a = "Hello ";

$a .= "World!";

// now $a contains "Hello World!"

37

VII_CC CU TRC IU KHIN 1_Cu trc If


Cu trc if l mt trong cc c im quan trng nht trong rt nhiu ngn ng, PHP cng c cu trc ny. N cho php thc thi c iu kin cc on m. PHP cao mt cu trc if tng t nh C.
if (expr)

statement Nh cp trong phn cc biu thc , expr c nh gi ti chnh gi tr thc s ca n. Nu expr nh gi l TRUE, PHP s thc hin cu lnh, v nu n nh gi l FALSE - PHP s b qua n. V d sau s hin th a is big than b nu $a ln hn $b:
if ($a > $b)

print "a is bigger than b"; Thng thng ta mun c nhiu hn mt cu lnh c thc hin mt cch c iu kin. D nhin, khng cn bao bc mi cu lnh vi mt mnh if. Thay vo , ta c th nhm mt vi cu lnh vo trong mt nhm cu lnh . V d, on m sau s hin th a is bigger than b nu $a ln hn $b, v s gn gi tr ca bin $a sang cho bin $b:
if ($a > $b) { print "a is bigger than b"; $b = $a;

} Cc cu lnh if c th c lng vo nhau s cung cp cho ta mt cch ton din v linh hot cho vic thc hin iu kin nhiu phn khc nhau trong chng trnh ca ta.

2_Cu trc Else


Thng thng ta mun thc hn mt cu lnh nu gp phi mt iu kin chc chn no ,v mt cu lnh khc nu iu kin ny l sai. iu ny cn dng n else . else m rng mt cu lnh if thc hin mt cu lnh trong trng hp biu thc trong cu lnh if c gi tr l FALSE. V d, on m sau s hin th a is bigger than b nu $a ln hn $b v a is not bigger than b trong trng hp ngc li.
if ($a > $b) { print "a is bigger than b"; } else { print "a is NOT bigger than b";

38

Cu lnh else ch c thc hin trong trng hp biu thc trong cu lnh if nhn gi tr FALSE.

3_Cu trc Elseif


Elseif, nh tn ca n gi , l mt s kt ni ca if v else. Ging nh else, n m rng mt cu lnh if thc hin mt cu lnh khc trong trng hp biu thc if thng thng nhn gi tr FALSE. Tuy nhin, khng ging nh else, n s ch thc hin biu thc loi tr ln nhau nu biu thc iu kin elseif nhn gi tr TRUE. V d, on m sau y s hin th a is bigger than b, a equal to b hoc a is smaller than b:
if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b";

} C th c vi elseif trong cng mt cu lnh if. Biu thc elseif u tin ( nu c) nhn gi tr TRUE s c thc hin. Trong PHP, ta cng c th vit else if ( trong hai t) v cng cho gi tr tng ng nh khi ta vit gp trong mt t elseif. ngha c php ch khc nhau mt cht ( nu ta quen vi C, iu ny l tng t) nhng dng trn cng c cng gi tr chnh xc. Cu lnh elseif ch c thc hin nu biu thc if trc v bt k cc biu thc elseif nhn gi tr FALSE, v biu thc elseif hin ti nhn gi tr TRUE.

4_C php la chn cho cc cu trc iu khin


PHP cng cung cp mt c php la chn cho mt vi cu trc iu khin ca n; c tn l , if, while,for, foreach, v switch. Trong mi trng hp, khun dng c bn ca c php la chn l thay i vic m ngoc cho mt du hai chm (:) v vic ng ngoc cho endif;, endwhile;,endfor;, endeachfor;, hoc endswitch .
<?php if ($a == 5): ?> A is equal to 5

<?php endif; ?> Trong v d trn, khi HTML A=5 c t trong mt cu lnh if c vit trong c php la chn. Khi HTML s ch c hin th nu $a =5. C php la chn c p dng cho c else v elseif. Sau y l mt cu trc if vi elseif v else trong nh dng la chn:
if ($a == 5): print "a equals 5"; print "..."; elseif ($a == 6): print "a equals 6"; print "!!!";

39

else: print "a is neither 5 nor 6";

endif;

5_Cu trc while


Cc vng lp while l mt dng lp n gin nht trong PHP. Chng ging ht trong C. Dng c bn ca cu lnh while l: while (expr) statement ngha ca cu lnh while tht n gin. N ni cho PHP thc hin cc cu lnh lp i lp li lng nhau, khi biu thc while nhn gi tr TRUE. Gi tr ca ca biu thc c kim tra mi ln ti u vng lp, bi vy nu gi tr ny thay i trong qu trnh thc hin cc cu lnh, qu trnh thc hin s khng dng cho n khi kt thc s lp li ( mi ln PHP chy cc cu lnh trong vng lp l mt s lp li). Thnh thong nu biu thc while nhn gi tr FALSE t khi bt u, cc cu lnh bn trong s khng c thc hin. Ging nh cu lnh if, ta c th nhm nhiu cu lnh trong cng mt vng lp while bng cch bao nhm cc cu lnh trong cc du mc, hoc bng c php la chn: while (expr): statement ... endwhile; Cc v d sau l y ht nhau, v u in cc s t 1 n 10:
/* example 1 */ $i = 1; while ($i <= 10) { print $i++; /* the printed value would be $i before the increment (post-increment) */ } /* example 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile;

6_do .. while
Cc vng lp do .. while cng rt ging vi cc vng lp while, tr vic kim tra iu kin ng ti lc kt thc mi vng lp thay v ngay ban u. S khc bit chnh vi cc vng lp while thng thng l s lp li u tin ca mt vng lp do .. while c bo m thc hin (iu kin ng ch c ch ra ti cui vng lp), trong khi n c th s khng c thc hin trong vng lp while nu ngay t u iu kin kim tra l FALSE. Ch c mt c php cho cc vng lp do .. while:
$i = 0; do {

40

print $i; } while ($i>0);

Vng lp trn s ch chy mt ln chnh xc, sau ln lp u tin, khi biu thc iu kn c kim tra, n xc nh gi tr FALSE ($i khng ln hn 0) v s thc hin vng lp c kt thc. Nhng ngi dng C cao cp c th quen vi mt cch s dng khc ca vng lp do .. while, cho php dng s thc hn ti gia khi m lnh, bng cch gi gn chng vi do .. while(0), v s dng c php break. on m di y m t iu ny:
do { if ($i < 5) { print "i is not big enough"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i is ok"; ...process i... } while(0);

ng lo lng nu ta khng hiu , ta c th vit m cc script v c cc script mnh m m khng dng c im ny.

7_Cu trc For


Cc vng lp for l cc vng lp phc tp nht trong PHP. Chng cng ging vi cc vng lp for trong C. C php ca mt vng lp for l:
for (expr1; expr2; expr3) statement

Biu thc th nht (expr1 ) c nh gi (c thc hn) mt ln v iu kin khi bt u vng lp. Trong lc bt u ca mi ln lp, expr2 c nh gi. Nu n nh gi l TRUE, vng lp c tip tc v cc cu lnh bn trong vng lp s c thc hin. Nu n nh gi l FALSE, s thc thi ca vng lp s kt thc. Ti cui mi ln lp, expr3 c nh gi (c thc hin). Mi mt biu thc c th trng rng. expr2 ang trng c ngha l vng lp s c chy v hn nh( PHP hon ton xem n l TRUE, ging nh C). iu ny c th khng v dng nh ta ngh, trc y thng thng ta mun kt thc vng lp bng cch dng cu lnh iu kin break thay v s dng biu thc ng n for Hy xem xt cc v d sau. Tt c chng u hin th cc s t 1 n 10:
/* example 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* example 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; }

41

print $i; } /* example 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* example 4 */ for ($i = 1; $i <= 10; print $i, $i++) ;

D nhin, v d u tin xut hin mt cch tt p nht, nhng ta c th thy rng s dng cc biu thc trng trong cc vng lp for l d s dng trong nhiu trng hp. PHP cng cung cp c php hai chm an xen nhau cho cc vng lp for:
for (expr1; expr2; expr3): statement; ...; endfor;

Cc ngn ng khc c mt cu lnh foreach duyt mt danh sch hoc mt m ln xn. PHP3 khng c cu trc ny, PHP4 th c. Trong PHP3, ta c th ni while vi cc hm list() v each() ly ra kt qa tng t.

8_Cu trc Foreach


PHP4 ( khng phi PHP3) bao gm mt cu trc foreach, kh ging vi perl v mt s ngn ng khc. Cu trc ny n gin to ra mt cch d dng duyt qua cc mng. C hai c php; c php th hai l th yu nhng l s m rng mt cch hu ch ca cu trc th nht:
foreach(array_expression as $value) statement foreach(array_expression as $key => $value) statement

Dng u tin ca cc vng lp trn mng c a ra bi array_expression. Trn mi vng lp, gi tr ca cc phn t hin ti c gn cho $value v con tr mng cc b c tng ln mt( bi vy trong vng lp sau, ta s thy phn t tip theo). Dng th hai cng thc hin vic tng t, tr kho ca phn t hin ti s c gn ti bin $key trn mi vng lp. Ch : Khi foreach ln u tin bt u thc hin, con tr cc b t ng c iu chnh li ti phn t u tin ca mng . iu ny c ngha l ta khng cn gi hm reset() trc mi vng lp foreach. Ch : ch rng foreach thao tc trn mt bn sao chp ca mng c ch ra, khng phi l chnh mng . Do vy, con tr mng khng b thay i ging nh mi cu trc. Ta phi ch rng cc v d sau c cng mt chc nng nh nhau:
reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br>\n"; } foreach ($arr as $value) { echo "Value: $value<br>\n"; }

42

Sau y cng c chc nng tng t:


reset ($arr); while (list($key, $value) = each ($arr)) { echo "Key: $key; Value: $value<br>\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br>\n"; }

Thm mt vi v d m t cch s dng:


/* foreach example 1: value only */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Current value of \$a: $v.\n"; } /* foreach example 2: value (with key printed for illustration) */ $a = array (1, 2, 3, 17); $i = 0; /* for illustrative purposes only */ foreach($a as $v) { print "\$a[$i] => $v.\n"; } /* foreach example 3: key and value */ $a = array ( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; }

9_Cu trc break


break kt thc s thc hin ca cc cu trc for, while hoc switch hin ti. break chp nhn mt s lng i s tu chn ch ra rng bng cch no rt nhiu cc cu trc khp kn c t trong b b gy
$arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); while (list (, $val) = each ($arr)) { if ($val == 'stop') { break; /* You could also write 'break 1;' here. */ } echo "$val<br>\n"; }

43

/* Using the optional argument. */ $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br>\n"; break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting<br>\n"; break 2; /* Exit the switch and the while. */ default: break; } }

10_Cu trc continue


continue c dng trong cc cu trc vng lp b qua phn cui ca vng lp hin ti v tip tc thc hin ti phn u ca vng lp tip theo. continue chp nhn mt s lng cc i s tu chn m ch cho bit c bao nhiu mc ca cc vng lp khp kn s c b qua cho n cui.
while (list ($key, $value) = each ($arr)) { if (!($key % 2)) { // skip odd members continue; } do_something_odd ($value); } $i = 0; while ($i++ < 5) { echo "Outer<br>\n"; while (1) { echo " Middle<br>\n"; while (1) { echo " Inner<br>\n"; continue 3; } echo "This never gets output.<br>\n"; } echo "Neither does this.<br>\n"; }

11_Cu trc switch


Cu lnh switch cng ging tng t nh chui cc cu lnh if trong cng mt biu thc. Trong rt nhiu dp, ta cn phi so snh cng bin ( hoc biu thc) vi rt nhiu gi tr khc nhau, v thc hin mt phn khc nhau ca m ngun da trn gi tr no m n bng. iu ny l chnh xc iu g cu lnh switch dng cho. Hai v d di y l hai cch khc nhau vit cng mt th, mt s dng mt chui cc cu lnh if, v mt dng cu lnh switch:
if ($i == 0) { print "i equals 0"; } if ($i == 1) {

44

print "i equals 1"; } if ($i == 2) { print "i equals 2"; } switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; }

iu quan trng hiu bng cch no cu lnh switch c thc hin theo trnh t trnh li. Cu lnh switch thc hin tng dng mt ( thc ra l tng cu lnh mt). Trong lc bt u, khng on m no c thc hin.Ch khi mt cu lnh case c tm thy vi gi tr thch hp vi gi tr ca biu thc switch lm cho PHP bt u thc hn cc cu lnh. PHP tip tc thc hin cc cu lnh cho n khi kt thc khi cu lnh switch, hoc ln u tin n gp cu lnh break. Nu ta khng vit mt cu lnh break ti cui danh sch cc cu lnh case, PHP s tip tc thc hin cc cu lnh ca case di . V d:
switch ($i) { case 0: print "i equals 0"; case 1: print "i equals 1"; case 2: print "i equals 2"; }

y, nu $i bng 0, PHP s thc hin tt c cc cu lnh print. Nu $i bng 1, PHP s thc hin 2 cu lnh print cui, v nu $i ch bng 2, khi ch c i equals 2 s c hin th. Bi vy, iu quan trng l khng c qun cc cu lnh break. Trong mt cu lnh switch, iu kin ch c xc nh mt ln v kt qu c so snh cho mi cu lnh case. Trong mt cu lnh elseif, iu kin c xc nh li. Nu iu kin ca ta phc tp hn mt iu kin so snh n gin v/hoc trong mt vng lp kn, mt switch c th nhanh hn. Danh sch cu lnh cho mt case cng c th c b trng, n n gin cho qua iu khin trong danh sch cu lnh cho case tip theo.
switch ($i) { case 0: case 1: case 2: print "i is less than 3 but not negative"; break; case 3: print "i is 3"; }

Mt case c bit l mt case mc nh. Case ny thch hp vi bt k trng hp no m khng ph hp vi cc case khc, v s l cu lnh case cui cng, v d:

45

switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; default: print "i is not equal to 0, 1 or 2"; }

Biu thc case c th l bt k biu thc no m xc nh ti mt kiu n gin, l, kiu s nguyn hoc cc s thc ng v cc chui. Cc mng hoc cc i tng khng th c dng y nu chng khng c tham chiu n mt kiu n gin. C php la chn cho cc cu trc iu khin c h tr vi cc switch.
switch ($i): case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; default: print "i is not equal to 0, 1 or 2"; endswitch;

12_require()
Cu lnh require() thay th chnh bn thn n vi file c ch nh, kh ging vi C trong cc cng vic tin nh ngha #include. Nu URL fopen wrappers c thit lp trong PHP ( Chng trong cu hnh mc nh), ta c th ch ra file c require() dng mt URL thay v mt ng dn cc b. iu quan trng cn ch v vic bng cch no iu ny thc hin l khi mt file c include() hoc require(), b qua ch c php PHP v chuyn sang ch HTML ti lc bt u ca file ch, v bt u li ch PHP mt ln na khi kt thc. Nguyn nhn do chnh l do ny l, bt k m no bn trong file ngun m s c thc hin nh m PHP phi c ng kn trong cc tag bt u v kt thc chnh xc ca PHP. Require() khng phi l mt hm thc s trong PHP; ng hn, n l mt cu trc ngn ng. N l mt ch ca mt s nguyn tc khc nhau hn l cc hm. Trong trng hp c bit, require() khng a ra bt k cu trc iu khin cha no. Trong trng hp khc, n khng tr v bt k mt gi tr no;c gng c mt gi tr tr v t mt li gi require()a n mt c php li. Khng ging include(), require() s lun lun c trong file i tng, ngay c nu nu dng n khng bao gi thc hin. Nu ta mun bao gm mt file c iu kin, s dng include(). Cu lnh iu kin s khng nh hng n require(). Tuy nhin, nu dng trn require() xy ra khng c thc hin, cng s khng c m no trong file i tng s c thc hin.

46

Thng thng, cc cu trc lp khng nh hng n tnh trng ca require(). Mc d m c cha trong file i tng vn cn l thuc vo vng lp, bn thn require() ch xy ra mt ln. iu ny c ngha l ta khng th t mt cu lnh require() bn trong mt cu trc lp v mong ch n bao gm cc ni dung ca mt file khc trong mi vng lp. lm iu , s dng mt cu lnh include()
require ('header.inc');

Khi mt file c require(), m n cha tha k phm vi bin ca dng trn require(0 xy ra. Bt k cc bin c sn ti dng trong file gi s c hiu lc trong file c gi. Nu require() xy ra bn trong mt hm trong mt file gi, khi tt c m cha trong file c gi s c chy mc d n c nh ngha bn trong hm . Ngoi cc cu trc hay dng nh trn, ta cn c mt s cu trc khc c th tham khao thm trong PHP manual nh: include(), require_once() , include_once().

VIII_CC HM 1_Cc hm c nh ngha bi ngi s dng


Mt hm c th c nh ngha bng cch s dng c php nh sau:
function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Example function.\n"; return $retval; }

Bt k m PHP ng no cng c th xy ra bn trong mt hm, ngay c cc hm khc v cc nh ngha lp.

47

2_Cc i s ca hm
Thng tin c th c chuyn ti cc hm thng qua danh sch i s, l mt danh sch c phn cch bi du phy ca cc bin v/hoc cc hng s. PHP h tr truyn cc i s bi gi tr ( mc nh), truyn qua tham chiu, v cc gi tr i s mc nh. Mt kt qu thng thng c th t c trong PHP 3 bng cch thng qua mt mng cc i s ti mt hm:
function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; }

2.1_To cc i s bng cch truyn bng tham chiu Bi mc nh, cc i s ca hm c truyn bng tham tr ( bi vy nu ta thay i gi tr ca i s trong mt hm, n s khng thay i gi tr ca n bn ngoi hm). Nu ta mun cho php mt hm thay i cc i s ca n, ta phi truyn n bng tham chiu. Nu ta mun mt i s n mt hm lun lun c truyn bng tham chiu, ta c th thm mt du v ( &) pha trc tn ca i s trong nh ngha hm:
function add_some_extra(&$string) { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra($str); echo $str; // outputs 'This is a string, and something extra.'

Nu ta mun truyn mt bin bng tham chiu ti mt hm m khng thc hin iu ny bng mc nh, ta c th in mt du v (&) pha trc tn ca i s trong li gi hm:
function foo ($bar) { $bar .= ' and something extra.'; } $str = 'This is a string, '; foo ($str); echo $str; // outputs 'This is a string, ' foo (&$str); echo $str; // outputs 'This is a string, and something extra.'

2.2_Cc gi tr i s mc nh Mt hm c th nh ngha cc gi tr mc nh theo kiu ca C++ cho cc i s v hng nh sau:


function makecoffee ($type = "cappucino") { return "Making a cup of $type.\n"; } echo makecoffee (); echo makecoffee ("espresso");

u ra cho on m trn l:
Making a cup of cappucino. Making a cup of espresso.

Gi tr mc nh phi l mt biu thc hng s, khng phi l mt bin hoc mt thnh phn lp.

48

Ch rng khi s dng cc i s mc nh, bt k mc nh no s c t v pha bn phi ca cc i s khng mc nh; theo cch khc, nhng th s khng lm vic nh mong ch. Hy xem xt on m nh sau:
function makeyogurt ($type = "acidophilus", $flavour) { return "Making a bowl of $type $flavour.\n"; } echo makeyogurt ("raspberry"); // won't work as expected

u ra cho v d trn l:
Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Making a bowl of raspberry .

By gi hy so snh vi on ny:
function makeyogurt ($flavour, $type = "acidophilus") { return "Making a bowl of $type $flavour.\n"; } echo makeyogurt ("raspberry"); // works as expected

u ra cho v d ny l:
Making a bowl of acidophilus raspberry.

2.3_Cc danh sch i s chiu di bin PHP4 cung cp cc danh sch i s chiu di bin trong cc hm c nh ngha bi ngi s dng . iu ny thc s kh d dng, dng cc hm func_num_args(), func_get_arg() v hm func_get_args(). Khng yu cu c php c bit no, v cc danh sch i s s vn cn c cung cp mt cch r rng vi cc nh ngha hm v s tr nn thng thng.

3_Cc gi tr tr v
Cc gi tr c tr v bng cch dng cu lnh tr v tu chn. Bt k kiu no cng c th c tr v, bao gm c cc danh sch v cc i tng.
function square ($num) { return $num * $num; } echo square (4); // outputs '16'.

Ta khng th tr v nhiu gi tr t mt hm, nhng cc kt qu thng thng c th t c bng cch tr li mt danh sch.
function small_numbers() { return array (0, 1, 2); } list ($zero, $one, $two) = small_numbers();

49

tr v mt tham chiu t mt hm, ta phi dng ton t tham chiu & trong c khai bo hm v khi gn gi tr tr v cho mt bin:
function &returns_reference() { return $someref; } $newref =&returns_reference();

4_ Old_function
Cu lnh old_function cho php ta khai bo mt hm s dng mt c php ging ht PHP/FI2 ( khng th ta phi thay th function bng old_function). y l mt c im khng c tn thnh, v ch c s dng bi b chuyn i PHP/FI2 sang PHP3. Cnh bo Cc hm c khai bo nh old_function v khng th c gi t m cc b ca PHP. Chnh v vy m ta khng th dng chng trong cc hm nh usort(), array_walk(), register_shutdown_function().

5_Cc hm bin thin


PHP h tr khi nim ca cc hm bin thin. iu ny c ngha l nu mt tn bin c cc du ngoc n c thm vo n, PHP s tm kim mt hm c cng tn nh th cho d bin nh gi ti, v s c gng thc hin chng. Ni mt cch khc, iu ny c th c dng thc hin gi tr li, cc bng chc nng,v ra khi. V d v hm bin thin:
<?php function foo() { echo "In foo()<br>\n"; } function bar( $arg = '' ) { echo "In bar(); argument was '$arg'.<br>\n"; } $func = 'foo'; $func(); $func = 'bar'; $func( 'test' ); ?>

50

IX_ CC LP V CC I TNG 1_Lp


Mt lp l mt tp hp ca cc bin v cc hm lm vic trong cc bin ny. Mt lp c nh ngha s dng c php sau:
<?php class Cart { var $items; // Items in our shopping cart // Add $num articles of $artnr to the cart function add_item ($artnr, $num) { $this->items[$artnr] += $num; } // Take $num articles of $artnr out of the cart function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } }

?> iu ny nh ngha mt lp c tn l Cart gm c mt mng kt hp cc thc phm trong ci xe ch v hai hm thm v loi b cc phn t t ci xe ch ny. Ch : Trong PHP4, ch c cc khi to hng cho cc bin var l c php. Dng cc hm khi to cho cc khi to khng l hng s.
/* None of these will work in PHP 4. */ class Cart { var $todays_date = date("Y-m-d"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; } /* This is how it should be done. */ class Cart { var $todays_date; var $name; var $owner; function Cart() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* etc. . . */ }

} Cc lp l cc kiu , do vy, chng l bn k hoch cho cc bin tht s. Ta phi to mt bin c kiu mong mun vi ton t new.

51

$cart = new Cart;

$cart->add_item("10", 1); iu ny to mt i tng $cart ca lp Cart. Hm add_item() ca i tng ang c gi thm mt phn t ca thc phm s 10 vo xe ch. Cc lp c th c m rng ti cc lp khc. Lp c tha hng hoc c m rng c tt c cc bin v cc hm ca lp c s v nhng g bn thm vo nh ngha c m rng. iu ny c thc hin bng cch dng t kho extend. a tha k khng c h tr.
class Named_Cart extends Cart { var $owner; function set_owner ($name) { $this->owner = $name; }

} iu ny nh ngha mt lp Named_Cart m c tt c cc bin v cc hm ca Cart cng vi mt bin thm $owner v mt hm thm set_owner(). Ta to mt xe ch c ch nh theo cch thng thng v by gi c th thit lp v ly ch ca xe ch. Ta cng c th s dng cc hm xe ch thng thng trn cc xe ch c ch nh:
$ncart = new Named_Cart; // Create a named cart $ncart->set_owner ("kris"); // Name that cart print $ncart->owner; // print the cart owners name

$ncart->add_item ("10", 1); // (inherited functionality from cart) Bn trong cc hm ca mt lp bin $this c ngha l i tng ny. Ta phi dng $this>something truy nhp n bt k bin no hoc hm no c t tn something trong i tng hin thi. C bn trong ln bn ngoi ca i tng ta khng cn mt du $ khi truy nhp vo cc thuc tnh ca mt i tng.
$ncart->owner = "chris"; // no $ $ncart->$owner = "chris"; // this is invalid because $ncart->$owner = $ncart->"" $myvar = 'owner'; $ncart->$myvar = "chris";

// this is valid because $ncart->$myvar = $ncart->owner Cc hm khi tol cc hm trong mt lp v c gi mt cch t ng khi ta to mt th hin mi ca mt lp. Mt hm tr thnh mt hm khi to khi n c cng tn vi tn ca lp.
class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); }

} iu ny nh ngha mt lp Auto_Cart l mt Cart thm mt hm khi to m khi to mt xe ch vi mt phn t thc phm s 10 mi ln mt Auto_Cart c to vi t new. Cc hm khi to cng c th a ra cc i s v cc i s ny c th c tu chn, n to cho chng s thun tin nhiu hn.

52

class Constructor_Cart extends Cart { function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Shop the same old boring stuff. $default_cart = new Constructor_Cart; // Shop for real... $different_cart = new Constructor_Cart ("20", 17);

Ch thch i vi cc lp c tha k, hm khi to ca lp cha khng c gi mt cch t ng khi hm khi to ca lp c tha k c gi.

2_Cc tham chiu bn trong hm khi to


Vic to ra cc tham chiu bn trong hm khi to c th dn n cc kt qu kh hiu.
class foo { function foo($name) { // create a reference inside the global array $globalref global $globalref; $globalref[] = &$this; // set name to passed value $this->setName($name); // and put it out $this->echoName(); } function echoName() { echo "<br>",$this->Name; } function setName($name) { $this->Name = $name; }

} Chng ta hy cng kim tra nu c mt s khc bit gia $bar1 m c to bng cch dng ton t = sao chp v $bar2 m c to bng cch dng ton t tham chiu =& ...
$bar1 = new foo('set in constructor'); $bar1->echoName(); $globalref[0]->echoName(); /* output: set in constructor set in constructor set in constructor */ $bar2 =& new foo('set in constructor'); $bar2->echoName(); $globalref[1]->echoName();

53

/* output: set in constructor set in constructor

set in constructor */ Dng nh khng c s khc bit, nhng trong thc t c mt im rt khc bit: $bar1 v $globalref[0] khng c tham chiu, chng khng cng chung bin. iu ny gii thch ti sao new mc nh khng tr v mt tham chiu, thay v n tr v mt sao chp. Ch : Khng c s thc hin no b mt mt ( t khi PHP4 v trn na s dng c tham chiu) tr li cc bn sao chp thay v cc tham chiu. Tri ngc li, tt hn ht l lm vic mt cch n gin vi cc bn sao chp thay v cc tham chiu, bi v vic to ra cc tham chiu i hi cc tn thi gian trong khi vic to ra cc bn sao chp dng nh khng mt thi gian ( nu khng phi khng s no trong chng l mt mng ln hoc i tng v mt trong s chng thay i v cc s khc cn li sau , tip n n s ch ra cch dng cc tham chiu thay i chng mt cch ng thi). chng t iu g c vit trn chng ta hy xem on m di y:
// now we will change the name. what do you expect? // you could expect that both $bar and $globalref[0] change their names... $bar1->setName('set from outside'); // as mentioned before this is not the case. $bar1->echoName(); $globalref[0]->echoName(); /* output: set on object creation set from outside */ // let us see what is different with $bar2 and $globalref[1] $bar2->setName('set from outside'); // luckily they are not only equyl, they are thesame variable // thus $bar2->Name and $globalref[1]->Name are the same too $bar2->echoName(); $globalref[1]->echoName(); /* output: set from outside

set from outside */ Mt v d cui cng, hy c gng hiu n:


class a { function a($i) { $this->value = $i; // try to figure out why we do not need a reference here $this->b = new b($this); } function createRef() { $this->c = new b($this); } function echoValue() { echo "<br>","class ",get_class($this),': ',$this->value; }

54

} class b { function b(&$a) { $this->a = &$a; } function echoValue() { echo "<br>","class ",get_class($this),': ',$this->a->value; } } // try to undestand why using a simple copy here would yield // in an undesired result in the *-marked line $a =& new a(10); $a->createRef(); $a->echoValue(); $a->b->echoValue(); $a->c->echoValue(); $a->value = 11; $a->echoValue(); $a->b->echoValue(); // * $a->c->echoValue(); /* output: class a: 10 class b: 10 class b: 10 class a: 11 class b: 11 class b: 11 */

55

You might also like