Download as pdf or txt
Download as pdf or txt
You are on page 1of 147

Ngn Ng Lp Trnh PHP

Phn I: PHP C Bn
Bi 1: Ngn ng PHP:
Cch trnh by trang Homepage (Front page)
Homepage trong Joomla! c ci t v th hin thng qua mt thnh phn c
bit l com_frontpage. Do vy trong Joomla! trang homepage cn c gi l
Front Page. Thng qua trang Front Page bn c th trnh by mt s cch: dng
blog, dng kt hp blog + chia ct... Vi nhng ai mi lm quen vi Joomla, cc
tham s i km trang Frontpage nh: leading, intro, colums, links... c th gy kh
khn. Tuy nhin hi vng vi mt vi bc n gin di y bn hon ton c th
lm ch Frontpage.
Bc 1: ng nhp vo trang qun tr (back-end).
VD: http://www.thietkejoomla.com/administrator
Bc 2: Vo phn qun l menu
Theo mc nh, trang Homepage c t trong "Main Menu". M menu Menus -> Main Menu --> chn "Home" v quan st cc tham s ty chnh bn tay phi
(mc "Parameters").
VD bn thit lp nh hnh bn, bn s c kt qu nh di y:

Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lu :
qun l cc bi vit ca trang FrontPage bn m menu "Content" --> "Front
Page Manager"
c trang Homepage ging nh VnExpress (cc bi vit c trnh by ln lt
theo cc ch ) bn cn tm v ci t mt component chng hn nh: D4Ezine,
iJoomla...
Bi 2: Lnh iu khin vng lp
iu khin vng lp, tc l bn iu khin chng trnh ca bn t ng thc hin
mt on m lnh no lp i lp li nhiu ln (lp mt s lng ln no ,
hoc lp cho n khi tho mn mt iu kin no ).
PHP cung cp cho chng ta hai kiu vng lp: vng lp while (lp kim tra iu
kin, cho n khi iu kin c tho mn) v vng lp for (xc nh s ln lp
li)
a) Vng lp while
Vng lp while l mt dng vng lp n gin nht, cu trc ca n gn ging nh
lnh if:
while (iu kin)
{
//Khoi cau lenh can lap
}
Vng lp while s c lng mt biu thc gi tr kiu boolean (ng hoc
sai).Nu gi tr ca biu thc l false, on m trong cp du ngoc (on m cn
lp) s c b qua v nhy n on m sau vng lp. Nu gi tr ca n l true,
on m trong cp du ngoc s c thc thi. Khi bt gp du ngoc m ("}") ,
iu kin kim tra s c tnh ton li, v nu gi tr vn l true, on m trong
ngoc li tip tc c thc thi. Ch rng iu kin lp ch c tnh ton ti
thi im bt u lp. V vy, d iu kin lp c b thay i trong qu trnh thc
thi on lnh trong cp du {} th on lnh vn c tip tc thc hin cho
n ht. Mun dng li mt v tr xc nh no trong khi cu lnh, chng ta
s dng lnh break:
V d1: Tnh tng t 1 n 5:
<?php
$i=0;
$tong=0;
while ($i<=5)
{
$tong=$tong+$i;
$i+=1;
}
?>
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

V d 2: on m sau s hin th trn trnh duyt 3 textbox (Vi iu kin bn


phi save n di mt file *.php :
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
while ($i<=3)
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}
?>
</table>
</body>
</html>
b. Vng lp do...while
Vng lp ny ging nh vng lp while, nhng thay v kim tra iu kin vo lc
u ca on lnh cn lp, th n li kim tra gi tr iu kin vo cui vng lp.
iu ny c ngha l n lun lun thc hin on lnh cn lp t nht mt ln.
Cu trc ca n nh sau:
do
{ on (khi) cu lnh cn lp
} while (iu kin);
V d:
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
do
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}while ($i<=3);
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

?>
</table>
</body>
</html>
xc nh li s khc nhau ca 2 cu lnh trn, n gin bn ch vic thay iu
kin $i<=3 thnh $i<1, bn s thy hai kt qu khc nhau lin . Phn ny dnh cho
bn t ngi ngh. OK???
Qun mt, lc ny ti cp n lnh break, nhng cha cho v d, by gi chng
ta hy xem xt v d sau:
Cc bn bit rng giai tha l mt con s ln kinh khng, v chng trnh ca
chng ta s tnh ton n giai tha, vi s n c gi n theo a ch url:
http://dia_chi_trang_web_cua_ban/giaithua.php?n=xx ( x l mt s do ngi
dng t nhp)
Do giai tha l mt con s cc k ln, nn chng ta ch cho php ngi dng tnh
n ti a l 8 giai tha chng hn. Nu h nhp ln hn 8 th sao? Hy xem y:
<HTML>
<?php
// Ghi lai voi ten file la giaithua.php
$giaithua=1;
$i=1;
while ( $i<=$n)
{
$giaithua*=$i;
$i+=1;
if ($i>8 )
{
echo ("Chi tinh den 8! <BR>");
break;
}
}
echo ("Ket qua la: ".$giaithua);
?>
</HTML>
on m trn ch cho php tnh n 8 giai tha, nu ngi dng nhp mt con s
ln hn 8 th my s hin th 8 giai tha, cn nu nh hn th vn chy tt.
c) Vng lp for.
Vng lp for, vi ngha u tin l lp vi s ln nh trc, c cu trc nh sau:
for ( $bin = gi_tr_u; $bin < (hay <=) gi_tr_kt_thc; tng_bin_m)
{
// Khi cu lnh
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

}
Biu thc $bin=gi_tr_u, m bo bin c gn mt gi tr khi u (1)
Biu thc $bin< (hay <=) gi_tr_kt_thc, s xc nh xem bin t n gi
tr kt thc (tc l iu kin lp khng cn ng na) cha (2)
Biu thc tnh ton tng_bin_m m bo sau mt s ln lp no th biu
thc xc nh iu kin (2) s dn n kt qu sai ( thot khi vng lp).
V d:
for ( $i = 1; $i <10; ++$i)
{
echo ("Gi tr ca bin \$i l: ".$i);
}
Mt bin dng khc ca vng lp for, gn ging nh lnh r nhnh if v while:
for (bieu_thuc_1; bieu_thuc_2; bieu_thuc_3):
// Khi cu lnh
endfor;
V d:
<?php
for ($i=1; $i<=10;++$i)
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
endfor
?>
OK, Nh vy cc bn hc qua cc lnh c bn nht ca php, v cng l cc
lnh c bn ca tt c cc ngn ng lp trnh (gn, r nhnh v lp). Sau ny nu
phi trin khai trn cc ngn ng lp trnh khc, cch vit cc lnh ny c th khc
nhau, nhng bn cht ca chng th mi mi khng bao gi thay i.
Bi 3: Mt vi vn v hm header()
Li "Headers Already Sent " l 1 li thng dng n kh tin, v tui nhn c
rt rt nhiu cu hi v n dng nh " N l ci g ?, Sao li nh th" , v vy tui
quyt nh a n ln bn m nhm lm sng t vn
Mt HTTP response ( tr v ) thng thng bao gm 2 phn l header( u) v
content (ni dung), Phn header trong 1 HTTP response ch ra bn cht ca
response v cch x l vi chng. V d, 1 response c ch ra "Location" trong
header , ci ny bo cho trnh duyt t ng chuyn n Url c ch ra trong
header.Hoc 1 response c "Content-type" trong header, trnh duyt s x l ni
dung theo loi ni dung :image x khc , text x khc, Flash xa khc
Header cng c s dng khi bn lm vic vi session, c th bn ko thy r
c iu ny, nhng trong nhng hm v session ca PHP n u dng thng
qua cookie. V th ngay khi bn dng session bn to ra 1 HTTP header. Hm
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

session_start() khi to 1 tp cookie v v th n gi 1 HTTP header xung trnh


duyt.
Phn cn li ca HTTP response l ni dung (content), ci ny chc bn nhn thy
n d dng ri. Phn ny phi c gi i sau headers, v mt khi ni dung
c gi i th s ko c header no c th c gi xung trnh duyt na. Ni
dung bao gm cc on m HTML hoc bt c th g c to ra trong script ca
bn. Khi bn gi echo() bn xut ni dung xung trnh duyt ri y.
Th th lin quan g n li "Headers Already Sent"? Li ny xut hin khi bn c
gng gi 1 HTTP header xung trnh duyt sau khi ni dung c gi xung.
Trong mt HTTP response u ny l phm php , ko c php bi v " go
nu thnh cm" , trnh duyt x l xong phn ni dung c gi xung ri,
header ko cn tc dng g na c .
V nh t ni trn, session_start() gi header xung client, hm header()
cng gi header xung ... v th 2 thng ny l d gp li "Headers Already Sent"
nht nu nh gi ni dung xung trnh duyt trc khi gi chng.
Gii php cho vn ny n gin ch l : hy chc chn rng bn khng gi bt
c ni dung g xung trnh duyt trc khi gi cc hm c lm vic vi header.Ni
th nh th nhng thc t cng kh kh khn v ... chng ta l ngi Vit, chng ta
phi vit ting Vit trong code , chng ta phi dng Unicode ... v a s cc Editor
PHP , khi bn chn encoding cho file l Utf-8 n s v t km theo cho bn 3 k t
u file gi l BOM (byte order mark) ( dch ra l g th t ko bit ), cc k t
ny thuc dng v hnh nn chng ta s ko nhn thy chng , nhng my tnh th
thy.... v th cho nn bn c b ra c thng tri ngi m mm trong code xem
c k t no c xut ra hay cha th cng v vng . Cch n gin nht l hy
chn Utf-8 witthout BOM trong Editor ca bn .
Nhng c mt gii php khc an ton nhn nh hn l hy giao tt c nhng g bn
xut ra cho b m (output buffering ) nm gi, sau khi x l xong tt c s c
cho vo i pho bn 1 ln xung trnh duyt ... khng cn lo sau trc th t g
na c . Hy thm vo u code ca bn ob_start() v cui code ob_end_flush(),
bn c th va code va ng , bit thm v nhng hm output buffering hy
tm n PHP Manual .
Bi 4: Mt s hng trong php
PHP nh ngha sn mt vi hng s:
_FILE_ : tn ca script file ang c thc hin.
_LINE_ : s dng ca m script ang c thc hin trong script file hin ti.
_PHP_VERSION_ : version ca PHP
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

_PHP_ : tn h iu hnh m PHP ang chy


TRUE
FALSE
E_ERROR : bo hiu c li
E_PARSE : bo li sai khi bin dch
E_NOTICE : Mt vi s kin c th l li hoc khng.
E_ALL :
C th nh ngha mt hng s bng hm define()
{geshibot lang="php" head=""}<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
?>{/geshibot}
Bi 5: Cc hm do ngi dng t nh ngha
I. Xy dng cc hm trong PHP
Trong PHP, chng ta c th t xy dng cc hm ca mnh. Trc khi s dng,
chng ta cn phi tin hnh ci t hm.
C php ci t mt hm c th c tm tt nh sau:
function ten_ham (thamso1, thamso2, ..., thamson)
{
// on chng trnh x l d liu bn trong hm
return gia_tri;
}
Trong :
- function l t kha,
- ten_ham l tn hm do chng ta t t. Tn hm thng s dng cc k hiu ch
ci, ch s v du gch di.
- Cc thamsoi l cc tham s a vo. Cc tham s khi khai bo thng di
dng cc bin, cn khi s dng th c th l bin, hng, hay mt gi tr no . Mt
hm c th khng c hoc c nhiu tham s.
- Gi tr gia_tri sau t kha return l gi tr tr v sau khi gi hm. Gi tr ny c
th l gi tr ca mt bin, hay mt gi tr c th no .
V d: Ti xy dng mt hm n gin tr v dng ch "Xin cho":
function chao()
{
return "<B>Xin cho</B>";
}
V d 2: Ti a ra mt hm phc tp hn cht nh: Khi xy dng cc ng dng
lin quan n CSDL, ta thng phi xut d liu ra mt bng no .
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Mt bng trong HTML c cu thnh t cc cp th <table>, <tr>, <td> lng vo


nhau, mc nh nht ca cu trc trn l mt .
Mt c th c cha thng tin (nm gia cc cp th <td></td>), c th cha cc
thuc tnh nh dng (style)... Vic ngi g i g li my ci th HTML lm
cho chng ta pht chn.
y ti s xy dng mt hm t ng sinh ra ni dung ca mt . Hm ny
c 2 tham s u vo dng chui l ni dung v nh dng th:
<?
function viet_o ($noidung,$dinhdang)
{
$td_tmp="<td " . $dinhdang . ">" . $noidung . "</td>";
return $td_tmp;
}
?>
VD s dng hm trn:
<table>
<tr>
<?viet_o("STT","");?>
<?viet_o("H tn","");?>
<?viet_o("Ngy sinh","");?>
</tr>
<tr>
<?viet_o("1","");?>
<?viet_o("L Nguyn Sinh","");?>
<?viet_o("01/04/2006","");?>
</tr>
<tr>
<?viet_o("2","");?>
<?viet_o("Th mt t","");?>
<?viet_o("01/01/2007","");?>
</tr>
</td>
Chng ta c th m rng ra cc hm khc x l ct, bng. Hy xem xt ton b
on m sau:
<?
function viet_o ($noidung,$dinhdang)
{
$td_tmp="<td " . $dinhdang . ">" . $noidung . "</td>";
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

return $td_tmp;
}
function viet_cot ($noidung,$dinhdang)
{
$td_tmp="<tr " . $dinhdang . ">" . $noidung . "</tr>";
return $td_tmp;
}
?>
<?
function viet_bang ($noidung,$dinhdang)
{
$td_tmp="<table " . $dinhdang . ">" . $noidung . "</table>";
return $td_tmp;
}
// To mt bng tng t trn nhng dng cc hm va xy dng
$noidung = viet_cot(viet_o("STT","") . viet_o("H tn","") . viet_o ("Ngy
sinh",""),"");
$noidung .=viet_cot(viet_o("1","") . viet_o("L Nguyn Sinh","") . viet_o
("01/04/2006",""),"");
$noidung .=viet_cot(viet_o("2","") . viet_o("Th mt t","") . viet_o
("01/01/2007",""),"");
$noidung = viet_bang($noidung,"");
echo $noidung;
?>
on m trn nhn qua th n hi di, nhng khi bn x l vi s lng d liu ln
th n s tr nn ngn gn hn nhiu, nht l ta c th dng vng lp duyt qua
cc hng ca mt bng.
II. Cc tham s mc nh v cc tham s ty chn
Khi a cc tham s vo hm, chng ta c th thit lp cc tham s mc nh. Cc
tham s ny c t gi tr ngay khi xy dng hm.
V d:
function viet_o ($noidung, $dinhdang="")
{
$td_tmp="<td " . $dinhdang . ">" . $noidung . "</td>";
return $td_tmp;
}
Nu cc tham s mc nh c t ht bn phi ca danh sch tham s, khi
Email: Mrhaisyc@gmail.com

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

triu gi hm, chng ta c th b qua cc tham s mc nh ny. Tuy nhin, nu


n nm gia hay bn phi th chng ta khng c php b qua. Trong trng hp
cc tham s mc nh c t bn tri, chng ta c th coi chng nh l cc
tham s ty chn.
Vi v d trn, ta c th gi hm viet_o theo mt trong hai cch sau:
viet_o("Th mt t","");
hc
viet_o("Th hai t");//Trng hp ny tham s ty chn l tham s mc nh c
t l rng pha bn phi ca danh sch tham s.
III. Phm vi hot ng ca cc bin trong v ngoi hm
Ch rng khi ta s dng cc bin bn trong hm, mc nh, cc bin c coi
l bin cc b ca hm, ch khng phi l bin ton cc ca chng trnh.
thit lp hoc ly gi tr ca cc bin ton cc, chng ta c th s dng 1 trong
2 cch sau y:
Cch 1: Dng khai bo GLOBAL khai bo cc bin ton cc
Cch 2: S dng mng $GLOBALS["tn_bin_ton_cc"].
V d:
<?
$x=1;
$y=3;
function cong ()
{
return $x+$y;
}
?>
Khi ta gi hm cong() trn s cho ra kt qu bng 0 (v $x v $y lc ny c
coi l bin cc b v c gi tr bng 0.
chng trnh chy ng, ta phi lm nh sau:
Cch 1:
<?
$x=1;
$y=3;
function cong ()
Email: Mrhaisyc@gmail.com

10

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

{
GLOBAL $x, $y
return $x+$y;
}
?>
Cch 2:
<?
$x=1;
$y=3;
function cong ()
{
return $GLOBALS["x"]+$GLOBALS["y"];
}
?>
Bi 6: Hm trong PHP
I. Khi nim hm
Hm (function), nguyn ngha ting Anh c ngha l chc nng.
Trong lp trnh, ta c th hiu hm l mt on chng trnh c xy dng
thc hin mt chc nng no .
on chng trnh ny ch cn phi vit duy nht mt ln, v c th c s dng
nhiu ln trong ton b chng trnh.
Mt hm s c xc nh bi tn hm v cc tham s u vo lin quan n hm
. Thng thng, hm s tr v mt kt qu no .
Chng ta c th tng tng theo s sau:
Tham s u vo 1 |
Tham s u vo 2 |
Tham s u vo 3 | ---> tn hm --> kt qu tr v sau khi gi hm.
... . |
Tham s u vo n |
Nh vy mt hm s nhn cc thng tin u vo, x l n v tr v kt qu no .
Trong PHP c rt nhiu hm c xy dng sn m chng ta ch vic em ra s
dng, nh cc hm x l chui, thi gian, x l tp, th mc...
Xt v bn cht, mt ngn ng lp trnh ch c ba cu lnh chnh l gn, lp v r
nhnh. Vic sp xp cc cu lnh nh th no cho ra mt kt qu gi l mt
thut ton (cc bc gii mt bi tan, c cp nhng bi u tin)
Email: Mrhaisyc@gmail.com

11

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

hay gii thut. V mt chng trnh s l s kt hp ca gii thut v cc cu trc


d liu. h tr cc chng trnh x l mt s tnh hung no , ngi ta s
dng cc hm.
Cc cu lnh write ca Pascal hay cu lnh echo ca PHP thc cht phi c gi
l cc hm ch khng phi l mt cu lnh.
gii thch r hn khi nim hm, ta quay tr li vi "cu lnh" echo quen
thuc:
Hm echo(chui) c tn l echo, tham s u vo l mt chui, v chc nng (kt
qu m n tr v) l mt dng ch (c lu trong bin chui) c tr v trnh
duyt.
II. Cc hm dng sn v cc hm do ngi dng t xy dng
Cc hm dng sn trong PHP (PHP Built-in functions) l cc hm c cc nh
pht trin PHP ci t sn, v chng ta ch vic em ra s dng. Cn phn bit cc
hm ny vi cc hm do ngi dng t ci t (user functions). Cc hm do ngi
dng t xy dng ch c th c dng trong chng trnh c cha hm . Khi
chuyn qua mt ng dng khc, nu chng ta khng vit li cc hm th chng
ta s khng th s dng.
Mt im m ti rt thch s dng PHP l PHP c mt th vin cc hm dng
sn v cng phong ph, p ng c hu ht nhu cu pht trin cc ng dng
web. chnh l l do v sao m PHP c a chung hn hn so vi ASP (ch c
my ci i tng "qun"). Cc hm dng sn trong PHP cng rt n gin, d
dng, v c ch thch, cng nh hng dn rt chi tit trong ti liu PHP
Manual.
Bi 7: Cch ly thng tin t trnh duyt: GET, POST v COOKIE
D liu ca ngi dng t trnh duyt s c gi ln my ch di dng tng
cp bin=gi_tr v c th i theo 3 con ng khc nhau. Tu theo tng con
ng c th, trn my ch ta cng c cc cch khc nhau ly d liu c gi
ln.. 3 con ng l: GET, POST v COOKIES. Vy GET, POST v COKIES
l g?
1. Truyn d liu thng qua phng thc GET
D liu gi t trnh duyt ln qua phng thc GET l phn d liu c nhp
trc tip theo sau a ch URL do trnh duyt gi ln, c phn bit vi tn file
script bng du hi chm (?). V d, khi ta g vo trnh duyt a ch URL sau:
http://www.phpvn.org/topic.php?TOPIC_ID=161
Khi , trnh duyt s gi theo a ch trn mt cp bin = gi tr, trong bin c
Email: Mrhaisyc@gmail.com

12

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

tn l TOPIC_ID v gi tr l 161 (TOPIC_ID=161).


Chng ta cng c th a ln nhiu cp bit=gi_tr bng cch phn cch chng
bi du &:
PHP Viet Nam - Index
Vi a ch URL trn, chng ta s gi ln 3 cp bin=gi_tr theo phng thc
GET, l: method=Reply, TOPIC_ID=161 v FORUM_ID=20.
Khi trnh duyt gi cc thng tin ny ln my ch, PHP s t ng sinh ra mt
mng c tn l $HTTP_GET_VARS[] nm gi tt c cc cp bin v gi tr ,
trong , ch s ca mng chnh l mt chui mang tn ca tn bin v gi tr ca
ch s chnh l gi tr ca bin do trnh duyt gi ln. V d, vi a ch URL
sau:
http://www.phpvn.org/post.php?method...61&FORUM_ID=20
Th PHP s t ng sinh ra mt mng $HTTP_GET_VARS c ni dung sau:
PHP Code:
$HTTP_GET_VARS["method"] = "Reply" // tng ng vi cp method=Reply
$HTTP_GET_VARS["TOPIC_ID"] = 161 // tng ng vi cp TOPIC_ID=161
$HTTP_GET_VARS["FORUM_ID"] = 20 // tng ng vi cp FORUM_ID=20
Sau , trong trang web ca mnh, cc bn c th tha h s dng cc bin ny. V
d, ti lm mt on chng trnh sau khi ngi dng nhp vo bin user=sinh
th cho hin th "Hello, my Boss", cn nu bin user khc sinh th "Hello " + gi tr
ca bin:
PHP Code:
<?
// Hm isset c s dng kim tra xem mt bin c thit lp hay cha
if (isset ($HTTP_GET_VARS["user"]))
{
if ($HTTP_GET_VARS["user"]=="sinh")
{
echo "Hello, my boss. Good morning!";
}
else
{
echo "Hello, " . $HTTP_GET_VARS["user"] . ". Good morning!";
}
}
else
{
echo "Hello, guest. How do you do?";
}
?>

Email: Mrhaisyc@gmail.com

13

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

OK, by gi hy save li. Gi s ti lu vi tn l welcome.php trong th mc


www. M trnh duyt ln, g vo Address dng ch sau:
http://localhost/welcome.php?user=sinh
Hy xem kt qu hin th trn mn hnh, sau thay ch sinh bng mt ci tn g
xem kt qu ra sao.

II. Phng thc POST


Post l phn d liu c gi qua cc form HTML c method ="POST" (xin xem
li bi v HTML).
ly cc bin theo kiu POST, PHP s t ng sinh ra mng c tn l
$HTTP_POST_VARS[]. Mng ny c ch s chnh l tn ca cc phn t trong
form (cc th input, select... c thuc tnh name) v gi tr l ni dung gi tr do
ngi s dng nhp vo cc phn t c tn tng ng. Chng hn vi mu biu
HTML sau:
HTML Code:
HTML Code:
<form method="POST">
<p>
User Name:<input type="text" name="T1" size="20"> </p>
<p>
Password:
<input type="password" name="T2" size="20"></p>
<p>Sex: <Select name ="sex">
<option value =1>Male </option>
<option value =0>Female </option>
</select>
</p>
<input type="submit" value="Gui di" name="B1">
</form>
Khi ngi dng nhp user name (gi s l Sinh), password (gi s l 123456) v
chn sex l Male, khi , mng $HTTP_POST_VARS s c cc phn t sau:
PHP Code:
$HTTP_POST_VARS["T1"] = Sinh
$HTTP_POST_VARS["T2"] = 123456
$HTTP_POST_VARS["sex"] = 1

Email: Mrhaisyc@gmail.com

14

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Sau khi ly c cc gi tr ny ri, cc bn c th thoi mi s dng.


y l v d mt chng trnh gii phng trnh bc nht (cho n n gin
PHP Code:
<form method="POST">
<p style="margin-top: 0; margin-bottom: 0">
Nhp a:<input type="text" name="a" size="20"></p>
<p style="margin-top: 0; marginbottom: 0">Nhp b:<input type="text" name="b" size="20"></p>
<p style="margin-top: 0; margin-bottom: 0">
<input type="submit" value="Tnh" name="B1"></p>
</form>
<?php
$a=0;
$b=0;
if (isset ($HTTP_POST_VARS["a"]))
{
$a =$HTTP_POST_VARS["a"];
}
if (isset ($HTTP_POST_VARS["b"]))
{
$b =$HTTP_POST_VARS["b"];
}
if ($a<>0)
{
echo "<BR>Nghiem la: " . $b/$a;Ch ny l -$b/$a
}
else
{
if ($b==0)
{
echo "<BR>Vo so nghiem";
}
else
{
echo "<BR>Vo nghiem";
}
}
?>
By gi hy lm cc cafe hoc tr cho tnh to.

III Cookie v cch s dng Cookie


Cookies l mt phn d liu c lu trn my khch. Mi khi my khch gi mt
Email: Mrhaisyc@gmail.com

15

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

yu cu ti my ch no , th n s gi phn d liu c lu trong cookie


tng ng vi my ch .
Trong Cookie c mt s thng s sau:
- a ch URL m trnh duyt s gi cookie ti
- Thi gian ht hn ca cookie
- Cc cp bin:gi tr c lu tr lin tc
Ngi ta thng dng cookies lu tr cc thng tin c lin quan n nhiu
"phin" lm vic khc nhau. Vi giao thc HTTP l giao thc khng lu trng thi
(Mi khi x l xong mt yu cu t my khch l n phi tay t ngt kt ni lun
v chng thm quan tm n my khch lm g ), nn cookies c sinh ra lm
nhim v lu tr mt s bin trng thi khc phc nhc im ny.
Khc vi d liu gi t form (Post hay Get) th cookies s c trnh duyt t
ng gi i theo mi ln truy cp ln my ch. Trong qu trnh lm vic, cookie
c th b thay i gi tr. Cookie s b v hiu ho nu ca s trnh duyt iu
khin cookie ng li v cookie ht thi gian c hiu lc. Theo mc nh, thi
gian "sng" ca cookies l tn ti cho n khi ca s trnh duyt s dng cookies
b ng. Tuy nhin ngi ta c th thit lp tham s thi gian cookie c th
sng lu hn (6 thng chng hn). V d nh ch Remember ID & Password
ca 1 s trang web.
Cch ghi thng tin vo cookie v gi xung trnh duyt
Trong PHP, gi cookie xung trnh duyt, ta c th s dng hm setcookie:
setcookie ( string name [, string value [, int expire [, string path [, string domain [,
int secure]]]]])
Trong :
- string name: Chui mang tn ca cookie
- string value: Chui mang gi tr ca cookie tng ng vi tn cho
- int expire: Thi gian ht hn ca cookie
- string path: ng dn ca cookie (n 1 th mc no trn my ch. Tham s
ny cho bit cookie s ch c truyn i nu nh trang web m trnh duyt yu
cu nm trn th mc , thay v lc no cng phi gi i ti bt k khu vc no).
- string domain: cookie ny s c gi ti domain no?
- int secure: Ch bo mt.
Cc tham s trong cp du ngoc vung l tu chn
V d: setcookie ("ten_truy_cap","lan gio vo tinh");
Ch : Hm setcookie phi c gi trc khi bn gi bt k mt ni dung
Email: Mrhaisyc@gmail.com

16

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

no xung trnh duyt:


VD: Cch dng ng:
PHP Code:
// Thc hin cc cu lnh no , nhng khng c php gi g xung trnh duy
t
setcookie ("ten_truy_cap","lan gio vo tinh");
setcookie ("password","thumotti");
// Thc hin cc cu lnh tip theo, c th xut d liu xung trnh duyt:
PHP Code:
echo "<html><body>Xin cho lan gio vo tinh";
VD: Cch dng sai:
PHP Code:
// Thc hin cc cu lnh no
echo ("ci g ");
setcookie ("ten_truy_cap","lan gio vo tinh");
setcookie ("password","thumotti");
// cc cu lnh khc.
V d trn sai v bn trt gi dng "ci g " xung trnh duyt trc khi gi
hm setcookie.
Cch ly d liu lu trong cookie:
ly d liu lu trong cookies do trnh duyt gi ln, ta c th dng mng
PHP Code:
$HTTP_COOKIE_VARS["tn_cookie"]
Chng hn, vi cu lnh setcookie trn, sau khi trnh duyt gi ln, ta s c 2
bin sau:
PHP Code:
$HTTP_COOKIE_VARS["ten_truy_cap"] // cha gi tr "lan gio vo tinh"
$HTTP_COOKIE_VARS["password"] // cha gi tr "thumotti".
Chi tit hn cc bn c th xem trong PHP Manual.
Bi 8: Lnh iu khin vng lp
Tuesday, 16 December 2008 11:15 Anhxtanh3087
Lnh iu khin vng lp
iu khin vng lp, tc l bn iu khin chng trnh ca bn t ng thc hin
mt on m lnh no lp i lp li nhiu ln (lp mt s lng ln no ,
hoc lp cho n khi tho mn mt iu kin no ).
PHP cung cp cho chng ta hai kiu vng lp: vng lp while (lp kim tra iu
Email: Mrhaisyc@gmail.com

17

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

kin, cho n khi iu kin c tho mn) v vng lp for (xc nh s ln lp


li)
a) Vng lp while
Vng lp while l mt dng vng lp n gin nht, cu trc ca n gn ging nh
lnh if:
while (iu kin)
{
//Khoi cau lenh can lap
}
Vng lp while s c lng mt biu thc gi tr kiu boolean (ng hoc
sai).Nu gi tr ca biu thc l false, on m trong cp du ngoc (on m cn
lp) s c b qua v nhy n on m sau vng lp. Nu gi tr ca n l true,
on m trong cp du ngoc s c thc thi. Khi bt gp du ngoc m ("}") ,
iu kin kim tra s c tnh ton li, v nu gi tr vn l true, on m trong
ngoc li tip tc c thc thi. Ch rng iu kin lp ch c tnh ton ti
thi im bt u lp. V vy, d iu kin lp c b thay i trong qu trnh thc
thi on lnh trong cp du {} th on lnh vn c tip tc thc hin cho
n ht. Mun dng li mt v tr xc nh no trong khi cu lnh, chng ta
s dng lnh break:
V d1: Tnh tng t 1 n 5:
<?php
$i=0;
$tong=0;
while ($i<=5)
{
$tong=$tong+$i;
$i+=1;
}
?>
V d 2: on m sau s hin th trn trnh duyt 3 textbox (Vi iu kin bn
phi save n di mt file *.php :
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
Email: Mrhaisyc@gmail.com

18

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

while ($i<=3)
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}
?>
</table>
</body>
</html>
b. Vng lp do...while
Vng lp ny ging nh vng lp while, nhng thay v kim tra iu kin vo lc
u ca on lnh cn lp, th n li kim tra gi tr iu kin vo cui vng lp.
iu ny c ngha l n lun lun thc hin on lnh cn lp t nht mt ln.
Cu trc ca n nh sau:
do
{ on (khi) cu lnh cn lp
} while (iu kin);
V d:
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
do
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}while ($i<=3);
?>
</table>
</body>
</html>
xc nh li s khc nhau ca 2 cu lnh trn, n gin bn ch vic thay iu
Email: Mrhaisyc@gmail.com

19

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

kin $i<=3 thnh $i<1, bn s thy hai kt qu khc nhau lin . Phn ny dnh cho
bn t ngi ngh. OK???
Qun mt, lc ny ti cp n lnh break, nhng cha cho v d, by gi chng
ta hy xem xt v d sau:
Cc bn bit rng giai tha l mt con s ln kinh khng, v chng trnh ca
chng ta s tnh ton n giai tha, vi s n c gi n theo a ch url:
Nhanhoa.com - Offline ( x l mt s do ngi dng t nhp)
Do giai tha l mt con s cc k ln, nn chng ta ch cho php ngi dng tnh
n ti a l 8 giai tha chng hn. Nu h nhp ln hn 8 th sao? Hy xem y:
<HTML>
<?php
// Ghi lai voi ten file la giaithua.php
$giaithua=1;
$i=1;
while ( $i<=$n)
{
$giaithua*=$i;
$i+=1;
if ($i>8 )
{
echo ("Chi tinh den 8! <BR>");
break;
}
}
echo ("Ket qua la: ".$giaithua);
?>
</HTML>
on m trn ch cho php tnh n 8 giai tha, nu ngi dng nhp mt con s
ln hn 8 th my s hin th 8 giai tha, cn nu nh hn th vn chy tt.
c) Vng lp for.
Vng lp for, vi ngha u tin l lp vi s ln nh trc, c cu trc nh sau:
for ( $bin = gi_tr_u; $bin < (hay <=) gi_tr_kt_thc; tng_bin_m)
{
// Khi cu lnh
}
Email: Mrhaisyc@gmail.com

20

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Biu thc $bin=gi_tr_u, m bo bin c gn mt gi tr khi u (1)


Biu thc $bin< (hay <=) gi_tr_kt_thc, s xc nh xem bin t n gi
tr kt thc (tc l iu kin lp khng cn ng na) cha (2)
Biu thc tnh ton tng_bin_m m bo sau mt s ln lp no th biu
thc xc nh iu kin (2) s dn n kt qu sai ( thot khi vng lp).
V d:
for ( $i = 1; $i <10; ++$i)
{
echo ("Gi tr ca bin \$i l: ".$i);
}
Mt bin dng khc ca vng lp for, gn ging nh lnh r nhnh if v while:
for (bieu_thuc_1; bieu_thuc_2; bieu_thuc_3):
// Khi cu lnh
endfor;
V d:
<?php
for ($i=1; $i<=10;++$i)
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
endfor
?>
Bi 9: Cc cu lnh gn v r nhnh trong PHP
OK, by gi chng ta chun b lm vic vi cc cu lnh "xng sng" ca mt
ngn ng lp trnh.
Nu bn no tng hc qua mt ngn ng lp trnh no , th cc bn c th
c lt qua phn ny. Cn nu by gi bn mi bt u tip xc vi mt ngn
ng lp trnh th... hy chun b tinh thn i
Cc cu lnh trong ngn ng lp trnh
lp trnh gii mt bi ton no , chng ta phi s dng cc cu lnh sau:
1. Lnh gn: c s dng t mt gi tr vo mt bin no .
2. Lnh r nhnh: c s dng xc nh xem chng trnh s thc hin cng
vic g trong iu kin ra sao
Email: Mrhaisyc@gmail.com

21

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

3. Lnh lp: Cho php chng trnh ca bn t ng lp li cc thao tc no


Qu trnh xy dng cc bc thc hin mt bi ton no , gi l qu trnh
xy dng thut gii.
V d: Hy tng tng bn ang ... nhu
Bc 0: cha c ai say ru
Bc 1: Ku ch qun cho mt chai "cuc li" (tm thi l lnh gn)
Bc 2: Khi cn cha ht chai th nhy sang bc 3:
Bc 3: Mi thng mt chn, trm phn trm
Bc 4: Nu thng no xn, th loi n ra khi trn chin (lnh r nhnh)
Bc 5: Nu tt c u xn: tn cuc (lnh r nhnh), cn nu khng th tip tc
Bc 6: Nu ht mt chai th nhy v bc 1 (Lnh lp)
OK, n gi th chc bn hiu qua mt cht. By gi chng ta s ng dng
chng vo PHP. Phn v cc cu lnh c bn trong PHP c chia lm 2 bi l
Cc cu lnh r nhnh v cc cu lnh lp. Bi ny tp trung vo vic x l cu
lnh gn v r nhnh.
1. Lnh gn
Lnh ny c hc bi trc:
C php:
$ten_bien = gia_tri;
V d:
$ngay_sinh="1/4/1980";
$que_quan="Thanh Hoa";
$luong=300000;
2. Cc cu lnh r nhnh
Trong PHP c 2 dng r nhnh: r hai nhnh (if) v r nhiu nhnh.
Lnh r nhnh l mt trong nhng cu lnh quan trng nht ca tt c cc ngn
ng lp trnh. N cho php bn thc thi mt on m khi m iu kin ch nh l
ng.
Trong PHP, lnh r nhnh c dng sau:
if (iu kin)
{
cng vic cn lm
}
Email: Mrhaisyc@gmail.com

22

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

V d:
if ($name="Sinh")
{
echo ("Good morning, my boss");
}
Nu khi cu lnh cn lm ch bao gm duy nht mt dng lnh, ta c th b cp
d u { } :
if ($name="Sinh")
echo ("Good morning, my boss");
Nhng nu nhiu hn mt dng lnh, ta phi a chng vo cp du ngoc {}:
if ($name=="Sinh")
{
echo ("Good morning, my boss");
echo ("Have a romantic day!");
}
on lnh trn s kim tra nu iu kin bin $name = "Sinh" th n s hin th li
cho. Cn nu khng th n khng lm g c!
iu kin t vo c th l ng, c th l sai, c th l tng hp ca nhiu iu
kin. Hy xem v d sau:
if ("false" )
echo ("Khong co gi ca");
if (($name=="sinh") && ($pass=="test"))
echo ($name. " nhp ng password");
on lnh trn c th vit tng ng vi:
if ($name=="sinh")
{
if ($pass=="test")
echo ($name. " nhp ng password");
}
Nh bn thy trn, trong mt cu lnh, chng ta c th chn nhiu on lnh
khc, ngi ta gi l cu trc khi, tc l trong mt khi lnh, c th c cha
nhiu khi lnh con khc. Nu bn phi c m ngun ca ngi khc, hi vng
bn khng b hoa mt v hng chc khi lnh chen chc vo nhau nh vy.

Email: Mrhaisyc@gmail.com

23

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Chng ta c th s dng cc ton t &&, || hay xor kt ni cc iu kin vi


nhau nh bn thy trn
Cu lnh r nhnh y :
Nu iu kin kim tra tr v false (sai), PHP cho php chng ta ch nh thc thi
mt khi m lnh khc bng t kho else
V d:
if (($name=="sinh") && ($pass=="test"))
{
echo ("Good day, ".$name);
}
else
{
echo {"Sai mat khau!")
}
Ch n mt ngoi l sau: Trc t kho else khng bao gi c du chm
phy (.
Lnh r nhiu nhnh:
Vi cu lnh if, PHP cho php chng ta r nhiu nhnh thng qua t kho elseif:
if (dieu_kien1)
{
doan_lenh_1;
}
elseif (dieu_kien_2)
{
doan_lenh_2
}
elseif (dieu_kien_3)
} // bao nhiu t kho elseif cng c
else
{
doan_lenh_n
}
V d:
if ($thu==2)
{
Email: Mrhaisyc@gmail.com

24

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

echo ("Chao co, van, su, ly");


}
elseif ($thu==3)
{
echo (" Hoa, Sinh, Dia, GDCD");
}
elseif ($thu==4)
{
echo ("KTCN, Van, Toan, Tieng Anh");
}
elseif ($thu==5)
{
echo (" Hoa, Toan, Van, Tin");
}
elseif ($thu==6)
{
echo ("Toan, Van, Anh, Sinh hoat");
}
else
{
echo ("Duoc di choi");
}
Trong v d trn, chng ta lp i lp li thao tc kim tra gi tr ca bin $thu,
mc d n khng thay i qua cc dng. khc phc s di dng ny, PHP cho
php ta s dng cu lnh switch. Cu lnh ny s c s dng kim tra khi
mun xem xt qua nhiu gi tr ca mt bin:
switch ($bien){
Case gia_tri 1:
doan_lenh_1;
Case gia_tri 2:
doan_lenh_2;
Case gia_tri n:
doan_lenh_n;
default:
doan_lenh_khac;
}
V d:
switch ($thu){
case 2:
Email: Mrhaisyc@gmail.com

25

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

echo ("Chao co, van, su, ly");


case 3:
echo (" Hoa, Sinh, Dia, GDCD");
case 4:
echo ("KTCN, Van, Toan, Tieng Anh");
case 5:
echo (" Hoa, Toan, Van, Tin");
case 6:
echo ("Toan, Van, Anh, Sinh hoat");
default:
echo ("Duoc di choi");
}
Cu lnh switch s c lng gi tr ca bin $thu, v so snh n vi gi tr ca
mnh case. Khi mt gi tr hp l c tm thy, n s thc hin cu lnh tng
ng vi gi tr . Cn nu khng, n s t ng thc hin cu lnh trong mnh
default. Hy ch rng mnh defaul l tu chn (bn c th c n hoc khng
cn n)
Bi 10: Hng v bin trong PHP
1. Hng v bin
Nu cc bn cha tng hc lp trnh, chc cc bn ang cn xa l vi hng v
bin. OK, No Star where
- Ging nh trong ton hc, mt hng s xc nh mt gi tr duy nht thng qua
tn ca hng s, trong Tin hc cng vy. Mt hng s xc nh mt gi tr duy
nht trong ton b chng trnh. Ngi ta c th s dng gi tr ny thng qua tn
ca hng s trong chng trnh
- Tng t i vi bin. Mt bin trong lp trnh c s dng lu tr mt gi
tr no thng qua tn bin. S d ngi ta gi n l bin, v khng nh hng s
(gi nguyn gi tr trong ton b qu trnh chy chng trnh), ngi ta c th thay
i gi tr ca bin s thng qua cc php gn.
to iu kin d dng trong qu trnh phn tch d liu, PHP quy nh bt k t
no c du $ trc u l tn ca bin. V d:
$ten xc nh mt bin c tn l ten
$custome_name: xc nh mt bin c tn l $custome_name
Bn cn bit rng tn bin l mt chui cc k t ch bao gm cc ch s, ch ci
(a..z) v du gch di ( _ ). V PHP quy nh phn bit cc bin ch hoa v ch
thng l khc nhau. CHng hn $ab v $Ab l 2 bin hon ton khc nhau. Mt
im cn lu khc l khng c t tn bin bt u bng cc ch s (0.. 9)

Email: Mrhaisyc@gmail.com

26

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Do quy nh cc chui k t c cha du $ trc l mt tn bin, nn PHP t


ng khi gn gi tr ca cc bin ny l rng (i vi kiu d liu vn bn) hoc
0 i vi kiu d liu s. Bn s c bit n cc kiu d liu sau ny.
gn gi tr cho cc bin, bn s dng cu lnh gn nh sau:
$tn_bin = gi tr cn gn;
V d:
$nam_sinh=1980;
$ho_ten="CMXQ";
Cc bn ch n 2 v d ti nhp d liu: mt ci th nm trong cp du ngoc
kp ch th bin cha d liu theo kiu xu, cn mt ci th khng nm trong
cp du ngoc kp ch th bin cha d liu kiu s. Bn s bit chi tit hn
ngay sau y:
2. Cc kiu d liu trong PHP
PHP c 3 kiu d liu c bn: Integer, double v string. Ngoi ra cn mt s kiu
d liu khc, xy dng da trn cc kiu d liu c bn trn, nh mng,
object, m chng ta s cp n sau. Tt c cc bin u c ch nh kiu d
liu, v nh chng ta ni trn, gi tr ca chng c th b thay i trong qu
trnh s dng.
Kiu gi tr Integer s dng 4 byte ca b nh. y l kiu gi tr nguyn (khng
phi l s thc) v c gi tr nm trong khong t -2 t n 2 t. Kiu d liu
double l kiu d liu s thc, cho php cha cc s thc. Kiu String c s
dng cha cc d liu nh l cc k t vn bn, k t c bit v cc ch s.
D liu kiu string c t trong cp du ngoc kp ("") ch nh mt xu (hay
cn gi l chui k t).
V d:
2: Kiu integer;
2.0: kiu double
"2": Kiu xu
"2 gio": Kiu xu
3.nh ngha hng
Hm define() c s dng to mt hng s:
Hm ny c cu trc sau:
define ("tn_hng","gi tr ca hng");
V d:
Email: Mrhaisyc@gmail.com

27

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

define ("COMPANY","NS Co.Ltd");// nh ngha hng COMPANY vi gi tr l


"NS Co Ltd"
define ("diem_so",4.5);// nh ngha hng diem_so vi gi tr l 4.5 (hic... thi li );
Sau khi mt hng s c to ra, ta c th s dng chng thay cho gi tr ca
chng:
echo ("Tn cng ty: ".COMPANY);
iu ny tng ng vi echo ("Tn cng ty: NS Co Ltd");
4. Mt s hng xy dng sn (built in constant)
PHP c cha mt s hng c xy dng sn. TRUE v FALSE l 2 hng c
dng sn vi ch nh true (1) v false (=0 hoc mt xu rng)
Hng s PHP_VERSION ch nh phin bn ca b phn tch PHP m bn ang
dng hin ti. Hng PHP_OS ch nh h iu hnh server m trnh phn tch PHP
ang chy.
echo (PHP_OS); // in ra mn hnh "Linux" (v d)
_FILE_and_LINE_ tr v tn ca on script (on m nhng) ang c phn
tch ti dng hin thi trong on m script.
PHP cn cung cp mt s hm thng bo li nh E_ERROR, E_WARNING,
E_PARSE v E_NOTICE.
Ngoi ra, PHP cn cung cp mt s bin cung cp thng tin v mi trng PHP
ang s dng. xem cc thng tin ny,bn c th dng hm phpinfo() nh sau:
<HTML>
<!-- phpinfo.php-->
<BODY>
<?php
phpinfo();
?>
</BODY>
</HTML
5. La kiu v p kiu d liu
Nh chng ta bit, tt c cc bin PHP u c kiu d liu ring. Kiu d liu
ca bin s c t ng xc nh bi gi tr t vo bin
$a=1 // $a l kiu integer
Email: Mrhaisyc@gmail.com

28

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$a=1.2 // By gi, n l kiu double


$a="1" // V by gi n l kiu string
a) Chuyn kiu chui v la kiu d liu
Nu bn lm cc thao tc tnh ton s trn mt chui, PHP s tnh ton chui nh
l mt s. iu ny c bit n vi ci tn gi l "chuyn kiu chui (String
conversion), mc d gi tr chui ca n c th khng cn phi thay i. Trong
on v d sau, bin $str c xc nh l mt chui:
$str="756300 khng c";
Nu chng ta c cng thm mt gi tr nguyn l 3 vo bin $str, bin $str s t
ng tnh vi s nguyn 756300:
$x=4+$str;//$x =756304
Nhng bn thn gi tr ca bin $str khng thay i
echo ($str); // In ra mn hnh chui "756300 khng c"
Chuyn kiu chui phi tun theo 2 nguyn tc sau:
- Ch nhng chui bt l mt xu cc ch s. Nu chui bt u bng mt gi
tr s hp l, chui ny s c xc nh nh gi tr ca n, trong trng hp khc,
n s tr v 0. VD: chui "35 tui" s c c lng l 35, nhng chui "tui 35"
s ch xc nh gi tr 0.
- Mt chui s ch c xc nh nh l mt gi tr kiu double nu gi tr kiu
double c miu t bao gm ton b chui. Chui "3.4", "-4.2" s c c
lng nh gi tr thc 3.4 v -4.2. Nu mt k t khng phi l k t kiu s thc
c a vo chui, gi tr ca chui s c c lng nh l mt s nguyn.
Chui "3.4 dollar" s thnh s nguyn 3.
Trong vic cng vi chui chuyn kiu, PHP s thc hin "la kiu" gia 2 kiu
s. Nu bn thc hin mt php ton s hc gia kiu thc v kiu nguyn, gi tr
s l s thc
$a=1 //$ a l mt s nguyn
$b= 1.0 //$b l s thc
$c=$a+$b //$c l kiu s thc , = 2.0
$d = $c+"6th" //$d l kiu s thc = 8.0
p kiu d liu
p kiu d liu cho php bn thay i kiu d liu ca bin

Email: Mrhaisyc@gmail.com

29

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$a=11.2// $a l kiu thc


$a=(int)$a// By gi, $ a l kiu nguyn, gi tr = 11
$a= (double) $a// By gi $a li tr v kiu thc = 11.0
$b= (string)$a// $b l gi tr kiu chui ="11"
Ngoi ra, chng ta cn c php p kiu (array) v (object)
(integer) tng ng vi (int); (fload) v (real) tng ng vi (double)
6. Mt s hm tin ch khc
PHP c mt s hm h tr lm vic vi cc bin
- Hm gettype($ten_bien) xc nh kiu ca bin. N s tr v mt trong cc gi
tr: "integer", "double", "string", "array", "object", "class", "unknown type"
(Chng ta s tm hiu k hn v mng (array) v kiu i tng (object) cc bi
sau.
V d:
echo(gettype($name));
- Hm settype($ten_bien,"kieu_du_lieu") s t kiu d liu cho bin $ten_bien.
Kiu d liu c vit di dng mt chui, v c th c mt trong cc kiu sau:
"integer", "double", "string", "array", "object". Nu kiu d liu khng c t,
gi tr false s c tr v, cn nu thnh cng, n s tr v gi tr true.
VD:
$a=7.5; //$a l kiu thc
settype($a,"integer"); // by gi n l mt s nguyn c gi tr 7
- Hm isset($ten_bien) c s dng xc nh xem bin $ten_bien t mt
gi tr no hay cha. Nu bin c gi tr, hm tr v true. Trong trung
hp ngc li, hm tr v gi tr false;
- Hm unset($ten_bien) c s dng hu b bin $ten_bien, gii phng b
nh b chim dng ca bin
Bi 11: Chng trnh PHP u tin: Hello World!
I. Khi u
Nu cc bn tng hc lp trnh, chc cc bn cng bit c "Hello world!" l
ci g, cn nu bn no cha bit, th ti s gii thch ngay y:
"Hello world!" l mt chng trnh dnh cho nhng ngi mi bt u hc mt
ngn ng lp trnh no . Chng trnh ny n gin ch vit duy nht mt dng
Email: Mrhaisyc@gmail.com

30

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

ch "Hello world!" ra mn hnh. Cc bn c th b qua n nu bit t trc,


cn nu bn no cha hc, th chng ta bt tay vo vit chng trnh ny bng
PHP nh.
Hy m NotePad ra, g vo ni dung sau:
<HTML>
<BODY>
<?php
echo ("Hello world!");
?>
</BODY>
</HTML>
OK, Save li vi ci tn test.php. Copy n vo th mc gc (Root Directory) mc
nh ca Web server. Khi ng Web server Apache ln (n s hin th mt ca s
en ngm, bn c , ng tt n i, v nu tt i th tc l bn tt chng
trnh Web server Apache i ri y).
By gi m trnh duyt ra, ti a ch, g ni dung sau:
"http://127.0.0.1/test.php" (nh b hai du ngoc kp i nh)
N s hin th ra ca s trnh duyt vi duy nht dng ch Hello world!
Chc bn tht vng lm h? Vng, n ch c mi dng ch "Hello world!" trn
mn hnh trnh duyt, m bn c th lm n n gin hn rt nhiu, chng cn n
ci PHP kia. OK. ng tht vng vi.
Chng trnh ny hot ng nh th no? Trc tin chng ta hy tm hiu cch
thc hot ng ca h trnh duyt (Web Client) v my ch cung cp dch v Web
(Web server ) nh:
Bc 1: Trnh duyt gi mt yu cu HTTP n my ch, yu cu mt file no
Bc 2: My ch s chuyn yu cu ny n chng trnh x l tng ng, chnh
l chng trnh Web server.
Bc 3: Web server phn tch chui yu cu nhn c, kim tra xem trnh duyt
my khch yu cu g. Nu l cc file bnh thng (khng phi l cc file
cha cc on m script thc thi pha my ch), n s tm kim file v tr v
cho trnh duyt my khch. Cn nu l cc file cha cc on m script thc
thi pha my ch (cc chng trnh CGI, hay cc file th vin lin kt ng ISAPI,
hoc cc file *.asp hay *.php), n s triu gi chng trnh thc thi cc on m
ny. Chng trnh ny s chu trch nhim chy cc on m, tr chng v cho
Email: Mrhaisyc@gmail.com

31

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Web server di khun dng ca HTML. Sau , Web server mi tr kt qu ly


c cho trnh duyt.
Nh vy, chng trnh ca bn phi c thc thi trn my ch, sau mi c
tr v cho trnh duyt. V y chnh l ci gi l "Trang Web ng". Khng nh
cc trang web tnh, trang web ng cho php bn c s tng tc vi my ch
thng qua cc on script thc thi pha server. Nh c s tng tc ny, bn c th
truy xut c s d liu, ly thng tin ngi s dng, iu khin cc hot ng
khc...
OK. By gi chc bn c c cht t kin thc vi cc h thng iu khin
Web Client - Server ri. n lt chng ta bt u phn tch chng trnh u tin
kia.
II. Phn tch chng trnh
Quay tr v on m trn.
iu u tin cc bn cn phi bit, l cc on m thc thi PHP lun lun
c t trong th <?php .... ?>. Chng trnh x l pha my ch s ch thc thi
cc on m nm trong th ny. Tt c cc on m khc nm ngoi th trn u
khng c x l trc tip trn server m c a v trnh duyt.
<?php
// on m PHP t y
?>
iu th 2 bn cn bit l chng trnh ca bn phi c t trong cc file *.php.
Nu bn t n vo file khc, th ng mong n chy nh, v nguyn tc ca
chng trnh Web server l ch triu gi cc chng trnh x l tng ng vi cc
file c ui xc nh trc.
iu th 3 bn cn bit l trong file *.php ca bn, ngoi cc on script PHP, bn
c th t bt k ci g theo khun dng HTML, k c cc on JavaScript chy
trn my khch. Tc l ngoi tr cc on script PHP ra th n khng khc g mt
file HTML thng thng
iu th 4 cc bn cn bit, l chng ta c th t nhiu on m x l PHP khc
nhau trong cng mt file PHP. Cc on m PHP ny s c thc thi ln lt t
u file xung di. Hy xem v d sau:
<HTML>
<BODY>
<?php

Email: Mrhaisyc@gmail.com

32

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

echo ("Hello world!");


?>
<BR>
Xin chao tat ca cac ban, day la chuong trinh PHP dau tien cua toi
<?php
echo ("<p align=right> CMXQ </p>")
?>
</BODY>
</HTML>
Khi u, chng trnh x l pha Web server s phn tch file PHP ny, tr v
on m
<HTML>
<BODY>
Tip theo, khi thy on m th nht, n s thc thi v tr v dng "hello, world"
(Dng ny do hm echo() ca PHP thc hin). Sau , n tip tc tr v cc dng
<BR>
Xin chao tat ca cac ban, day la chuong trinh PHP dau tien cua toi
n khi gp on PHP th 2, n s thc thc thi on m th 2 ny (gi hm
echo()) v tr v kt qu:
"<p align=right> CMXQ </p>"
Ht on m th 2. N s gi tip phn cn li ca file v cho Web server. Sau ,
Web server chnh thc tr ton b kt qu v cho trnh duyt.
iu quan trng cui cng: Kt thc mi cu lnh ca PHP u l mt du chm
phy (";"), ngoi tr mt vi trng hp (cc bn s c bit sau ny)
By gi ti xin gii thch cch s dng hm duy nht trong bi ny: echo()
Hm echo c s dng tr v ni dung ca cc bin, hng, chui... cho trnh
duyt. v d trn, hm echo tr v chui "hello, world" v chui "<p
align=right> Le Nguyen Sinh </p>". Cc th HTML trong chui s c gi
nguyn khi n c a v trnh duyt, v n s c x l nh cc th HTML
khc.
III. Mt s lu

Email: Mrhaisyc@gmail.com

33

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Du ch thch:
Cc on ch thch rt hu dng trong cc chng trnh ca bn (chng hn mun
ch thch cu lnh ny lm g, on chng trnh ny lm g...). Khi phn tch m
PHP, cc on ch thch s b b qua, nhng mt lp trnh vin th khng bao gi
b qua chng
Chng ta c th s dng mt s du ch thch sau trong PHP:
// dng vn bn ch thch (ch p dng trn mt dng)
/* on vn bn ch thch */ (nm trong cp /* v */
Lu rng cc du ch thch ny ch c hiu lc trong cc on m nhng PHP
thi y nh
V d
<?php
echo("Ti l mt oan hn v danh"); // Hin th li gii thiu ln mn hnh
echo (" S yu l lch");
/* Hin th bn s yu l lch
Copyright by CMXQ
*/
echo ("Tn y : XXXXXXX");
echo ("Ngy sinh: XXXX");
?>
K t gii phng
Hy ch n dng ch sau:
My name's "CMXQ"
in n ra mn hnh, chc cc bn s lm nh sau:
<?php
echo("My name's ""CMXQ"");
?>
Rt tic l bn nhm. PHP c quy nh mt s k t c bit (Du ngoc kp
(") l mt trong cc k t ). Mt vi phin bn ca web server khi gp li ny
khng thc hin na, v thng bo li n ngi dng. Cn trong mt vi phin
bn khc, n s t ng chn mt du st cho (/) trc k t gy li ny. Mt
du gch cho (\) trc k t gy li khin cho n c i x nh l mt k t
thng thng, khng phi l k t c bit. K t ny (\) c gi l k t gii
phng (Escaping character).
Email: Mrhaisyc@gmail.com

34

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

on m ng nh sau:
<?php
echo ("My name's: \"CMXQ\"");
?>
Di y l mt s cc k t c bit m c th c ch r vi k t gii phng
gch cho
K t ni tip Ngha
\' Du mc lng (')
\" Du mc kp (")
\\ Du gch cho (\)
\$ Du $
\n K t to dng mi
\r K t v u dng
\t K t Tab
Hy xem v d di y (yu cu bn t tm hiu v phn tch m ngun)
<?php
$name="Tin Tng";
echo("Gi tr ca bin \$name l $name);
?>
Bi 12: Vit chng trnh PHP u tin: "Hello world!"
M notepad ra,coppy v pase on m ny vo:
{geshibot lang="php" head="helloworld.php"}<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Study</title>
</head>
<body>
<?
echo 'Hello world!';
?>
</body>
</html>{/geshibot}
lu li thnh file Hello_world.php,a vo WWW folder, ca mnh l:
D:\VertrigoServ\www
Chy link http://localhost/Hello_world.php
O K ! K t qu :
{geshibot}Hello world!{/geshibot}

Email: Mrhaisyc@gmail.com

35

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Phn PHP Nng Cao

Bi 1 : Video
Bi 2: Vit ng dng m s ngi online bng PHP
Trong bi ny, chng ta s ni v cch thc xy dng tnh nng thng k s ngi
ang ving thm website ca bn. V l chc nng nh, nn ti khng i nhiu v
nhng tnh nng ln nh bao nhiu khch, bao nhiu thnh vin,...Ch n thun l
qu trnh hin th hin ti c bao nhiu ngi ang thm ving website ca bn.
Trc ht, chng ta khi to c s d liu nh sau:
{geshibot lang="php" head=""}mysql> create table useronline(tgtmp INT(15)
DEFAULT "0" NOT NULL ,
ip VARCHAR(50) NOT NULL ,
local VARCHAR(100) NOT NULL,
PRIMARY KEY(tgtmp),
KEY ip(ip),
KEY local(local));{/geshibot}
tgtmp l thi gian m h truy cp c tnh khi h truy vo trang web .
IP l dy s lu thng tin IP ca h khi ving thm website ca chng ta.
local l ni lu ng dn m h ang truy cp.
Khi ngi dng truy cp vo trang web, chng ta s tin hnh insert thng tin ca
h vo c s d liu vi cc tham s c bn nhng trong database.
tgtmp c tnh ra bng hm time(). Hm ny s ly ra thi gian hin ti ca
ngi truy cp. Tip tc ta li tnh thi gian mi ca h, c tnh bng vic quy
c thi gian quy nh. C th y ti cho l 900 giy tng ng vi 15 pht
truy cp ca h.
{geshibot lang="php" head=""}<?php
$tg=time();
$tgout=900;
$tgnew=$tg - $tgout;
?>{/geshibot}
nh vy nu thi gian lu trong database m nh hn thi gian new ny th chng
ta c th hiu rng v khch y ri khi website ca chng ta. C th hn.
V d: ti ving thm website l 7h.
nh vy h thng s ghi thng tin lc l 7h.
Nu sau 1 thi gian ti khng lm g, hoc ti khng truy cp website na th
h thng s khng ghi nhn thng tin mi. Nh th nu by gi 8h v tr i 15
pht ti quy c, r rng l thi gian mi hin ti l 7h45, Thi gian ny vn ln
hn thi im lu thng tin 7h (7h45 > 7h). Do vy, nu chng tha iu kin
th chng ta ch vic xa i cc record trong c s d liu l xong.
Vy ta c code kt ni CSDL nh sau:
{geshibot lang="php" head=""}<?php
$conn=mysql_connect("localhost","root","root") or die("can't connect");

Email: Mrhaisyc@gmail.com

36

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

mysql_select_db("online",$conn);
?>{/geshibot}
Sau ta tin hnh ghi nhn thng tin ngi dng vo CSDL.
{geshibot lang="php" head=""}<?php
$sql="insert into useronline(tgtmp,ip,local)
values('$tg','$REMOTE_ADDR','$PHP_SELF')";
$query=mysql_query($sql);
?>{/geshibot}
$REMOTE_ADDR l bin mi trng dng ly ra IP ca ngi truy cp.
$PHP_SELF l bin mi trng dng ly ra ng dn m ngi dng ang
truy cp.
Tip n ta tin hnh xa record khi thi gian thc ln hn thi gian trong c s
d liu.
{geshibot lang="php" head=""}<?php
$sql="delete from useronline where tgtmp < $tgnew";
$query=mysql_query($sql);
?>{/geshibot}
Tip tc l cng vic hin th thng tin ra bn ngoi bng cch lit k cc record
c trong database.
{geshibot lang="php" head=""}<?php
$sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'";
$query=mysql_query($sql);
$user = mysql_num_rows($query);
?>{/geshibot}
DISTINCT l c php cho php lit k cc dng record m khng cho php chng
c d liu trng lp nh c php select bnh thng.
Vy chng ta s lit k tt c nhng ip ca nhng ai ang truy cp trn trang
useronline.php.
Phn vic cui cng cn li l chng ta s xut thng tin y ra trnh duyt.
V sau y l ton b ni dung code ca trang useronline.php
{geshibot lang="php" head=""}<?php
$tg=time();
$tgout=900;
$tgnew=$tg - $tgout;
$conn=mysql_connect("localhost","root","root") or die("can't connect");
mysql_select_db("online",$conn);
$sql="insert into useronline(tgtmp,ip,local)
values('$tg','$REMOTE_ADDR','$PHP_SELF')";
$query=mysql_query($sql);
$sql="delete from useronline where tgtmp < $tgnew";
$query=mysql_query($sql);
$sql="SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'";
$query=mysql_query($sql);
Email: Mrhaisyc@gmail.com

37

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$user = mysql_num_rows($query);
echo "user online :$user";
?>{/geshibot}
Bi 3: PHP 5.3, Phn 3: Khng gian tn
PHP V5.3 c ln lch pht hnh sm. Lot bi "C g mi trong PHP V5.3"
ny bao hm cc tnh nng mi v th v trong bn pht hnh ny. Phn 1 ca lot
bi xem xt cc thay i cho lp trnh hng i tng v x l i tng trong
PHP 5.3. Phn 2 xem xt cc hm lambda v cc bao ng. Trong Phn 3 di
y, chng ta xem xt cc khng gian tn (namespaces), l mt trong cc tnh
nng c on trc nhiu nht v gy tranh ci nht trong bn pht hnh ny
ca PHP. Khi nim v khng gian tn m bo cch tr gip trnh cc vn v
nhiu hm, lp, v cc hng ca cng tn c nh ngha nhiu ln.
Khng gian tn tn ti trong nhiu ngn ng, gm ngn ng lp trnh C++ v
Java. Chng xut hin gip vi vic t chc cc c s m ln, ni thng
c mt mi lo ngi v chng cho hm hoc cc tn lp vi ng dng v cc vn
m c vic xy ra. Vic s dng cc khng gian tn c th gip nhn ra hm
hoc cng c no m m cung cp, hoc thm ch gip xc nh ngun gc ca
n. Mt v d v iu ny l khng gian tn H thng trong C#, c cha tt c cc
hm v lp c .NET framework cung cp.
Trong cc ngn ng khc khng c cc khng gian tn chnh thc (chng hn nh
cc bn PHP V5.2 v trc ), nhng ngi thng s bt chc cc khng gian
tn bng cch c gng s dng mt quy c t tn ring trong cc tn lp hoc
tn hm. Zend Framework thc hin vic ny, mi tn lp bt u bng Zend, v
mi khng gian tn con (child namespace) c tch ring bng mt nt gch di
(underscore). V d, nh ngha lp Zend_Db_Table l mt lp, b phn ca Zend
Framework v c chc nng c s d liu. Mt vn vi cch tip cn ny l
ch m kt qu c th tr nn di dng (verbose), nht l khi lp hoc hm su
vi lp (Zend_Cache_Backend_Apc l mt v d v vic ny t Zend
Framework). Mt vn na l ton b m phi ph hp vi kiu ny, c th kh
khn nu bn ang tch hp m ca bn th ba trong mt ng dng m khng ph
hp vi quy c t tn ny.
Lch s ca khng gian tn trong PHP l kh vng vo. Lc u chng nh dng
lm mt b phn ca PHP V5, nhng chng b loi b trong cc giai on pht
trin do vic thc hin ng cch l khng thnh cng. Cui cng chng sng li
nh mt b phn ca PHP V6, sau chuyn sang PHP V5.3 sau khi quyt nh
chuyn tt c cc tng cng khng theo unicode vo bn PHP V5.x khc, pht
hnh vo nm 2007. Trong khi phn ln trng thi ca cc khng gian tn l
khng i do thit k c o, vn v vic ton t no s s dng l vn ln
nht, vi cc gc nhn tri chiu v vic n s l g t tt c cc thnh vin ca
cng ng. Mt quyt nh cui cng s dng du gch cho ngc (\) lm

Email: Mrhaisyc@gmail.com

38

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

ton t a ra vo thng 10/2008, gii quyt c tt c cc vn m vic s


dng cc ton t khc, trnh by v thit k ngn ng v tnh kh dng.
Cc khng gian tn trong PHP
Mn nhiu c php v thit k v tn khng gian t cc ngn ng khc nht l
C++. Tuy nhin, n x l tn khng gian kh c o trong mt s tnh hung, m
c th l mt vt cn i vi nhng ngi s dng ang mong i cc tn khng
gian lm vic ging ht nh cc ngn ng khc. Trong phn ny, chng ta s
xem cch cc khng gian tn lm vic trong PHP.
nh ngha mt khng gian tn
Vic xc nh mt khng gian tn mi l kh bnh thng. lm nh vy, thm
vo dng sau y trong Lit k 1 lm lnh u tin hoc u ra trong mt tp.
Lit k 1. nh ngha mt khng gian tn
<?php
namespace Foo;
class Example {}
?>
iu quan trng l phi hiu rng vic m t trn y v namespace phi l lnh
u tin hoc hoc u ra trong mt tp. Lm bt k vic no trc vic ny s
gy ra mt li nghim trng (fatal error). Lit k 2 cho thy mt s v d v vic
ny.
Lit k 2. Cc cch khng tt khi nh ngha mt khng gian tn
/* File1.php */
<?php
echo "hello world!";
namespace Bad;
class NotGood {}
?>
/* File2.php */
<?php
namespace Bad;
class NotGood {}
?>
Trong phn u ca Lit k 2, chng ta c gng phn hi li bn iu khin
trc khi nh ngha khng gian tn, gy nn li nghim trng. Trong phn th hai
ca Lit k, chng ta thm vo mt khng gian ph tri trc th m <?php
cng gy ra mt li nghim trng. iu quan trng l phi xem i vi tnh
Email: Mrhaisyc@gmail.com

39

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

trng ny khi chng ta vit m ca chng ta v l mt s sut thng thng khi


lm vic vi cc khng gian tn trong PHP.
Tuy nhin, c hai v d trn u c th c vit li bng cch tch ring nh
ngha khng gian tn vi m, l mt b phn m t khng gian tn vo mt tp
ring ca n, m c th c gp vo trong cc tp ban u. Lit k 3 trnh by
vic ny.
Lit k 3. Sa cha cc cch khng tt khi nh ngha khng gian tn
/* Good.php */
<?php
namespace Good;
class IsGood() {}
?>
/* File1.php */
<?php
echo "hello world!";
include './good.php';
?>
/* File2.php */
<?php
include './good.php';
?>
By gi chng ta nhn thy cch nh ngha mt khng gian tn i vi m
trong mt tp, chng ta hy xem cch vn dng m c khng gian tn ny trong
mt ng dng.
S dng m khng gian tn
C cc tu chn khc nhau gi ra mt hm, lp, hoc hng s c khng gian
tn. C mt cch l tham chiu tng minh khng gian tn nh l mt tip u
ng i vi li gi. Mt tu chn khc l nh ngha mt b danh cho khng gian
tn v thm b danh vo u li gi, n c thit k lm cho tin t khng
gian tn ngn hn. V cui cng, chng ta c th ch cn s dng khng gian tn
trong phm vi m ca chng ta, lm cho n tr thnh khng gian tn mc nh v,
theo mc nh, lm cho tt c cc li gi tham chiu n n. Lit k 4 minh ho s
khc nhau gia cc li gi.
Lit k 4. Gi mt hm trong mt khng gian tn
/* Foo.php */
<?php
namespace Foo;
Email: Mrhaisyc@gmail.com

40

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

function bar()
{
echo "calling bar....";
}
?>
/* File1.php */
<?php
include './Foo.php';
Foo/bar(); // outputs "calling bar....";
?>
/* File2.php */
<?php
include './Foo.php';
use Foo as ns;
ns/bar(); // outputs "calling bar....";
?>
/* File3.php */
<?php
include './Foo.php';
use Foo;
bar(); // outputs "calling bar....";
?>
Lit k 4 trnh by cc cch khc nhau gi ra mt hm bar() trong khng gian
tn Foo. Trong tp File1.php, chng ta trng thy cch lm tng minh li gi,
mo u cho li gi vi tn ca khng gian tn. Tp File2.php s dng mt b
danh cho tn ca khng gian tn, nn chng ta thay tn ca khng gian tn bng b
danh . Cui cng, File3.php ch cn s dng khng gian tn, n cho php chng
ta thc hin li gi n bar() m khng c bt k tin t no.
Chng ta cng c th nh ngha nhiu hn mt khng gian tn trong mt tp bng
cch thm vo cc li gi namespace na trong tp. Lit k 5 minh ho vic ny.
Lit k 5. Nhiu khng gian tn trong mt tp
<?php
namespace Foo;
class Test {}
namespace Bar;
class Test {}
Email: Mrhaisyc@gmail.com

41

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$a = new Foo\Test;
$b = new Bar\Test;
var_dump($a, $b);
Output:
object(Foo\Test)#1 (0) {
}
object(Bar\Test)#2 (0) {
}
By gi chng ta c cc c s v cch thc hin mt li gi bn trong mt
khng gian tn, chng ta hy xem xt mt s tnh hung phc tp hn v cch cc
li gi lm vic.
Gii php v khng gian tn
Mt trong nhng kh khn i vi cc khng gian tn l tm hiu cch m gii
php v phm vi lm vic. Trong khi cc trng hp n gin nh trong Lit k 4
l c th hiu c, vn xut hin khi chng ta bt u lng cc khng gian tn
vo ln nhau, hoc khi chng ta trong mt khng gian tn v ang gi n
vng ton cc. PHP V5.3 c cc nguyn tc v vic gii quyt cc vn ny mt
cch t ng theo mt cch c hiu bit.
Chng ta hy to ra mt s tp gp, tp no cng c hm hello() c nh ngha
trong n.
Lit k 6. Hm hello() c nh ngha trong cc khng gian tn khc nhau
/* global.php */
<?php
function hello()
{
echo 'hello from the global scope!';
}
?>
/* Foo.php */
<?php
namespace Foo;
function hello()
{
echo 'hello from the Foo namespace!';
}
?>
Email: Mrhaisyc@gmail.com

42

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

/* Foo_Bar.php */
<?php
namespace Foo/Bar;
function hello()
{
echo 'hello from the Foo/Bar namespace!';
}
?>
Lit k 6 xc nh hm hello() ba ln trong ba phm vi khc nhau: trong phm vi
ton cc, trong khng gian tn Foo, v trong khng gian tn Foo/Bar. Tu thuc
vo phm vi trong li gi hm hello() c thc hin, quyt nh c hm
hello() no c gi ra. Mt v d v cch cc li gi ny s trng nh trnh by
di y. y, chng ta s s dng khng gian tn Foo thy cch gi hm
hello() nh th no trong cc khng gian tn khc.
Lit k 7. Gi ra tt c cc hm hello() t khng gian tn Foo
<?php
include './global.php';
include './Foo.php';
include './Foo_Bar.php';
use Foo;
hello();
// outputs 'hello from the Foo namespace!'
Bar\hello(); // outputs 'hello from the Foo/Bar namespace!'
\hello();
// outputs 'hello from the global scope!'
?>
Chng ta thy c th rt ngn tin t khng gian tn khi tham chiu mt khng
gian tn con trong khng gian tn hin ti (li gi Foo/Bar/hello() c th c rt
ngn thnh Bar/hello()). V chng ta trng thy cch quy nh m chng ta mun
gi ra phng thc trong phm vi ton b bng cch ch cn mo u li gi
vi ton t khng gian tn.
By gi chng ta c c ch v cch cc khng gian tn lm vic, hy quan st
vic chng ta c th s dng chng trong m ca mnh.
Cc ca s dng i vi cc khng gian tn trong PHP
Mc ch tng th i vi cc khng gian tn l gip chng ta t chc tt hn
m ca chng ta bng cch loi b khi lng cc nh ngha nm trong phm vi
ton cc. Trong phn ny, chng ta s xem xt mt vi th d c cc khng gian
tn c th gip t c cc mc tiu ny vi s c gng nh nht.
Email: Mrhaisyc@gmail.com

43

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lp khng gian tn ca m bn th ba
Nhiu ng dng PHP s dng m t cc ngun khc nhau, d n l m c thit
k ph hp vi nhau nh m hin hnh trong kho cha PEAR, m t cc khung
lm vic khc nhau nh CakePHP hay Zend Framework, hay l m khc pht hin
ra t cc a ch khc nhau trn Internet. Mt trong nhng vn ln nht khi kt
hp m ny l n khng th ho trn tt vi m hin ti; tn cc hm hoc lp c
th xung t vi ci m chng ta ang s dng t trc trong ng dng ca chng
ta.
Mt th d v vic ny l gi PEAR Date. N s dng tn lp l Date, l mt
tn lp kh chung chung v rt c th ang tn ti u ti cc a im khc
trong m ca chng ta. Nh vy c mt cch tt khc phc vn ny l thm
mt lnh khng gian tn n gin vo u ca tp Date.php trong gi . By gi
chng ta c th c ring bit khi chng ta mun s dng lp PEAR Date thay
cho lp ca ring chng ta.
Lit k 8. S dng lp PEAR Date nh nh ngha trong mt khng gian
tn
<?php
require_once('PEAR/Date.php');
use PEAR\Date;
PEAR/Date.php

// the name of the namespace we've specified in

// since the current namespace is PEAR\Date, we don't need to prefix the


namespace name
$now = new Date();
echo $now->getDate(); // outputs the ISO formatted date
// this example shows the full namespace specified as part of the class name
$now = new PEAR\Date\Date();
echo $now->getDate(); // outputs the ISO formatted date
?>
Chng ta nh ngha lp PEAR Date bn trong khng gian tn PEAR/Date
trong tp PEAR/Date.php, nh vy mi iu chng ta cn lm l gp m vo
tp ca chng ta v s dng khng gian tn mi, hoc t tn ca khng gian tn
vo pha trc tn lp hoc hm . Vi cch ny, chng ta c th gp b m ca
bn th ba vo ng dng ca chng ta mt cch an ton.
S xung t v tn khng ch l vn vi m ca bn th ba. N cng c th
hin hu vi cc c s m ln, trong c cc b phn khng bao gi mong i
n c gn nhau. Trong phn k tip, chng ta s xem cch cc khng gian tn
c th n gin ha tnh trng ny nh th no.
Email: Mrhaisyc@gmail.com

44

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Trnh xung t v tn hm tin ch


ng dng PHP no cng c mt s phng thc tin ch. Chng thc ra khng
phi l mt b phn ca bt k i tng no trong ng dng, v chng khng
thc s b mt quyn kim sot trong bt k ni no trong ng dng, mc d
chng u ng mt vai tr no cho ng dng ni chung. Tuy nhin chng c
th gy ra cc rc ri v vic bo tr khi ng dng ca chng ta pht trin ln.
Mt ni m vic ny c th tr thnh vn l kim th m-un (unit testing), ni
m chng ta vit ra m th nghim m ang chy mt ng dng. Phn ln cc
b kim th m-un (unit-testing suites) c thit k chy tng th nghim
mt trong ton b b kim th. V d, chng ta c th c hai tp tin ch m s
khng bao gi gp vo vi nhau, nhng trong b kim th, chng li gp vo
nhau, do chng ta ang kim th ton b ng dng cng mt lc. Trong khi vic
thit k mt ng dng bng cch nh vy khng bao gi l mt tng tt i vi
vic bo tr di hn, thng vn tn ti trong cc c s m k tha ln.
Lit k 9 cho bit cch trnh iu ny. Chng ta c hai tp, utils_left.php v
utils_right.php, l cc tp hp ca cc hm tin ch cho nhng ngi s dng
thun tay tri v tay phi. i vi cc tp, chng ta nh ngha tng tp trong
khng gian tn ca chnh n.
Lit k 9. utils_left.php v utils_right.php
/* utils_left.php */
<?php
namespace Utils\Left;
function whichHand()
{
echo "I'm using my left hand!";
}
?>
/* utils_right.php */
<?php
namespace Utils\Right;
function whichHand()
{
echo "I'm using my right hand!";
}
?>

Email: Mrhaisyc@gmail.com

45

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Chng ta nh ngha mt hm whichHand() m a ra kt qu l chng ta ang s


dng tay no. Trong lit k 10, chng ta thy n tht d dng khi gp vo mt cch
an ton c hai tp v thay i gia hai khng gian tn m chng ta mun gi.
Lit k 10. V d v vic s dng cng nhau cc tp utils_left.php v
utils_right.php
<?php
include('./utils_left.php');
include('./utils_right.php');
Utils\Left\whichHand(); // outputs "I'm using my left hand!"
Utils\Right\whichHand(); // outputs "I'm using my right hand!"
use Utils\Left;
whichHand();

// outputs "I'm using my left hand!"

use Utils\Right;
whichHand();

// outputs "I'm using my right hand!"

By gi c hai tp u c th c gp vo nhau mt cch an ton, v chng ta


quy nh khng gian tn no s dng x l li gi hm ca chng ta. V s nh
hng ln b m hin thi ca chng ta l nh nht, do s t chc ci tin li
h tr vic ny ch yu cu chng ta b sung lnh use vo u tp nhm cho bit
dng khng gian tn no.
Cng vi tng nh vy c th c m rng ra ngoi b m PHP nh ngha
ca chng ta. Trong phn tip theo, chng ta s thy cch ghi ln cc hm trong
(internal function) trong mt khng gian tn.
Ghi ln cc tn hm trong
Trong khi cc hm trong trong PHP thng cung cp tin ch to ln, c khi chng
khng thc hin chnh xc ci m chng ta mun chng thc hin. Chng ta c th
cn phi gia tng hnh vi ca chng xng ng vi ci m chng ta mun hm
thc hin, nhng chng ta cng mun xc nh li hm bng mt tn na
nhm trnh lm ln xn phm vi .
Cc hm h thng tp (filesystem functions) l mt khu vc m chng ta c th
mun thc hin vic ny. Hy ni rng chng ta mun chc chn rng bt k tp
no c to ra bng file_put_contents() c tp giy php no . Chng hn nh
hy ni rng chng ta mun cc tp c to ra bng ci ny c thuc tnh ch c;
chng ta c th xc nh li hm trong mt khng gian tn mi nh di y.
Lit k 11. nh ngha file_put_contents() bn trong mt khng gian tn
<?php
namespace Foo;
Email: Mrhaisyc@gmail.com

46

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

function file_put_contents( $filename, $data, $flags = 0, $context = null )


{
$return = \file_put_contents( $filename, $data, $flags, $context );
chmod($filename, 0444);
return $return;
}
?>
Chng ta gi ra hm trong file_put_contents() v t vo pha trc tn ca khng
gian tn vi mt du cho ngc cho bit rng n phi c x l trong phm
vi ton cc, ngha l hm trong s c gi. Sau khi gi ra hm trong, th chng ta
chmod() tp thit lp giy php thch hp.
y ch l mt vi th d v cc cch chng ta c th s dng cc khng gian tn
nng cao b m ca chng ta. Trong mi trng hp, chng ta trnh sa i ti,
chng hn nh t vo pha trc tn ca hm hoc lp lm cho chng tr
thnh duy nht. Chng ta by gi cng bit vic s dng cc khng gian tn c th
lm cho n an ton hn nhiu nh th no gp vo b m ca bn th ba trong
cc ng dng ln, m khng phi lo lng g i vi cc xung t v tn.
Tm tt
Cc khng gian tn trong PHP V5.3 l mt s b sung vo ngn ng c cho
n, gip cc nh pht trin t chc b m trong mt ng dng vi mt cch c
hiu bit. Chng cho php bn trnh c vic s dng cc tiu chun t tn
x l vic lp ra cc khng gian tn, cho php bn vit m hiu qu hn nhiu.
Trong khi xut hin t lu, cc khng gian tn l mt s b sung c cho n
i vi bt k ng dng PHP quy m no gp phi cc xung t v tn.
Bi 4: PHP 5.3, Phn 2: Bao ng v cc hm lambda
Lit k 1. Mt i tng JavaScript c xy dng nn bng cch s dng
cc bao ng
var Example = function()
{
this.public = function()
{
return "This is a public method";
};
var private = function()
{
Email: Mrhaisyc@gmail.com

47

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

};

};

return "This is a private method";

Example.public() // returns "This is a public method"


Example.private() // error - doesn't work
Nh chng ta xem trong Lit k 1, cc hm thnh vin ca i tng Example
c nh ngha nh cc bao ng. Do phng thc ring b hp trong mt bin
cc b (tri vi phng thc chung gn vi i tng Example bng cch s dng
t kho ny), n khng th hin i vi th gii bn ngoi.
By gi chng ta thy mt vi quan im lch s v ni xut x khi nim ny,
hy quan st cc hm lambda trong PHP. Khi nim v cc hm lambda l c s
cho cc bao ng v cung cp cch ci tin hn nhiu to ra cc hm khi thc
hin, tri vi hm create_function() c sn t trc trong PHP.
Cc hm lambda
Cc hm lambda (hay hm n danh nh chng thng dn) ch n gin l cc
hm s dng mt ln, c th c nh ngha vo bt c lc no, v thng gn
vi mt bin. Cc hm t chng ch tn ti trong phm vi ca bin m chng c
nh ngha, v vy khi bin vt ra ngoi phm vi, th hm ny cng khng cn.
Quan nim v cc hm lambda c t cng trnh ton hc trc nhng nm 1930.
c hiu nh l mt php tnh lambda, n c thit k kim tra nh ngha
v ng dng hm, cng nh l khi nim v php quy. Sn phm t php tnh
lambda c s dng pht trin cc ngn ng lp trnh hm, nh Lisp v
Scheme.
Cc hm lambda rt tin dng cho mt s c th, ng ch nht i vi nhiu
hm PHP m chp nhn mt hm gi li (callback function). Mt hm nh vy l
array_map(), n cho php chng ta i qua mt mng v p dng mt hm gi cho
tng yu t ca mng. Trong cc bn trc ca PHP, vn ln nht vi cc hm
ny l ch khng c mt cch sng sa no xc nh hm gi li; chng ta
b tc ch nhn mt trong ba cch tip cn vn sn c:
1.
Chng ta c th nh ngha hm gi li mt ni no trong m chng
ta bit n l sn c. Vic ny l ti do n chuyn mt phn thc hin cuc gi
ni khc, m li kh bt tin cho vic c v bo tr, c bit l nu chng ta
khng nh s dng hm ny mt ni khc.
2.
Chng ta c th nh ngha hm gi trong cng mt khi m, nhng phi c
tn. Trong khi vic ny gip gi cc th vi nhau, chng ta cn phi thm mt
khi if quanh nh ngha trnh xung t vng tn. Lit k 2 l mt v d v cch
tip cn ny.
Lit k 2. nh ngha mt cuc gi li c tn trong cng mt khi m
function quoteWords()
Email: Mrhaisyc@gmail.com

48

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

if (!function_exists ('quoteWordsHelper')) {
function quoteWordsHelper($string) {
return preg_replace('/(\w)/','"$1"',$string);
}
}
return array_map('quoteWordsHelper', $text);

}
3.
4.
Chng ta c th s dng create_function(), l mt b phn ca PHP t bn
V4, to ra hm khi chy. V mt chc nng, cho php thc hin iu chng ta
mun, nhng n c mt vi nhc im. Nhc im chnh l n c bin dch
lc ang chy so vi thi gian bin dch, iu m s khng cho php cc b nh
nhanh cha m thao tc (opcode cache) n hm . y l c php kh ti, v vic
lm ni bt chui hin nay trong phn ln cc IDE ch n gin l khng lm vic.
Mc d cc hm m chp nhn cc hm gi li l mnh m, khng c cch tt no
thc hin mt hm gi one-off (hm c lm hoc xy ra ch mt ln) m
khng dng n vic thiu ng hong. Vi PHP V5.3, chng ta c th s dng
cc hm lambda lp li v d trn bng mt cch trong sng hn.
Lit k 3. quoteWords() s dng mt hm lambda cho cuc gi li
function quoteWords()
{
return array_map('quoteWordsHelper',
function ($string) {
return preg_replace('/(\w)/','"$1"',$string);
} );
}
Chng ta thy c php trong sng cho php nh ngha cc hm ny, c th c
ti u ha v hiu nng bng cc b nh m thao tc. Chng ta cng tng
cng tnh d c v tng thch c ci thin vi vic lm ni bt chui.
Hy xy dng nn ci ny tm hiu v cch s dng cc bao ng trong PHP.
Cc bao ng
Cc hm lambda t chng khng thm nhiu th m chng ta trc y khng th
lm. Nh thy, chng ta c th lm ton b vic ny bng cch s dng
create_function(), mc d vi c php ti hn v hiu nng thp hn l tng. Tuy
nhin chng vn l cc hm ch dng mt ln v khng bo tr bt c loi trng
thi m hn ch ta c th lm vi chng. y l ni cc bao ng bc vo v ly
cc hm lambda cho mc tip theo.
Bao ng l mt hm m c nh gi v chnh mi trng ca n, n c mt
hoc nhiu bin buc (bound variables) m c th truy cp khi gi hm. Chng
n t gii lp trnh hm, ni c mt s khi nim. Bao ng ging nh cc hm
Email: Mrhaisyc@gmail.com

49

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

lambda, nhng linh li hn v kh nng tng tc vi cc bin t ngoi mi


trng xc nh bao ng.
Chng ta hy quan st cch nh ngha mt bao ng trong PHP. Lit k 4 cho mt
v d v mt bao ng cho php nhp mt bin t mi trng bn ngoi v chi
n gin hin chng ln mn hnh.
Lit k 4. V d bao ng n gin
$string = "Hello World!";
$closure = function() use ($string) { echo $string; };
$closure();
Output:
Hello World!
Cc bin c nhp t mi trng bn ngoi c quy nh trong mnh use
ca nh ngha hm bao ng. Theo mc nh, chng c chuyn theo gi tr,
ngha l nu chng ta cp nht gi tr chuyn trong nh ngha hm bao ng,
n s khng cp nht gi tr bn ngoi. Tuy nhin chng ta c th thc hin iu
ny bng cch mo u bin ny bng ton t &, c s dng trong cc nh
ngha hm xc nh cch chuyn tham s theo tham chiu. Lit k 5 ch ra mt
v d v vic ny.
Lit k 5. Bao ng chuyn cc bin theo tham chiu
$x = 1
$closure = function() use (&$x) { ++$x; }
echo $x . "\n";
$closure();
echo $x . "\n";
$closure();
echo $x . "\n";
Output:
1
2
3
Chng ta nhn thy bao ng s dng bin ngoi $x v gia tng n mi khi bao
ng c gi. Chng ta c th trn cc bin chuyn theo gi tr vi cc bin
chuyn theo tham chiu mt cch d dng trong mnh use, v chng s c x
l m khng gp phi bt k vn no. Chng ta cng c th c cc hm m trc

Email: Mrhaisyc@gmail.com

50

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

tip tr li cc bao ng, nh xem trong Lit k 6. Trong trng hp ny, tui th
ca bao ng s thc s lu hn phng thc m xc nh chng.
Lit k 6. Bao ng c tr li bi mt hm
function getAppender($baseString)
{
return function($appendString) use ($baseString) { return $baseString .
$appendString; };
}
Bao ng v cc i tng
Bao ng c th l cng c hu ch khng nhng cho lp trnh th tc m cn cho
lp trnh hng i tng. Vic s dng cc bao ng c cng mt mc ch trong
tnh trng ny nh n s c bn ngoi mt lp: cha mt hm ring b ph
thuc trong mt phm vi nh. Chng cng thc s d s dng trong cc i tng
ca chng ta khi chng bn ngoi mt i tng.
Khi c xc nh trong mt i tng, c mt iu tin dng l bao ng c
quyn truy cp n i tng qua bin $this khng cn phi nhp n tng minh.
Lit k 7 gii thch vic ny.
Lit k 7. Bao ng bn trong mt i tng
class Dog
{
private $_name;
protected $_color;
public function __construct($name, $color)
{
$this->_name = $name;
$this->_color = $color;
}
public function greet($greeting)
{
return function() use ($greeting) {
echo "$greeting, I am a {$this->_color} dog named
{$this->_name}.";
};
}
}
$dog = new Dog("Rover","red");
$dog->greet("Hello");
Email: Mrhaisyc@gmail.com

51

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Output:
Hello, I am a red dog named Rover.
y, chng ta r rng l s dng cu cho c a cho phng thc greet()
trong bao ng c xc nh trong n. Chng ta cng nm c mu sc v tn
ca ch ch, chuyn qua hm dng v lu li trong i tng, trong bao ng.
Cc bao ng xc nh trong mt lp v c bn l ging nh nhng th nh
ngha bn ngoi mt i tng. Ch khc nhau duy nht l vic nhp t ng i
tng qua bin $this. Chng ta c th v hiu ha hnh vi ny bng cch nh
ngha bao ng l tnh.
Lit k 8. Bao ng tnh
class House
{
public function paint($color)
{
return static function() use ($color) { echo "Painting the
house $color...."; };
}
}
$house = new House();
$house->paint('red');
Output:
Painting the house red....
V d ny ging vi lp Dog c xc nh trong lit k 5. Khc bit ln l ch
chng ta khng s dng bt k thuc tnh no ca i tng trong bao ng, do n
c nh ngha l tnh.
Ci li ln ca vic s dng mt bao ng tnh so vi bao ng khng tnh
(nonstatic) bn trong mt i tng l tit kim b nh. Bng cch khng phi
nhp i tng vo bao ng, chng ta c th tit kim kh nhiu b nh, c bit
l nu chng ta c nhiu bao ng m khng cn tnh nng ny.
Mt iu vui na cho cc i tng l vic thm vo mt phng thc ma thut
tn l __invoke(), cho php i tng t gi n l mt bao ng. Nu phng thc
ny c nh ngha, n s c s dng khi i tng c gi vo ng cnh
. Lit k 9 minh ho vic ny.
Lit k 9. S dng phng thc __invoke()
class Dog
Email: Mrhaisyc@gmail.com

52

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

public function __invoke()


{
echo "I am a dog!";
}

$dog = new Dog();


$dog();
Vic gi tham chiu i tng nh trong Lit k 9 nh bin t ng gi phng
thc ma thut __invoke() lm cho lp t hnh ng nh l mt bao ng.
Cc bao ng c th tch hp rt tt vi m hng i tng, cng nh l vi m
th tc. Chng ta hy xem cch cc bao ng tng tc vi API Phn chiu
(Reflection API) mnh m ca PHP.
Bao ng v phn chiu
PHP c mt API phn chiu rt hu ch, n cho ta k thut o ngc cc lp
(reverse-engineer), cc giao din, cc hm, v cc phng thc. Theo thit k, cc
bao ng l cc hm n danh, c ngha l chng khng xut hin trong API phn
chiu.
Tuy nhin, mt phng thc mi getClosure() c thm vo cc lp
ReflectionMethod v ReflectionFunction trong PHP to ra bao ng mt cch
nng ng t hm hoc phng thc quy nh. N hot ng nh mt gp ln
trong ng cnh ny, trong vic gi ra phng thc ca hm thng qua bao ng
gy nn vic gi hm trong ng cnh m n c nh ngha. Lit k 10 cho bit
cch cng vic ny thc hin.
Lit k 10. S dng phng thc getClosure()
class Counter
{
private $x;
public function __construct()
{
$this->x = 0;
}
public function increment()
{
$this->x++;
}
public function currentValue()
Email: Mrhaisyc@gmail.com

53

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

{
}

echo $this->x . "\n";

}
$class = new ReflectionClass('Counter');
$method = $class->getMethod('currentValue');
$closure = $method->getClosure()
$closure();
$class->increment();
$closure();
Output:
0
1
Mt hiu qu ph th v ca cch tip cn ny l ch n cho php chng ta truy
cp cc thnh vin ring, c bo v ca mt lp, thng qua bao ng m c th
rt tin cho cc lp kim th mun (unit testing). Lit k 11 l mt v d v vic
truy cp mt phng thc ring trong mt lp.
Lit k 11. Truy cp mt phng thc ring trong mt lp
class Example
{
....
private static function secret()
{
echo "I'm an method that's hiding!";
}
...
}
$class = new ReflectionClass('Example');
$method = $class->getMethod('secret');
$closure = $method->getClosure()
$closure();
Output:
I'm an method that's hiding!
Hn na, chng ta c th s dng API phn chiu t kim tra (introspect) mt
bao ng, nh trnh by trong Lit k 12. Chng ta ch cn chuyn tham chiu
bin sang bao ng vo hm dng ca lp ReflectionMethod.
Lit k 12. Kim tra mt bao ng bng cch s dng s dng API phn
chiu
Email: Mrhaisyc@gmail.com

54

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$closure = function ($x, $y = 1) {};


$m = new ReflectionMethod($closure);
Reflection::export ($m);
Output:
Method [ <internal> public method __invoke ] {
- Parameters [2] {
Parameter #0 [ <required> $x ]
Parameter #1 [ <optional> $y ]
}
}
Mt iu ng lu v tnh tng thch ngc (backward-compatibility) l lp c
tn Closure by gi c cng c PHP dnh ring lu gi cc bao ng, nh
vy bt k lp no dng tn s cn phi i tn.
API phn chiu h tr nhiu cho cc bao ng, nh chng thy, dng c th
to ra chng t cc hm v phng thc hin hnh mt cch nng ng. Chng
cng c th t kim tra chnh mnh vo mt bao ng ging nh mt hm bnh
thng.
Ti sao li l bao ng?
Nh chng ta thy trong cc v d v cc hm lambda, mt trong nhng cch s
dng r nht ca cc bao ng l trong mt vi hm PHP m chp nhn mt hm
gi nh tham s. Tuy nhin, cc bao ng c th hu ch trong bt k ng cnh
no m chng ta cn phi ng gi logic bn trong phm vi ca chnh n. Mt v
d nh vy xy ra khi t chc ci tin li (refactoring) m c gip n gin ha
n v lm cho n c th c hn. Ly v d sau y, n cho thy vic ghi log
(logger) c s dng trong khi chy mt vi truy vn SQL.
Lit k 13. Cc truy vn SQL ghi m (Code logging SQL queries)
$db = mysqli_connect("server","user","pass");
Logger::log('debug','database','Connected to database');
$db->query('insert into parts (part, description) values ('Hammer','Pounds nails');
Logger::log('debug','database','Insert Hammer into to parts table');
$db->query('insert into parts (part, description) values
('Drill','Puts holes in wood');
Logger::log('debug','database','Insert Drill into to parts table');
$db->query('insert into parts (part, description) values ('Saw','Cuts wood');
Logger::log('debug','database','Insert Saw into to parts table');
Mt im ni bt trong Lit k 13 l chng ta ang thc hin bao nhiu ln lp.
Mi cuc gi thc hin i vi Logger::log() c cng hai i s u tin. gii
quyt vic ny, chng ta c th y phng thc sang mt bao ng v thay
vo thc hin cc cuc gi i li bao ng . M kt qu nh di y.

Email: Mrhaisyc@gmail.com

55

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lit k 14. Cc truy vn SQL ghi m c t chc ci tin li


$logdb = function ($string) { Logger::log('debug','database',$string); };
$db = mysqli_connect("server","user","pass");
$logdb('Connected to database');
$db->query('insert into parts (part, description) values ('Hammer','Pounds nails');
$logdb('Insert Hammer into to parts table');
$db->query('insert into parts (part, description) values
('Drill','Puts holes in wood');
$logdb('Insert Drill into to parts table');
$db->query('insert into parts (part, description) values ('Saw','Cuts wood');
$logdb('Insert Saw into to parts table');
Khng nhng chng ta khin m trong sng hn v b ngoi, m chng ta cn
lm cho n d thay i mc ghi log ca log truy vn SQL, do chng ta by gi
ch cn thc hin thay i mt ni.
Tm tt
Bi vit ny chng minh cc bao ng b ch nh th no khi mt vic lp trnh
hm xy dng bng m PHP V5.3. Chng ta bn lun v cc hm lambda v
cc u im m cc bao ng a ra cho chng. Cc i tng v bao ng ho
hp vi nhau rt tt, nh chng ta thy bng cch x l c bit cc bao ng
trong m hng i tng. Chng ta thy c chng ta c th s dng API
phn chiu tt nh th no to ra cc bao ng ng, cng nh l t kim tra
chnh mnh cc bao ng hin hnh.
Bi 5: PHP 5.3, Phn 1: Cc thay i v giao din i tng
Lit k 1. V d v vic s dng __callStatic() i vi __call()
{geshibot lang="php" head=""}class Foo
{
public static function __callStatic(
$name,
$args
)
{
echo "Called method $name statically";
}
public function __call(
$name,
$args
)
{
Email: Mrhaisyc@gmail.com

56

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

echo "Called method $name";

Foo::dog();
// outputs "Called method dog statically"
$foo = new Foo;
$foo->dog();
// outputs "Called method dog"
{/geshibot}
Mt iu cn lu l PHP thc hin p t nh ngha ca phng thc
__callStatic(); n phi l chung (public), v n phi c tuyn b l tnh. Cng
nh vy, phng thc ma thut __call() cng phi c xc nh l chung, ng
nh tt c cc phng thc ma thut phi l nh vy.
Cc cuc gi ra tnh ng
Mt c tnh rt hay ca PHP l cc bin cho bin (variable variables). iu c
ngha l bn c th s dng chui gi tr ca mt bin quy nh tn ca mt
bin khc. Ni mt cch khc, bn c th thc hin vic g ging nh di y.
Lit k 2. Cc bin bin (Variable variables)
{geshibot lang="php" head=""} $x = 'y';
$$x = 'z';
echo $x; // outputs 'y'
echo $y; // outputs 'z'
echo $$x; // outputs 'z'{/geshibot}
Cng mt khi nim c th c s dng vi cc hm, hoc thm ch cc phng
thc lp nh di y.
Lit k 3. Tn cc hm bin v phng thc lp
{geshibot lang="php" head=""}class Dog
{
public function bark()
{
echo "Woof!";
}
}
$class = 'Dog'
$action = 'bark';
$x = new $class(); // instantiates the class 'Dog'
$x->$action(); // outputs "Woof!" {/geshibot}
im mi PHP V5.3 l kh nng c tn ca lp khi c quy nh l mt bin
khi thc hin mt cuc gi tnh. Vic ny m ra mt vi kh nng mi, nh di
y.
Email: Mrhaisyc@gmail.com

57

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lit k 4. t tn lp bin
{geshibot lang="php" head=""}class Dog
{
public static function bark()
{
echo "Woof!";
}
}
$class = 'Dog';
$action = 'bark';
$class::$action(); //outputs "Woof!" {/geshibot}
B sung ny to ra kha cnh v cc bin ca bin trong PHP y , cho php
dng chng ch trong tng tnh hung vi PHP.
Chng ta hy quan st mt ci tin hu ch hn cho vic s dng cc phng thc
v thnh vin tnh: lin kt tnh mun (late static binding).
Lin kt tnh mun
Mt trong nhng iu phin phc nht v PHP trc V5.3 l cch phng thc v
thnh vin tnh c x l. Cho n nay, cc tham chiu tnh (static references),
chng hn nh cc tham chiu c lm bn thn n hoc __CLASS__, c gii
quyt trong phm vi lp, trong hm c nh ngha. Vn l ch tham
chiu s khng ng nu lp c m rng v cuc gi c thc hin t lp con
(child class) mi. Lin kt tnh mun c thm vo PHP V5.3 gim bt
vn ny. minh ho r hn, chng ta hy to ra mt lp vi mt phng thc
tnh di y.
Lit k 5. Lp Foo vi phng thc tnh test()
{geshibot lang="php" head=""}class Foo
{
protected static $name = 'Foo';
public static function test()
{
return self::$name;
}
} {/geshibot}
Chng ta hy m rng lp ny. Chng ta s nh ngha li thnh vin $name trong
lp con ny.
Lit k 6. Lp con Bar m rng lp cha Foo
{geshibot lang="php" head=""}class Bar extends Foo
{
Email: Mrhaisyc@gmail.com

58

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

protected static $name = 'Bar';


}{/geshibot}
Chng ta thc hin cuc gi tnh trong Lit k 7.
Lit k 7. Cc cuc gi phng thc tnh test()
{geshibot lang="php" head=""}echo Bar::test(); {/geshibot}
Kt qu t cuc gi s l chui Foo. y l do tham chiu self::$name thc
hin trong phng thc test() c thc hin bng lp Foo. Lin kt xut hin
bng cch ny v y l ni hm c nh ngha.
PHP V5.3 thm t kho static cho php bn thc hin mt tham chiu i
vi lp hin ti. Do bn s thay i lp Foo trn s dng t kho ny trong
Lit k 8, v chng ta s thy rng Bar s thay vo kt qu.
Lit k 8. S dng t kho static
{geshibot lang="php" head=""}class Foo
{
protected static $name = 'Foo';

public static function test()


{
return static::$name;
}

class Bar
{
protected static $name = 'Bar';
}
echo Bar::test(); // outputs 'Bar'{/geshibot}
Mt iu cn lu v t kho static l n khng lm vic nh cch lm trong ng
cnh khng tnh. iu ny c ngha l cc nguyn tc k tha bnh thng khng
p dng vi cc cuc gi tnh. T kho static s ch cn c gng gii quyt cuc
gi trong lp hin ti thay cho lp m hm c nh ngha. y l mt iu quan
trng cn lu .
By gi chng ta thy mt vi ci tin vi cc phng thc v thnh vin tnh,
hy quan st mt vi lp mi c b sung vo b phn rt hu ch ca PHP V5,
l Th vin lp PHP chun.
Th vin lp PHP chun
Th vin lp PHP chun (SPL) l mt tp cc giao din v cc lp thm vo PHP
V5, c thit k gii quyt cc vn chun. Cc vn ny gm vic cho
mt i tng c lp (iterateable), cho php mt i tng i x c nh mt
mng, hoc thc hin mt danh sch mc ni. Li im ca vic s dng cc lp
Email: Mrhaisyc@gmail.com

59

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

v cc phng thc ny l ch chng l ring cho PHP, ngha l chng s nhanh


hn nu chng c thc hin trong chnh PHP. Chng cng, trong nhiu v d,
cho php nhiu hm trong ca PHP s dng cc i tng trc tip ny, chng hn
nh cch giao din bin lp (Iterator interface) cho php bn s dng cu trc
foreach lp li trn i tng.
PHP V5.3 thm kh nhiu lp vo SPL. C mt iu chng ta tham kho trc
y l ci t danh sch mc ni kp (doubly linked list) trong lp SPL
SplDoublyLinkedList. N c s dng bi hai lp SPL mi khc: SplStack, ci
t stack (vng nh xp chng), v SplQueue, ci t hng i.
Chng ta hy quan st cch bn c th s dng lp SplStack thc hin mt
vng nh.
Lit k 9. S dng SplStack
{geshibot lang="php" head=""}$stack = new SplStack();
// push a few new items on the stack
$stack->push('a');
$stack->push('b');
$stack->push('c');
// see how many items are on the stack
echo count($stack); // returns 3
// iterate over the items in the stack
foreach ( $stack as $item )
echo "[$item],";
// the above outputs: [c],[b],[a]
// pop an item off the stack
echo $stack->pop(); // returns 'c'
// now see how many items are on the stack
echo count($stack); // returns 2{/geshibot}
SqlQueue lm vic theo kiu tng t, nhng n lm vic nh mt hng i (vo
trc, ra trc; ch khng phi l vo sau, ra trc, nh l stack. Ngoi ra, cn ci
t ng (SplHeap), cng nh l hng i ring v cc ci t ng cho vi tnh
hung nht nh (SplMinHeap, SplMaxHeap v SplPriorityQueue).
Mt b sung hu ch na l lp SplFixedArray m nh tn ng , l ci t
mng kch thc c nh. Tt nhin n kh nhanh thc ra l nhanh n mc
c o th chun, nhanh hn 10-30% so vi ci t mng lp sn trong PHP. S
tng tc ny l do vic mng ny c mt kch thc c nh, khng thay i nh
PHP mc nh, v do khng c php s dng cc ch mc phi s. Lit k 10 ch
ra cch n c s dng.
Email: Mrhaisyc@gmail.com

60

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lit k 10. SplFixedArray


{geshibot lang="php" head=""}$array = new SplFixedArray(3);
$array[0] = 'dog';
$array[1] = 'cat';
$array[2] = 'bird';
$a->setSize(4); // increase the size on the fly
$array[3] = 'mouse';
foreach ( $array as $value )
echo "[$value],";
Output:
[dog],[cat],[bird],[mouse] {/geshibot}
Ngoi ra cn c mt vi lp bin lp mi c thm vo: FilesystemIterator v
GlobIterator. Cc bin ny lm vic nh cc lp bin lp khc trong PHP, nhng
chng c thit k c bit dng cho vi c th nht nh.
Mt thay i na vi SPL l ch by gi n lun c kch hot trong PHP
V5.3. Trong cc phin bn trc ca PHP V5, bn c th v hiu ho SPL vo lc
dch, nhng i vi PHP V5.3, vic ny khng cn cho php.
Cc b sung mi cho SPL thm mt s chc nng hu ch vo PHP rt d s
dng, cng nh cc b sung v cu trc d liu, th d nh cc danh sch mc ni
kp, stack, heap, v hng i. Cc lp ny c th c s dng thay th cc ci
t khng gian ngi dng m bn c th c, chng s thu c tc gia tng v
s kt hp tt hn vi cc cu trc v hm PHP khc nhau.
Gi chng ta thy mt vi b sung mi cho SPL, hy xem cch OOP trong PHP
V5.3 thu c mt hiu nng quan trng v ci thin vic s dng b nh vi
b sung vic gom rc xoay vng (circular garbage collection).
G o m r c xo a y vng
Mt vn m cc nh pht trin PHP gp phi trn quan im hiu nng l vic
gom rc (garbage collection). PHP c mt b gom rc kh n gin, m v c bn
s thu thp rc cho mt i tng khi n khng cn nm trong phm vi hp l.
Cch m n thc hin vic ny v mt ni ti l bng cch s dng mt b m
quy chiu (reference counter), khi b m chm 0 (c ngha l khng cn cc
quy chiu n i tng ny na), i tng s c thu gom v gch b t b
nh.
Vic ny kh tt, nhng c th tr thnh mt vn trong cc tnh th khi mt i
tng quy chiu n mt i tng khc theo quan h cha-con (parent-child
relationship). Vi tnh tnh th ny, b m quy chiu i vi cc i tng
khng c thu gom, nn b nh s dng bng i tng ny lu li trong b nh
khng quy chiu (unreferenced memory) v khng c ngng cp pht, cho n
khi kt thc yu cu. Chng ta hy quan st mt v d khi vn ny xy ra.

Email: Mrhaisyc@gmail.com

61

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lit k 11. Quan h lp cha-con b thu gom rc khng ph hp trong bn


PHP V5.2 v bn trc
{geshibot lang="php" head=""}class Parent
{
public function __construct()
{
$this->child = new Child($this);
}
}
class Child
{
public function __construct(
Parent $parent
)
{
$this->parent = $parent;
}
} {/geshibot}
Bi 6: C bn v biu thc chnh quy
Biu thc so mu (pattern) dng m t 1 cch tng qut 1 i tng (chui)
trong PHP, v d:
preg_replace('/[^a-z0-9]+/i','',$str);
--> hm ny l loi b tt c cc k t khng phi l ch (a-z v A-Z) hoc s (0-9)
ra khi chui $str
Biu thc so mu dng rt hiu qu v nhanh chng, tuy nhin theo TG bit th
cng khng nhiu ngi bit s dng ci ny(nht l ni khng c trng lp
o to c bn v PHP nh VN chng ta) cn s ngi bit,hiu r th khng
training li nn t nay cng t ngi bit s dng biu thc so mu. Trong bi
ny TG ch gii thiu 1 s kin thc c bn v 1 vi v d d hiu, hy vng l
gip t cho anh em.
Cu trc: nh v d trn th /[^a-z0-9]+/i l 1 biu thc so mu,
- gii hn trong cp du /<so mu>/x hoc #<so mu>#x
- x c th l 1 hoc nhiu k t m t d liu c ly v cng c th khng c
trong biu thc so mu. Mt s gi tr c th c ca x:
+ i: khng phn bit ch hoa, ch thng
+ s: bao gm c cc k t xung dng
+ Ngoi cn c 1 s gi tr khc nh: S,U,... nhng t c s dng

Email: Mrhaisyc@gmail.com

62

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Ta ly v d cho d hnh dung:


preg_replace('/[^a-z0-9]/','','phpBASIC$')
-> php
preg_replace('/[^a-z0-9]/i','','phpBASIC$')
-> phpBASIC
ngha ca cc k t trong biu thc so mu:
\ loi b cc k t c bit ca pattern
/(phpbasic)/ : chui phpbasic
/\(phpbasic\)/ : chui (phpbasic)
^ k t bt u
/^php(.*)/ : nhng chui bt u bng ch php
$ k t kt thc
/(.*)basic$/ : nhng chui kt thc bng ch basic
. bt k k t no tr k t xung dng
/(.*)/ : tt c cc k t nm trn 1 dng
[ v ] bt u v kt thc 1 lp k t
/[a-z]/ : tt c cc k t a-z
ch trong 1 lp:
^ ph nh:
/[^a-z]/ : nhng k t khng phi l a-z
- 1 khong:
/[a-d]/ : bao gm a,b,c,d
| hoc
/a|b/ : k t a hoc b
( v ) bt u v kt thc 1 so mu con
/^a(c|d)b/ : chui c dng acb hoc acd
? c hoc khng
/ab?c/ : chui c dng abc hoc ac
* : 0 hoc nhiu hn k t
/a*/ : <null>, a, aa, aaa,.............
+ : c t nht 1
/a+/ : a,aa,aaa,...............

Email: Mrhaisyc@gmail.com

63

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

{ v } bt u v kt thc min/max k t
/a{1,3}/ : a,aa,aaa
Cc k t c bit khc:
\n hoc \r : k t xung dng
\t : k t tab
\d : bt k k t s no
\D : bt k k t no m khng phi l s
\s : bt k k t khong trng
\S : bt k k khng phi l khong trng
\w : bt k t no
\W : khng phi l t
Bi 7: To trang login kt hp vi cookies v session
C nhiu bn thc mc l ti sao khi vo ng nhp vo mt trang no , khi
"thot ra" v vo li th thng tin ng nhp vn c gi. Ni dung ca bi vit s
hng dn bn lm quen vi cch to cookies v session trong PHP.
Yu cu ti thiu mc hiu bit ca bn l:
+ Mt t vn PHP, xi ti Tt :d
+ Mt t vn SQL, select * from vinhga.com :d
+ V bn c th xem thm v cch kt ni vo database ti mc PHP &
MySQL.
Kin thc mnh cung cp s dng cho bi vit ny:
Cookies dng lu tr thng tin vo my.
Session dng lu tr thng tin tm thi.
BC 1:
Trc ht to file config.php, v in y thng tin v database:
{geshibot lang="php" head=""}<?php
$db_host = "localhost";
$db_name = "vinhga";
$db_username = "root";
$db_password = "123456";
?> {/geshibot}
BC 2:
m u cho bi vit ny mnh s "gi s" mt vi iu thun tin hn:
Gi s mnh c CSDL (database) vi table members vi cc trng (field) l id,
Email: Mrhaisyc@gmail.com

64

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

name, password v email , nu cha c bn c th s dng on SQL vit sn di


y to lun 1 table tn l members:
{geshibot lang="php" head=""}CREATE TABLE `members` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ; {/geshibot}
Ri gi s tip l mnh c 1 ngi ng k vi thng tin sau:
id = 1
name = vinhga
password = e10adc3949ba69abbe56e057f20f883e
email = admin@vinhga.com
L nh, hm nay sao password m ha bng md5() n di hn my hm trc :d,
c php ca md5() l md5($password). Xem bc tip theo...
BC 3:
Bn to file login.php vi ni dung sau:
{geshibot lang="php" head=""}<?php
require_once("config.php");
//==================================================
// Connect to database
//==================================================
@mysql_connect("{$db_host}", "{$db_username}", "{$db_password}") or
die("Could not connect");
@mysql_select_db("{$db_name}") or die("Could not select database");
//==================================================
// Start session
//==================================================
session_start();
//==================================================
// Set cookie
//==================================================
function set_cookie($name, $value = "", $remember = 1){
if ($remember == 1)
{
$expires = time() + 60*60*24*365;
Email: Mrhaisyc@gmail.com

65

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

}
setcookie($name, $value, $expires, "/", "");
}
//==================================================
// Get cookie
//==================================================
function get_cookie($name)
{
if (isset($_COOKIE[$name]))
{
return urldecode($_COOKIE[$name]);
}
else
{
return FALSE;
}
}
//==================================================
// Check login
//==================================================
function log_in()
{
$name = isset($_POST["name"]) ? htmlspecialchars($_POST["name"]) : '';
$password = isset($_POST["password"]) ?
htmlspecialchars($_POST["password"]) : '';
$remember = isset($_POST["remember"]) ?
htmlspecialchars($_POST["remember"]) : '';
if (empty($name))
{
print $msg = "Bn phi nhp tn vo!";
return false;
}
else if (empty($password))
{
print $msg = "Bn phi nhp mt khu vo!";
return false;
}
Email: Mrhaisyc@gmail.com

66

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$sql_select = @mysql_query("SELECT * FROM members WHERE


name='$name'") or die("Query failed");
$member = @mysql_fetch_array($sql_select);
if (@mysql_num_rows($sql_select) == 0)
{
print $msg = "Tn bn nhp khng tn ti!";
return false;
}
if (md5($password) != $member["password"]){
print $msg = "Sai mt khu!";
return false;
}
$_SESSION["login"] = "yes";
$_SESSION["id"] = $member['id'];
if ($remember == 1)
{
set_cookie("member_id" , $member['id'] , 1);
set_cookie("pass_hash" , $member['password'] , 1);
}
print $msg = "ng nhp thnh cng!<br><a href=''>Click vo y to come back
index</a>";
return false;
}
//==================================================
// Do logout
//==================================================
function log_out()
{
set_cookie( "member_id" , "" );
set_cookie( "pass_hash" , "" );
$_SESSION["login"] = "no";
$_SESSION["id"] = "";
print $msg = "Bn thot ra khi h thng. <br> <a href=''>Click vo y to
Email: Mrhaisyc@gmail.com

67

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

come back index</a>";


return false;
}
//==================================================
// Design what to do... :d
//==================================================
if ($view == "login")
{
log_in();
}
else if ($view == "logout")
{
log_out();
}
?> {/geshibot}
BC 4:
Bn to file index.php vi ni dung sau:
{geshibot lang="php" head=""}<?php
require_once("login.php");
//==================================================
// Load cookie by function get_cookie()
//==================================================
$cookie = array();
$cookie['member_id'] = intval(get_cookie('member_id'));
$cookie['pass_hash'] = get_cookie('pass_hash');
//==================================================
// Check cookie saved ???
//==================================================
if ($cookie['member_id'] != "" and $cookie['pass_hash'] != "")
{
$sql_select = @mysql_query("Select * from members where
id='{$cookie['member_id']}'");
$member = @mysql_fetch_array($sql_select);
if ($member["password"] == $cookie['pass_hash'])
{
Email: Mrhaisyc@gmail.com

68

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$_SESSION["login"] = "yes";
$_SESSION["id"] = intval($member["id"]);
}
}
//==================================================
// If session has been saved in turn...
//==================================================
if ($_SESSION["login"] == "yes")
{
if ( !isset($_SESSION["login"]) )
{
session_register("login");
$_SESSION["login"] = "no";
}
$member_id = $_SESSION["id"];
$sql_select = @mysql_query("SELECT * FROM members WHERE
id='$member_id'") or die("Query failed");
$member = @mysql_fetch_array($sql_select);
print "Cho b?n, {$member['name']}. <br> <a
href='login.php?view=logout'>Click vo y to log out!</a>";
}
//==================================================
// Else show login page
//==================================================
else
{
print <<<EOF
<html>
<body>
<form action="login.php?view=login" name="login" method="POST">
Tn truy nh?p: <input Type="text" size="19" name="name"><br>
M?t kh?u: <input Type="password" size="20" name="password"><br>
<input type="checkbox" name="remember" value="1"> Lu m?t kh?u<br>
<input type="submit" name="submit" value="ng nh?p"><br>
</form>
</body>
</html>
Email: Mrhaisyc@gmail.com

69

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

EOF;
}
?>{/geshibot}
Bi 8: C bn v RegExp (Regular Expressions , so mu hay biu thc chnh
quy) trong PHP
Biu thc so mu (pattern) dng m t 1 cch tng qut 1 i tng (chui)
trong PHP, v d:
preg_replace('/[^a-z0-9]+/i','',$str);
--> hm ny l loi b tt c cc k t khng phi l ch (a-z v A-Z) hoc s (0-9)
ra khi chui $str
Biu thc so mu dng rt hiu qu v nhanh chng, tuy nhin theo TG bit th
cng khng nhiu ngi bit s dng ci ny(nht l ni khng c trng lp
o to c bn v PHP nh VN chng ta) cn s ngi bit,hiu r th khng
training li nn t nay cng t ngi bit s dng biu thc so mu. Trong bi
ny TG ch gii thiu 1 s kin thc c bn v 1 vi v d d hiu, hy vng l
gip t cho anh em.
Cu trc: nh v d trn th /[^a-z0-9]+/i l 1 biu thc so mu,
- gii hn trong cp du /<so mu>/x hoc #<so mu>#x
- x c th l 1 hoc nhiu k t m t d liu c ly v cng c th khng c
trong biu thc so mu. Mt s gi tr c th c ca x:
+ i: khng phn bit ch hoa, ch thng
+ s: bao gm c cc k t xung dng
+ Ngoi cn c 1 s gi tr khc nh: S,U,... nhng t c s dng
Ta ly v d cho d hnh dung:
preg_replace('/[^a-z0-9]/','','phpBASIC$')
-> php
preg_replace('/[^a-z0-9]/i','','phpBASIC$')
-> phpBASIC
ngha ca cc k t trong biu thc so mu:
\ loi b cc k t c bit ca pattern
/(phpbasic)/ : chui phpbasic
/\(phpbasic\)/ : chui (phpbasic)
^ k t bt u
/^php(.*)/ : nhng chui bt u bng ch php
Email: Mrhaisyc@gmail.com

70

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$ k t kt thc
/(.*)basic$/ : nhng chui kt thc bng ch basic
. bt k k t no tr k t xung dng
/(.*)/ : tt c cc k t nm trn 1 dng
[ v ] bt u v kt thc 1 lp k t
/[a-z]/ : tt c cc k t a-z
ch trong 1 lp:
^ ph nh:
/[^a-z]/ : nhng k t khng phi l a-z
- 1 khong:
/[a-d]/ : bao gm a,b,c,d
| hoc
/a|b/ : k t a hoc b
( v ) bt u v kt thc 1 so mu con
/^a(c|d)b/ : chui c dng acb hoc acd
? c hoc khng
/ab?c/ : chui c dng abc hoc ac
* : 0 hoc nhiu hn k t
/a*/ : <null>, a, aa, aaa,.............
+ : c t nht 1
/a+/ : a,aa,aaa,...............
{ v } bt u v kt thc min/max k t
/a{1,3}/ : a,aa,aaa
Cc k t c bit khc:
\n hoc \r : k t xung dng
\t : k t tab
\d : bt k k t s no
\D : bt k k t no m khng phi l s
Email: Mrhaisyc@gmail.com

71

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

\s : bt k k t khong trng
\S : bt k k khng phi l khong trng
\w : bt k t no
\W : khng phi l t
Bi 9: Gii thiu s qua v Classes v Objects
1. Class: l mt tp hp cc bin v cc hm cng lm vic vi cc bin ny.
Mt class c nh ngha theo c php sau:
<?php
class Cart
{
var $items; // Items in our shopping cart
function add_item ($artnr, $num)
{
$this->items[$artnr] += $num;
}
function remove_item ($artnr, $num)
{
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
V d trn nh ngha mt class c tn l Cart, cha cc mng kt hp ca cc
article trong mt cart v hai hm dng thm v b cc th ra khi cart ny.
Ch : trong PHP 4, ch c cc hng c khi to cho cc bin var mi c cho
php khi to cc bin vi cc gi tr khng phi l hng s, bn cn c mt
hm khi to c gi mt cch t ng khi object c dng t lp. Chng hn
nh hm c gi trong mt hm dng nh sau:
<?php
class Cart
{
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner = 'Fred ' . 'Jones';
Email: Mrhaisyc@gmail.com

72

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

var $items = array("VCR", "TV");

}
class Cart
{
var $todays_date;
var $name;
var $owner;
var $items;
function Cart()
{
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>
2. extends: thng th bn cn cc lp vi cc bin v cc hm tng t cho
mt lp tn ti khc. Thc t, rt tt khi bn nh ngha mt lp chung m c s
dng trong cc n ca bn v chnh sa lp ny cho thch nghi vi nhu cu ca
mi n. thc hin iu ny, cc class c th c m rng t cc class
khc.Vic m rng hay dn xut mt lp c tt c cc bin v cc hm ca lp cha
( iu ny c xem l tha k) v nhng g bn thm vo trong nh ngha m
rng. Khng ging nh cc ngn ng lp trnh hng i tng khc, PHP khng
h tr a tha k, cho nn mt lp m rng ch lun lun ph thuc vo mt lp
cha ring r ca n. Cc lp c m rng s s dng t kho extends. V d:
class Named_Cart extends Cart{
var $owner;
function set_owner ($name){
$this->owner = $name;
}
}
V d trn nh ngha mt lp Named_Cart m c tt c cc bin v cc hm ca
lp Cart thm v cng thm cc bin $owener v hm set_owner().
3. Hm dng: l nhng hm trong mt lp m c t ng gi khi bn to ra
mt minh ho mi ca mt lp vi t kho new. Trong PHP4, mt lp c xem
l hm dng khi n c cng tn vi tn lp m n c nh ngha trong .V d:

Email: Mrhaisyc@gmail.com

73

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

class Auto_Cart extends Cart


{
function Auto_Cart()
{
$this->add_item ("10", 1);
}
}
V d trn nh ngha mt lp Auto_Cart m mt Cart c mt hm dng khi to
mi khi mt Auto_Cart mi c gi bng t kho new.
Cc hm dng c th c cc i s v cc i s ny c th l tu chn. s
dng lp m khng c tham s, tt c cc tham s n hm dng nn l tu chn
bng cch cung cp cc gi tr mc nh. V d nh sau:
<?php
class Cart
{
var $items; // Items in our shopping cart
function add_item ($artnr, $num)
{
$this->items[$artnr] += $num;
}
function remove_item ($artnr, $num)
{
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
V d trn nh ngha mt class c tn l Cart, cha cc mng kt hp ca cc
article trong mt cart v hai hm dng thm v b cc th ra khi cart ny.
Ch : trong PHP 4, ch c cc hng c khi to cho cc bin var mi c cho
php khi to cc bin vi cc gi tr khng phi l hng s, bn cn c mt
hm khi to c gi mt cch t ng khi object c dng t lp. Chng hn
nh hm c gi trong mt hm dng nh sau:

Email: Mrhaisyc@gmail.com

74

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

<?php
class Cart
{
var $todays_date = date("Y-m-d");
var $name = $firstname;
var $owner = 'Fred ' . 'Jones';
var $items = array("VCR", "TV");
}
class Cart
{
var $todays_date;
var $name;
var $owner;
var $items;
function Cart()
{
$this->todays_date = date("Y-m-d");
$this->name = $GLOBALS['firstname'];
/* etc. . . */
}
}
?>
2. extends: thng th bn cn cc lp vi cc bin v cc hm tng t cho
mt lp tn ti khc. Thc t, rt tt khi bn nh ngha mt lp chung m c s
dng trong cc n ca bn v chnh sa lp ny cho thch nghi vi nhu cu ca
mi n. thc hin iu ny, cc class c th c m rng t cc class
khc.Vic m rng hay dn xut mt lp c tt c cc bin v cc hm ca lp cha
( iu ny c xem l tha k) v nhng g bn thm vo trong nh ngha m
rng. Khng ging nh cc ngn ng lp trnh hng i tng khc, PHP khng
h tr a tha k, cho nn mt lp m rng ch lun lun ph thuc vo mt lp
cha ring r ca n. Cc lp c m rng s s dng t kho extends. V d:
class Named_Cart extends Cart{
var $owner;
function set_owner ($name){
$this->owner = $name;
}
}
V d trn nh ngha mt lp Named_Cart m c tt c cc bin v cc hm ca
lp Cart thm v cng thm cc bin $owener v hm set_owner().
Email: Mrhaisyc@gmail.com

75

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

3. Hm dng: l nhng hm trong mt lp m c t ng gi khi bn to ra


mt minh ho mi ca mt lp vi t kho new. Trong PHP4, mt lp c xem
l hm dng khi n c cng tn vi tn lp m n c nh ngha trong .V d:
class Auto_Cart extends Cart
{
function Auto_Cart()
{
$this->add_item ("10", 1);
}
}
V d trn nh ngha mt lp Auto_Cart m mt Cart c mt hm dng khi to
mi khi mt Auto_Cart mi c gi bng t kho new.
Cc hm dng c th c cc i s v cc i s ny c th l tu chn. s
dng lp m khng c tham s, tt c cc tham s n hm dng nn l tu chn
bng cch cung cp cc gi tr mc nh. V d nh sau:
class Constructor_Cart extends Car{
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 : trong PHP4 khi mt lp khng c hm dng th hm dng ca lp cha s
c gi nu n tn ti.V d:
class A
{
function A(){
echo "I am the constructor of A.
\n";
}
function B() {
echo "I am a regular function named B in class A.
\n";
echo "I am not a constructor in A.
Email: Mrhaisyc@gmail.com

76

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

\n";
}
}
class B extends A{
function C() {
echo "I am a regular function.
\n";
}
}
// gi B() nh l mt hm dng
$b = new B;
Hu ht Class u c 1 phng thc c bit khi ng i tng c gi l
"Constructor" .Phng thc Constructors c gi khi i tng to ra,n
thng dng khi to cc chc nng nh gn thuc tnh vi gi tr hay to ra
cc i tng khc t i tng ny.Chng hn nh pht biu sau c khai bo
vi Class c Constructor .Ch Constructor : l phng thc c tn l tn ca
class:
<?php
class classname
{
function classname($para)
{
echo "Constructor called with parameter";
echo "$para";
}
}
?>
Sau khi khai bo 1 class ,bn cn phi to ra 1 i tng .i tng ny l 1 thnh
vin ca class.Khi to ra 1 i tng mi ,bn s dng t kha new v ch r class
m i tng trc thuc
V d : to ra 1 class c tn l keke v trong class ny khai bo 1 phng thc
cng c tn l keke vi tham s $i:
<?php
class keke{
function keke($i){
echo"Contructor goi voi tham so $i .
Email: Mrhaisyc@gmail.com

77

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

";
}

?>
<html>
<head>
<title> Class va Object</title>
</head>
<body>
<?php
// khai bao su dung class
$a= new keke("Ruoi");
$b= new keke("Muoi");
$c= new keke("Ruoi va Muoi");
?>
</body>
</html>
Bn trong class ,bn c th truy cp con tr c bit gi l $this .Mt thuc tnh
ca lp hin hnh gi $attribute.bn c th tham chiu n chng bng cch khai
bo nh sau:
$this->$attribute
V d : to ra 1 class c tn l name v phng thc c tn l name
<?php
class name{
var $attribute;
function get_name($name){

$this->attribute=$name;
echo "Your name is $this->attribute";

}
// tao 1 doi tuong moi
$a= new name();
$a->get_name("iamhatinh");
?>
Bi 10: S dng template trong PHP - c bn
Email: Mrhaisyc@gmail.com

78

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Trong bi vit ny minh gii thiu v cch dng file .tpl. i vi nhng ng dng
vit cho nhiu ngi s dng ( c th l nhng web cn chnh sa giao din nhiu:
forum phpbb). Vi cch vit thng thng, mi ln thay i giao din bn s fi
edit tan b code, nh vy xc sut dn n li code rt cao cha k n ngi
edit giao din cn fi c hiu bit v php mi sa c. Nn i vi nhng ng
dng ny bn nn vit theo kiu template. Template l nhng file to giao din cho
website v thng c lp vi code. nh dng file thng dng trong template l
.tpl ( k bt buc, bn c th chn ui khc min sao bn thy d dng s dng l
c). Khi c mi ln bn thay i giao dn ch cn edit li cc file .tpl l
xong v v n ko cha cc m PHP nn bn k cn fi l ngi rnh v php mi
edit c nh vy ng dgn ca bn s c ph bin rng hn.
d hiu ti s to mt v d s dgn template n gin d hiu:
v d:
Bn c mt trang web in cc ngy hin hnh:
file calender.php c ni dung nh sau:
<?
$ngay = $_GET['date'];
print "Hm nay l ngy:".$ngay;
?>
Khi gi calender.php?date=04-09-2006 th kt qu s l :
Hm nay ngy: 04-09-2006
y l cch vit thng thng, gi s by gi bn mun thm cu "Welcome to
phpbasic.com" fa di dng "Hm nay ngy 04-09-2006"
Bn s edit li file calender.php nh sau:
<?
// kt ni csdl
$ngay = $_GET['date'];
print "Hm nay l ngy:".$ngay;
print "Welcome to phpbasic.com";
?>
hoc l
<?
// kt ni csdl
$ngay = $_GET['date'];
print "Hm nay l ngy:".$ngay;
?>
Welcome to phpbasic.com
y ch c mt dng code nn bn d dng edit , bn th ngh nu n l mt ng
dng th bn s tm ch thm cu vo cng l mt vn cha k xc sut
gy ra li rt cao v cng kh khn hn cho nhng ngi k rnh v php.
Email: Mrhaisyc@gmail.com

79

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

gii quyt bn vit theo kiu template nh sau:


to 2 file ring r, mt file code .php v mt file giao din .tpl
to file giao dien template.tpl nh sau:
<html>
<body>
Hm nay l ngy: $ngay
Welcome to phpbasic.com
</body>
</html>
file code calender.php c ni dung nh sau:
<?
$ngay = $_GET['date'];
$file = file_get_contents("template.tpl"); //c ni dung file .tpl
print str_replace('$ngay',$date,$file); // tm v thay th ch $ngay trong file .tpl
bng bin $ngay trong file calender.php
?>
Kt qu ca file calender.php ny khi view trn trnh duyt cng ging nh l
dng kiu bnh thng , nhng by gi bn mun edit li giao din bn ch cn
sa li file .tpl v ch cn gi li ch $ngay l c, nh vy mt ngi k bit v
code cng c th edit c ni giao din ca ng dng.
Bi 11: Lp trnh hng i tng trong PHP 5
a. Khai bo lp v th hin ca lp trong PHP
Nh chng ta bit, mt lp bao gm cc kiu thuc tnh v phng thc.
Trong PHP5, chng ta khai bo mt lp vi c php nh sau:
Quote:
class tn_lp
{
// Danh sch cc bin, hng, lp... (thuc tnh)
// Danh sch cc hm (phng thc)
}
Trong , cc lp c khai bo thng qua t kho class, cc thuc tnh
c khai bo di dng cc bin, cn cc phng thc c xy dng
di dng cc hm.
Cc thuc tnh v cc phng thc trong lp
trnh hng i tng c th c thit lp nhng tnh cht c bit
Email: Mrhaisyc@gmail.com

80

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

nh : ring t (private), cng cng (public)... Cc tnh cht ny


thng c t trc cc khai bo thuc tnh v phng thc.
V d n gin di y th hin mt lp c tn l ho_so vi cc thuc tnh cng
cng bao gm ho_ten, ngay_sinh:
Quote:
class hoso
{
public $ho_ten;
public $ngay_sinh;
}
on m trn mi ch khai bo mt lp thc th vi hai bin l $ho_ten
v $ngay_sinh. By gi chng ta s khai bo mt th hin ca lp trn.
khai bo mt th hin ca mt lp, ta dng t kho new, tip l tn lp:
$ten_thuc_the = new ten_lop;
truy cp vo tng thuc tnh hay phng thc ca lp, ta dng ton t -> vi
c php nh sau:
$ten_thuc_the-->ten_thuoc_tinh;
V d sau y s to ra mt thc th ca mt c nhn c tn l Hong:
Quote:
<HTML>
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
{
public $ho_ten;
public $ngay_sinh;
}
$hoang=new hoso;
$hoang->ho_ten="Nguyn Huy Hong";
$hoang->ngay_sinh = "25/7/2003";
echo "H tn: " . $hoang->ho_ten . ". Ngy sinh: " . $hoang->ngay_sinh;

Email: Mrhaisyc@gmail.com

81

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

?>
</BODY>
</HTML>
By gi, chng ta s trang b thm mt phng thc thay i gi tr
ca cc thuc tnh ho_ten v ngay_sinh. tham chiu ti cc phn t
trong chnh bn thn lp i tng, chng ta s dng bin $this v ton
t tham chiu ->, theo sau l tn ca phng thc hoc thuc tnh:
Quote:
<HTML>
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
{
public $ho_ten;
public $ngay_sinh;
public function lap_gia_tri($hoten,$ngaysinh)
{
$this->ho_ten = $hoten;
$this->ngay_sinh=$ngaysinh;
}
}
$hoang=new hoso;
$hoang->lap_gia_tri("Nguyn Huy Hong","25/7/2003");
echo "H tn: " . $hoang->ho_ten . ". Ngy sinh: " . $hoang->ngay_sinh;
?>
</BODY>
</HTML>
Ch rng khi khai bo mt lp, chng ta cng c th thit lp nhng
gi tr mc nh ban u cho tt c cc thnh vin c to ra t lp
. V d:
Quote:
HTML>
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
Email: Mrhaisyc@gmail.com

82

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

{
public $ho_ten = "Nguyn Huy Hong";
public $ngay_sinh = "25/7/2003";
public function lap_gia_tri($hoten,$ngaysinh)
{
$this->ho_ten = $hoten;
$this->ngay_sinh=$ngaysinh;
}
}
$hoang=new hoso;
echo "H tn: " . $hoang->ho_ten . ". Ngy sinh: " . $hoang->ngay_sinh;
?>
</BODY>
</HTML>
C ch ng kn v tnh r rng ca cc phn t trong lp
Nh chng ta bit, lp trnh hng i tng tp trung vo vic ng gi cc
phng thc v thuc tnh ca mt i tng no .
Trong lp trnh hng i tng, cc thnh vin trong mt lp cn phi c xc
nh xem chng c th c truy xut t u (tnh r rng). C ba kh nng xy
ra:
- Ch truy xut cng cng (public): Cc thnh vin nu c thit lp ch
ny s c nhn thy v truy xut mi ni trong chng trnh.
- Ch truy xut ring t (private): Cc thnh vin nu c thit lp ch
ny s ch c nhn thy v truy xut c bn thn lp nh ngha thnh vin
.
- Ch bo v (protected): Ch ny s c dng gii hn truy cp ti cc
lp c tha k v bn thn lp nh ngha thnh vin .
Trong PHP5, tt c cc thnh vin ca mt lp u phi c khai bo tnh r rng
vi cc t kho tng ng l public, protected v private.
V d:
Quote:
<?php
class MyClass
{

Email: Mrhaisyc@gmail.com

83

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

public $public = 'Public';


protected $protected = 'Protected';
private $private = 'Private';
public function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // Lm vic tt
echo $obj->protected; // Gy li do thuc tnh $protected b t ch bo v
echo $obj->private; // Gy li do thuc tnh $protected b t ch ring t
$obj->printHello(); // Hot ng bnh thng, do cc thuc tnh c triu gi bn
trong mt phng thc nm trong lp.
class MyClass2 extends MyClass
{
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // Chy tt
echo $obj2->private; // Cha c nh ngha
echo $obj2->protected; // Gy li
$obj2->printHello(); // Hin th Public, Protected2, not Private
?>
Nu nh chng ta khng t cc t kho xc nh tnh r rng ca cc thnh vin,
theo mc nh chng s ch public.
K tha lp trong PHP 5

Email: Mrhaisyc@gmail.com

84

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

phn trn, cc bn bit n khi nim k tha gia cc lp, l kh nng


mt lp c th c k tha cc thnh phn d liu cng nh phng thc ca
mt lp no . Lp tha k nhng phng thc v thuc tnh ca lp khc c
gi l lp con, cn lp c k tha c gi l lp cha.
Trong PHP, mt lp c th tha k cc phng thc cng nh cc thuc tnh ca
mt lp khc bng cch s dng t kho extends trong khi khai bo tn lp.
V d di y thc hin vic m rng lp hoso trn thm mt s thuc tnh mi
bng cch k tha t lp hoso:
Quote:
<HTML>
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
{
public $ho_ten = "Nguyn Huy Hong";
public $ngay_sinh = "25/7/2003";
public function lap_gia_tri($hoten,$ngaysinh)
{
$this->ho_ten = $hoten;
$this->ngay_sinh=$ngaysinh;
}
}
class hoso2 extends hoso
{
public $noi_sinh="Thanh Ho";
public function in_hoso()
{
echo "H tn: " . $this->ho_ten . ". Ngy sinh: " . $this->ngay_sinh . " . Ni sinh: "
. $this->noi_sinh;
}
}
$hoang=new hoso2;
$hoang->in_hoso();
?>
</BODY>
</HTML>

Email: Mrhaisyc@gmail.com

85

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Cc phng thc v thnh vin tha k t lp cha sang lp con c th b np


chng (thay i) nu nh lp cha khng nh ngha chng di dng cc phng
thc cui cng vi t kho final.
K thut np chng c ngha l chng ta c th nh ngha li cc hm trong lp
cha bng cc hm cng tn trong lp con nhng hai hm ny c hai chc nng
hon ton khc nhau. Nhiu ngi gi k thut ny l a hnh do chng to ra
nhiu hnh thi khc nhau cc lp tha k.
Chng ta c th truy cp n cc phng thc hay thnh vin b np chng
bng cch tham chiu chng vi t kho parent v ton t tham chiu ::, tip theo
l phng thc hay thnh vin cn tham chiu (parent::ten_phuong_thuc).
V d di y m t cch thc np chng:
Quote:
< HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</HEAD>
<BODY>
<?
class hoso
{
public $ho_ten = "Nguyn Huy Hong";
public $ngay_sinh = "25/7/2003";
public function in_hoso()
{
echo "H tn:" . $this->ho_ten . ". Ngy sinh: " . $this->ngay_sinh;
}
}
class hoso2 extends hoso
{
public $noi_sinh="Thanh Ho";
public function in_hoso()
{
parent::in_hoso();
echo ". Ni sinh: " . $this->noi_sinh;
}
}
$hoang=new hoso2;
$hoang->in_hoso();
?>
</BODY>

Email: Mrhaisyc@gmail.com

86

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

</HTML>
Nh cc bn thy, i tng $hoang thuc lp hoso2 c k tha mi th
lp hoso. Trong lp hoso2, chng ta nh ngha mt hm trng tn vi mt
hm c sn trong lp hoso (hm in_hoso()). Hm in_hoso() ca lp hoso2
np chng thay th cho hm in_hoso() ca lp hoso, nhng trong bn thn n li
c th triu gi trc tip n hm in_hoso() trong lp cha (hoso).
Bi 12: ng dng sockets vi php
Sockets l mt cch thc dng trong PHP kt ni vi mt server khc qua mng
hay internet.
function cn bn m kt ni n server l fsocken(). C th bn s thy ngc
nhin ti sao bn li mun kt ni n server khc. Nu bn cn thm thng tin v
3rd party server th sockets l ci cho bn cn.
Tutorial ny hng dn chng ta cc phng thc sau y :
# Connect To A Server Using Sockets
# Disconnect From a Server%br%
# Send a request to a server%br%
# List the number of lines returned by the server on a request%br%
# Use sockets in a practical project like a whois look-up script
Kt ni qua s dng sockets vi PHP
Nu bn c ngh ni kt vi internet server khc vi php rt rc ri , c l bn
hi lm. Bn ch cn ni mng bng mt dng code ca php. trong phn ny s
gii thch cch ni v ngt ni mng qua s dng sockets.
Quote:
<?php
/*
Tham s m fsockopen cn l:
fsockopen(IP/Hostname, cng (port), Li ($errno), miu t li pht hin($errdesc)
*/
$fp = fsockopen( "www.phpvn.org", 80, $errno,
$errdesc);
?>
Bn thit lp mt kt ni n server vd: phpvn.org. Bn cng nn lm quen vi
function fclose() ngt ni mng.
<?php
$fp = fsockopen( "www.phpvn.org", 80, $errno,
$errdesc); //establish connection

Email: Mrhaisyc@gmail.com

87

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

fclose($fp); //close connection


?>
Gi mt Request
Trong phn k tip ny bn s lm quen vi cch gi mt request n server v
cho th hin mt danh sch m server gi tr li cho bn cng nh cch lm vic
ca n. Vic trc tin cn lm l m mt kt ni n server vi mt tn bin $fp,
c ngha bn gi mt $fp v nhn c mt kt qu tr v t server m bn
gi n.
Quote:
<?php
/*
Kt ni n server vd: www. example.com
*/
$host = "www.example.com";
$page = "/index.html";
$fp = fsockopen($host, 80, $errno, $errdesc) or
die("Connection to $host failed");
/*
Chng ta xc nh thng tin ca header gi n cho server
GET, c hiu chng ta mun nhn c thng tin hay trang web t server
Bn cng c th s dng POST lm vic ny.
*/
$request = "GET $page HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
$request .= "Referer: $host\r\n";
/*
S dng function fput() gi i hi(request) n server v to mt vng lp (loop)
ly kt qu c t mng, c gi l $page
*/
fputs($fp, $request);
while(!feof($fp)){
$page[] = fgets($fp, 1024);
}
/*
ng mng ng thi ly tng s trang nhn c
*/
fclose($fp);
echo "The server returned ".(count($page)).
" Lines";
/*

Email: Mrhaisyc@gmail.com

88

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

To vng lp (for) v in d liu.


*/
for($i=0; $i&lt;count($page); $i++){
echo $page[$i];
}
?>
Tm kim (Searching for a page)
Trong phn ny chng ta s dng fsockenopen() k ni n nhiu server v
kim sot mt trang no trong server.
Quote:
<?php
$servers = array(
"www.example.com" =&gt; "/index.html",
"www.example2.com" =&gt; "/index.php"
);
/*
To vng lp cho server array v kt ni n mng,
Bo li nu khng kt ni c
*/
foreach($servers as $host=&gt; $page){
$fp = fsockopen($host,80,$errno,$errdesc,10);
echo "Trying $host&lt;br&gt;\n";
if(!$fp){
echo("couldnt connect to $host");
echo "&lt;br&gt;&lt;hr&gt;&lt;br&gt;\n";
continue;
}
/*
Xc nh thng tin, v gi request n server
*/
echo "trying to get $page&lt;br&gt;\n";
$request = "HEAD $page HTTP/1.0\r\n\r\n";
fputs($fp, $request);
echo fgets($fp, 1024);
echo "&lt;br&gt;&lt;br&gt;&lt;br&gt;\n";
/*
ng mng
*/
fclose($fp);
}

Email: Mrhaisyc@gmail.com

89

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

?>
Dng code trn c din nh sau:
Trying: Example Web Page
Trying to get: /index.html
HTTP/1.1 200 OK
N ch hin nhng trang tm c, nu khng s thay th trang 404 bng m s
200.
ng dng Whois
Bn bit qua ng dng kt ni n mt server, to vng lp in kt qu v
cch ng mng. chng ta thc hnh thm mt vi thao tc cho ng dng whois.
Quote:
<?php
extract($_POST);
function whois($domain,$ext){
$url=$domain.$ext;
/*
s dng switch() xc nh whois server no l server thch hp
nht kt ni domain
*/
switch($ext){
case ".co.uk":
$whois = "whois.nic.uk";
break;
case ".com":
$whois = "whois.networksolutions.com";
break;
case ".fr":
$whois = "whois.nic.fr";
break;
case ".biz":
$whois = "whois.biz";
break;
default:
$whois = "whois.networksolutions.com";
}
if (trim($url) &lt;&gt; "") {
$url = trim($url);
/*

Email: Mrhaisyc@gmail.com

90

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

kt ni n server
*/
$f = fsockopen($whois, 43, $errno, $errstr, 30);
if (!$f) {
echo "Connection To Server Failed ($errno)";
} else {
/*
Gi domain n mt server v ch nhn kt qu
*/
fputs($f, "$url\r\n");
print "&lt;pre&gt;\r\n";
while (!feof($f)) {
echo fread($f,128);
}
print "&lt;/pre&gt;";
/*
ng mng
*/
fclose($f);
}
}else{
echo "Invalid domain entered";
}
}
?>
Bi 13: LDAP (Lightweight Directory Access Protocol)
Hin nay, xy dng cc h thng ln, iu ti quan trng l phi lm cch no
c th tch hp d liu t c th dng chung gia cc h thng khc nhau.
Trong , tch hp ti khon ca ngi s dng l vn cn thit nht trong
nhng ci "ti quan trng" trn.
Hy tng tng mt h thng vi khong 5 - 6 m un khc nhau, mi m un
li c thit k trn mt nn tng khc nhau (C ng th dng Oracle + AS
Portal, c ngi th xi DB2 vi WebSphere, lo khc th MySQL vi phpnuke,
ng th xi Wndow, lo th ci Linux, c thng in li ch thch Unix...hic, cuc
i tht ng l b kh), do cn c mt h thng ngi dng khc nhau. Vy
th vi mi m un, ngi s dng cn phi c mt User Name, mt mt khu
khc nhau, l iu khng th chp nhn c. Ngi dng chng my chc m
chn ght h thng.

Email: Mrhaisyc@gmail.com

91

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Lm cch no c th tch hp c ngi dng gia cc h thng trn? Cu tr


li l LDAP.
Vy LDAP l g?
LDAP - vit tt ca Lightweight Directory Access Protocol, hay dch ra ting Vit
c ngha l giao thc truy cp nhanh cc dch v th mc.
L mt giao thc tm, truy nhp cc thng tin dng th mc trn server.
N l giao thc dng Client/Server dng truy cp dch v th mc.
LDAP chy trn TCP/IP hoc cc dch v hng kt ni khc.
L mt m hnh thng tin cho php xc nh cu trc v c im ca thng tin
trong th mc.
L mt khng gian tn cho php xc nh cch cc thng tin c tham chiu v
t chc
Mt m hnh cc thao tc cho php xc nh cc tham chiu v phn b d liu.
L mt giao thc m rng
L mt m hnh thng tin m rng.
y chng ta cn trnh hiu nhm t "th mc" nh trn Windows l folder hay
directory, l th mc theo ngha hp qun l h thng tp tin. T th mc
trong LDAP mang ngha rng hn, n bao hm cc cu trc d liu dng lit k
theo th mc (hay mc lc) - mt "t kho" ca dn th vin nhm m ch cch
thc sp xp d liu tin truy xut nht.
Lm vic vi LDAP thng qua PHP
Trnh t c bn khi c thao tc vi LDAP gm cc bc
Connect (kt ni vi LDAP)
Bind (kiu kt ni: nc danh hoc ng nhp xc thc)
Search (tm kim)
Interpret search (x l tm kim)
Result (kt qu)
Close connection (ng kt ni)
Ldap_connect():
hm kt ni ti my ch LDAP, hm ny c 2 tham s: hostname (tn my ch
LDAP) v port (cng kt ni, mc nh l cng 389)
Ldap_connect(string hostname, int port);
<?php
// LDAP variables
$ldaphost = "ldap.example.com"; // your ldap servers

Email: Mrhaisyc@gmail.com

92

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$ldapport = 389; // your ldap server's port number


// Connecting to LDAP
$ldapconn = ldap_connect($ldaphost, $ldapport)
or die("Khng th kt ni c n $ldaphost");
?>
Ldap_bind();
Hm ni kt vi server LDAP c th thao tc vi LDAP
Vd kt ni vi LDAP server bng user v password hp l
<?php
// using ldap bind
$ldaprdn = 'uname'; // ldap rdn or dn
$ldappass = 'password'; // associated password
// connect to ldap server
$ldapconn = ldap_connect("ldap.example.com")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding to ldap server
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
// verify binding
if ($ldapbind) {
echo "LDAP bind successful...";
} else {
echo "LDAP bind failed...";
}
}
?>
Nu kt ni bng quyn anonymously
<?php
//using ldap bind anonymously
// connect to ldap server
Email: Mrhaisyc@gmail.com

93

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$ldapconn = ldap_connect("ldap.example.com")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding anonymously
$ldapbind = ldap_bind($ldapconn);
if ($ldapbind) {
echo "LDAP bind anonymous successful...";
} else {
echo "LDAP bind anonymous failed...";
}
}
?>
ldap_search();
ldap_search ( resource link_identifier, string base_dn, string filter [, array
attributes [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]] )
VD tm kim cc thng tin ca tt c mi ngi trong My Company ni
surname hoc given name cha trong bin $person. V d ny yu cu server tm
ra thng tin ca nhiu hn mt thuc tnh cn tm kim.
<?php
// $ds is a valid link identifier for a directory server
// $person is all or part of a person's name, eg "Jo"
$dn = "o=My Company, c=US";
$filter="(|(sn=$person*)(givenname=$person*))";
$justthese = array("ou", "sn", "givenname", "mail");
$sr=ldap_search($ds, $dn, $filter, $justthese);
$info = ldap_get_entries($ds, $sr);
echo $info["count"]." entries returned\n";
?>
Ldap_close();
Hm ng kt ni vi LDAP, hm ny tng ng vi ldap_unbind();

Email: Mrhaisyc@gmail.com

94

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

bool ldap_unbind ( resource link_identifier );


Nu kt ni ng thnh cng s tr v gi tr TRUE, ngc li l FALSE.
ldap_add();
Hm thm cc entry vo th mc LDAP
bool ldap_add ( resource link_identifier, string dn, array entry )
<?php
$ds = ldap_connect("localhost"); // assuming the LDAP server is on this host
if ($ds) {
// bind with appropriate dn to give update access
$r = ldap_bind($ds, "cn=root, o=My Company, c=US", "secret");
// prepare data
$info["cn"] = "John Jones";
$info["sn"] = "Jones";
$info["mail"] = "jonj@example.com";
$info["objectclass"] = "person";
// add data to directory
$r = ldap_add($ds, "cn=John Jones, o=My Company, c=US", $info);
ldap_close($ds);
} else {
echo "Unable to connect to LDAP server";
}
?>
ldap_delete();
Xa mt entry khi th mc LDAP
bool ldap_delete ( resource link_identifier, string dn )
Hm tr v gi tr TRUE nu xa thnh cng v FALSE nu tht bi.
ldap_compare();
So snh gi tr ca mt thuc tnh
mixed ldap_compare ( resource link_identifier, string dn, string attribute, string
value )
VD:

Email: Mrhaisyc@gmail.com

95

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

<?php
$ds=ldap_connect("localhost"); // assuming the LDAP server is on this host
if ($ds) {
// bind
if (ldap_bind($ds)) {
// prepare data
$dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI";
$value = "secretpassword";
$attr = "password";
// compare value
$r=ldap_compare($ds, $dn, $attr, $value);
if ($r === -1) {
echo "Error: " . ldap_error($ds);
} elseif ($r === true) {
echo "Password correct.";
} elseif ($r === false) {
echo "Wrong guess! Password incorrect.";
}
} else {
echo "Unable to bind to LDAP server.";
}
ldap_close($ds);
} else {
echo "Unable to connect to LDAP server.";
}
?>
Ldap_count_entries();
m s lng cc entry c tm thy t kt qu ca lnh tm kim.
int ldap_count_entries ( resource link_identifier, resource result_identifier )
ldap_error();

Email: Mrhaisyc@gmail.com

96

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

tr li thng bo li LDAP ca lnh LDAP cui cng.


string ldap_error ( resource link_identifier )
ldap_first_attribute();
hm tr li thuc tnh u tin ca entry
string ldap_first_attribute ( resource link_identifier,
resource result_entry_identifier,
int &ber_identifier )
ldap_first_entry();
tr li kt qu id u tin ca entry
ldap_first_entry ( resource link_identifier, resource result_identifier )
ldap_first_reference();
tr li tham chiu u tin
ldap_first_reference ( resource link, resource result )
ldap_free_result();
gii phng kt qu b nh
Bi 14: Thao tc vi Email
Trong PHP, chng ta c th vit cc ng dng email ngon lnh c outlook mt
cch kh n gin.
Bi vit ny gii thiu mt s k thut dng gi v nhn email bng PHP.
Phn I. Gi email bng PHP
Trong PHP c hai cch gi mail: Gi email trc tip bng hm mail (chy trc
tip trn my ch) v gi email thng qua mt mail server khc (cch ny phc
tp hn so vi cch trn v ta phi kt ni ti my kia v bit cch hat ng ca
chm giao thc SMTP).
1. Gi email thng qua hm mail()

Email: Mrhaisyc@gmail.com

97

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

gi email trc tip t my ch, ta c th s dng hm mail () vi c php nh


sau:
mail (dia_chi_nhan,tieu_de,noi_dung,cac_tham_so_mo_rong _tuy_chon).
V d:
<html>
<body>
<?php
if (isset($_REQUEST['email']))
//if "email" is filled out, send email
{
//send email
$email = $_REQUEST['email'] ;
$to = $_REQUEST['to'] ;
$subject = $_REQUEST['subject'] ;
$message = $_REQUEST['message'] ;
mail( $to, "Subject: $subject",$message" );
echo "Thank you for using our mail form";
}
else
//if "email" is not filled out, display the form
{
echo "<form method='post' action='phpmail.php'>
Ngi gi: <input name='email' type='text' /><br />
Gi ti: <input name='to' type='text' /><br />
Tiu : <input name='subject' type='text' /><br />
Ni dung:<br />
<textarea name='message' rows='15' cols='40'>
</textarea><br />
<input type='submit' />
</form>";
}
?>
</body>
</html>
2. K thut gi email vi phn Header m rng
K thut ny s cho php bn a thm mt s thng tin vo phn Header ca
thng ip email (Nu bn kim tra email s c phn Header, trong ghi rt
nhiu thng tin , chng hn nh a ch IP xut pht, qua nhng my email no,
thi im...).
Email: Mrhaisyc@gmail.com

98

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

y chng ta s s dng phn tham s m rng.


VD:
$ThongTinMoRong="From: webmaster@$SERVER_NAME\r\n"
."Reply-To: webmaster@$SERVER_NAME\r\n"
."X-Mailer: PHP/" . phpversion();
mail($EmailGui, $EmailNhan, $NoiDung,$ThongTinMoRong);
3. K thut gi email theo nh dng HTML.
Ch
rng ch mc nh, ni dung thng ip c truyn ti i di
dng vn bn thun ty (plain text), v khng th hin c cc cu
trc HTML thng thng. c th a nh dng HTML vo mail, qua
cho php hin th hnh nh, nh dng font ch..., ta phi a thm
dng sau y vo phn header:
MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
V d:
<?
/* recipients */
$to = "Mary <mary@example.com>" . ", " ; //note the comma
$to .= "Kelly <kelly@example.com>";
/* subject */
$subject = "Birthday Reminders for August";
/* message */
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>

Email: Mrhaisyc@gmail.com

99

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
/* To send HTML mail, you can set the Content-type header. */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
/* additional headers */
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";
$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";
/* and now mail it */
mail($to, $subject, $message, $headers);
?>

Bi 15: X l th mc v tp tin
Bi vit ny tp trung vo vic iu khin h thng tp tin v th mc trn my
ch (khng phi my khch). Bi ny c chia lm cc phn sau:
Phn 1: Cc hm cn bn x l tp v th mc
Phn 2: Cch thc truy xut d liu t tp tin.
Phn 3: Ti file ln my ch.
Phn I. Cc hm c bn x l tp v th mc
I. Mt s hm x l th mc
1. Thay i th mc gc
thay i th mc gc, ta dng hm chroot
C php:
bool chroot ( string directory)
Hm ny tr v true nu nh th mc gc c chuyn i thnh th mc c
ng dn l directory.
Email: Mrhaisyc@gmail.com

100

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

2. Thay i th mc hin hnh


C php:
bool chdir ( string directory)
Thay i th mc hin hnh sang th mc c ng dn l directory. Hm tr v
TRUE nu thnh cng, ngc li l FALSE.
3. Tr v th mc hin hnh
ly ng dn ca th mc hin hnh, ta dng hm getcwd:
string getcwd ()
4. Hin th danh sch cc tp v th mc con ca mt th mc no :
lm iu ny, ta dng hm scandir
VD:
<?php
$dir = '/source';
$files1 = scandir($dir);
print_r($files1);
?>
h h, y chnh l cch m my con remview hoc backdoor ca my ch hacker
hay s dng duyt qua cc tp v th mc trn my ch y m
5. To mt th mc mi
to mt th mc mi trn my ch, ta dng hm mkdir():
bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]])
VD:
<?php
mkdir("/uploads/images"); // to mt th mc images trong th mc uploads th
mc gc ca website.
?>
6. Xo mt th mc
xo mt th mc mi trn my ch, ta dng hm rmdir():
bool rmdir (string pathname)
VD:
<?php
rmdir("/uploads/images"); // Xo th mc images trong th mc uploads th
mc gc ca website.
?>
II. Mt s hm x l tp tin

Email: Mrhaisyc@gmail.com

101

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

1. i tn tp tin:
i tn tp tin, ta dng hm rename:
bool rename ( string oldname, string newname)
Hm ny s c gng i tn t oldname sang tn mi (newname). Hm s tr v
TRUE nu thnh cng, ngc li l FALSE
2. Xa tp tin
xa tn tp tin, ta dng hm unlink() hoc delete():
int unlink ( string filename)
Hm ny s xa file c ng dn (tn) l filename. Tr v TRUE nu thnh cng,
ngc li l FALSE
3. Copy file
copy file, ta dng hm copy c cu trc nh sau:
int copy ( string source, string dest)
Hm ny s to ra mt bn copy file ngun (sourse) sang file ch (dest). Hm tr
v TRUE nu thnh cng, ngc li l FALSE
V d:
<?
// To ra mt file backup ca file c tn l $file. File backup s c b sung phn
ui mi l .bak:
if (!copy($file, $file.'.bak')) {
print ("Li copy $file...<br>\n");
}
?>
Hm kim tra s tn ti ca mt file:
Khi x l cc file, ta thng kim tra xem file c tn ti hay khng trc khi tin
hnh cc thao tc c, ghi d liu:
C php:
bool file_exists ( string filename)
Hm ny s tr v TRUE nu thnh cng, ngc li l FALSE.
Phn III. Ti file t my khch ln my ch.
Trong qu trnh trao i d liu gia my khch v my ch, ti file l mt cng
vic rt thng gp. c th l vic ti mt file hnh nh ln my ch, 1 file zip
hay 1 file ti liu bt k no . Sau khi a ln my ch, cc file ny s c
cung cp lin kt ngi dng c th ti file v s dng.
Cch ti file thng dng nht hin nay l s dng giao thc FTP. Tuy nhin, ti
khon ftp thng t c chia s v n lin quan rt nhiu n h thng, v thng
Email: Mrhaisyc@gmail.com

102

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

ch c cc admin mi c c ti khon ny. V vy, cc trang web ng thng


s dng mt cch khc truyn ti file ln da vo chun giao thc HTTP (s
dng HTML Form).
I. Xy dng form HTML cho php ngi dng la chn file cn ti
Quay tr li mt form trong HTML, chng ta bit cc thnh phn cn bn ca
form nh: tn form, cc phn t nhp d liu nh textarea, th input, th la chn
select - option...
c th cho php ngi dng la chn mt file no trn my tnh v ti ln,
form HTML ny s c mt cu trc hi c bit mt cht, v c mt thnh phn l
th input vi type="file".
Trc tin, chng ta quay tr li vi th <form>
Nh trn, chng ta bit th form c mt s thuc tnh:
- method: Xc nh kiu truyn d liu l GET hay POST. ti file, method bt
buc phi c kiu POST (v d liu trong file thng l ln hn nhng g m GET
c th truyn ti).
- name: Xc nh tn ca form (tn ny c th c dng truyn d liu qua
javascript)
- action: Xc nh a ch URL m d liu cn gi ti
ti file, ta cn phi bit thm mt thuc tnh na, l thuc tnh enctype vi
gi tr l multipart/form-data.
Nh vy, ti file, ta phi lm mt form nh sau:
<form enctype="multipart/form-data" action="a_ch_web" method="post">
Cc thnh phn trong form nh vn bn, hnh nh, nhp liu...
</form>
Tip , chng ta s trang b mt cho php ngi dng la chn file cn ti
ln. Thnh phn ny cng vn l th input nhng vi type="file":
<input name="ten_phan_tu" type="file">
Khi a th ny vo, n s hin th mt v nt Browse bn cnh. Ngi dng s
kch chut vo nt Browse la chn file nh chng ta thng thy.
Di y l mt form n gin ch cha mt ti file v nt submit:
<form enctype="multipart/form-data" method="post">
La chn file cn ti: <input name="UserFileName" type="file">
<input type="submit" value="Submit">
</form>
II. X l file trn my ch
Email: Mrhaisyc@gmail.com

103

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Nh vy ta xy dng c mt form cho php ngi dng chn file. Sau khi
ngi dng bm nt Submit, file s c ti ln my ch, v c my ch lu
vo mt th mc tm, ng thi sinh ra mt mng c tn l
$_FILES["tn_phn_t_trn_form"] hoc c mt tn khc l
$HTTP_POST_FILES["tn_phn_t_trn_form"]. Vic tip theo l ta phi x l
ci file nh th no?
Trc tin, chng ta th tm hiu xem ci mng kia cha nhng thng tin g:
Vi v d trn, tn_phn_t_trn_form l UserFileName (tng ng vi th
<input name="UserFileName" type="file">)
Nh vy khi ngi dng chn file ri kch chn Submit th trnh duyt s gi file
ln. Sau khi hon tt vic gi file, my ch s sinh ra mt mng c tn l
$_FILES["UserFileName"].
Mng ny cha cc thng tin sau:
$_FILES['UserFileName']['name']: Tn gc ca file trn my khch
$_FILES['UserFileName']['type']: Kiu MIME ca file (nu trnh duyt cung cp
thng tin). V d: "image/gif".
$_FILES['UserFileName']['size']: Kch thc ca file c ti tnh theo byte
$_FILES['UserFileName']['tmp_name']: Tn tm ca file khi n c ti v lu
trn th mc tm ca my ch.
Nh vy chng ta c c y cc thng tin x l file. File ny c th
c m ra ly d liu, c th c copy vo mt th mc no , hoc b xo
b, hay i tn... Xin xem thm phn I v phn II trn bit cc thao tc iu
khin tp v th mc.
Di y l mt v d ly t PHP Manual:
// on m HTML to form
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
// on chng trnh x l file upload:
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
Email: Mrhaisyc@gmail.com

104

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

print "File is valid, and was successfully uploaded. ";


print "Here's some more debugging info:\n";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info:\n";
print_r($_FILES);
}
print "</pre>";
K thut ti cc file c dung lng ln
K thut ti file trnh by trn s b gii hn trn nhiu phng din: Khi ti file
ln, thi gian ti lu s gy hin tng script timeout, ng truyn c th b ngt,
nghn, b gii hn kch thc ti trong file php.ini (thng c kch thc ti a
khong 2 MB)...
ti cc file c dung lng cc ln, chng ta phi lm theo cch khc, thng
thng, l s dng phi hp vi AJAX.
Nguyn l ca n l: thay v truyn c file ln, chng ta s chia ra thnh tng phn
nh gi i. Sau , trn my ch s thc hin vic ghp cc phn nh li vi
nhau cho ra mt file hon chnh. Lm theo cch ny s cho php ti cc file
dung lng rt ln, li c th theo di c tin ti file.
Gii thut m phng n gin nh sau:
Bc 1: M file trn my khch, truy cp n v tr d liu ti trc (nu c)
Bc 2: c mt phn d liu trn my khch tnh t v tr d liu ti trc
(nu c). nh du v tr d liu ti
Bc 3: Chuyn phn d liu vo mt phn t form, submit
Bc 4: My ch nhn d liu, m file v ghi phn d liu vo ng v tr trn file
Bc 5: My ch yu cu gi tip, quay li bc 1. Nu ht th kt thc.

Email: Mrhaisyc@gmail.com

105

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Phn III. PHP vi c s d liu


Bi 1: Tng tc x l CSDL MySQL
Khi thit k cc h thng ln vi nhiu ngi truy cp, mt trong nhng iu
ngi ta ngh n ngay lp tc l thit k CSDL sao cho ta c th truy vn nhanh
nht c th.
Lot bi di y s trnh by cc k thut ti u ho h thng vi CSDL
MySQL.
Quy tc 1: Gim thiu s kt ni ti MySQL Server.
Khi kt ni ti CSDL MySQL, chng ta c 2 hm kt ni l mysql_connect() v
mysql_pconnect(). V c bn th hai hm ny c cc tham s y ht nhau, nhng
ni hm ca chng c nhng khc bit ng k.
Theo l thuyt, mi ln gi hm mysql_connect(), h thng s khi to mt kt ni
mi ti CSDL, cn khi s dng hm mysql_pconnect(), h thng s tn dng kt
ni c thit lp trc . Nu trang Web ca chng ta c triu gi nhiu
ln trong mt khong thi gian ngn, hm mysql_connect() s tiu tn mt lng
ng k ti nguyn ca h thng thit lp kt ni. V vy, hy c gng s dng
hm kt ni mysql_pconnect().
Quy tc 2: Thit lp cc trng index v c gng truy vn d liu thng qua
cc iu kin xc lp trn ch s.
Nu cc bn hc qua cu trc d liu v gii thut, hn chng ta cng phi nh
n cc gii thut tm kim nhanh. Chng ta c kt c rng gii thut tm
kim l nhanh nht vi cch tm da trn bng bm hoc trn mng sp xp
(vi thut ton tm kim nh phn ni ting). Cc trng c thit lp dng
index s c sp xp trn mt file ring, khi chng ta truy vn d liu thng qua
cc trng index, cc gii thut tm kim s pht huy tnh hiu qu ti a ca n,
c bit l cc trng index dng s.
V vy, hy c gng thit k cc truy vn cng nh CSDL sao cho ti u nht da
trn nguyn tc ch s ny.
Quy tc 3: Chp nhn d tha d liu
Mt thit k d liu theo dng chun 4 c th rt p mt, nhng khi truy vn d
liu, chng ta s phi "xi tung" nhiu bng quan h c khi ch ly ra mt
record. Ngy xa, khi gi thnh cng cao ngt ngu, dung lng cng b to
nn cc c phi thit k d liu dng "tiu chun cao" nhm gim dung lng
lu tr, nhng ngy nay, dung lng lu tr khng cn l vn ng lo lng, v
Email: Mrhaisyc@gmail.com

106

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

vy trong mt s trng hp, hy chu kh hi sinh tnh p ca chun 4 tng


tc truy vn. Nn nh rng truy vn trn mt bng s nhanh hn rt nhiu ln
khi truy vn trn nhiu bng quan h.
Quy tc 4: Ch ly ng v d liu cn thit
Nhiu ngi thng thch truy vn dng "Select *...". Du * y s bt h thng
lm vic mt nhc hn v phi x l nhiu d liu hn. D liu tr v cng tiu
tn nhiu b nh hn. V vy, thay v select *, hy ch select nhng trng cn
thit.
Mt vn na l khi s dng hm mysql_fetch_array, nhiu ngi thng b
qua cc tham s tu chn. Nu c th, hy s dng tham s MYSQL_ASSOC, khi
h thng s tr v mt mng vi ch s l tn trng, nh vy cc bn s d
hnh dung v tn b nh v phi pht sinh thm mt mng vi ch s dng s.
Quy tc 5: Gii phng b nh ngay sau khi s dng xong
Theo mc nh th PHP s gii phng b nh sau khi chy xong ton b chng
trnh, nhng vi mt c my ch gi nua c k vi hng trm lt truy cp mt
lc th 1 KB b nh cng l mt ti nguyn cc k qu gi. Vy ti sao chng ta
khng gii phng b nh cho nhng th khng dng n?
Sau khi thc hin cc truy vn v thc hin xong cc php tnh ton vi cc bn
ghi ly c, hy chu kh nht ci function mysql_free_result() vo ngay nh.
Bi 2: Lm vic vi PDO (Php Data Objects)
Phn I: Qung co cho PDO
Mt trong nhng chi honh trng nht trong phin bn PHP "5 chm" l s ra
i ca th vin i tng PDO m rng, cho php chng ta thao tc vi cc
CSDL khc nhau mt cch nh nhng, n gin nh l i chi Tt (Ni vy ch
CMXQ thy i chi tt cng kh b x, t nht l ci cng on rc ra khi ci
chn m p ).
chnh thc khi ng PHPVN cho nm mi, CMXQ s trm chn lm mt
serial v PDO. iu kin cn v l:
- Bit qua mt t v ADO, BDO, ODBC hay ci qui g c lin quan n Data
Object cng c ( d so snh vi ci PDO ny)
- Mt cc cafe G7 (ci ny th chc ai cng c sn).
- Nu ngoi Bc th cn mt ci chn m na
No, by gi chng ta bt u:
I. Gii thiu v PDO
Email: Mrhaisyc@gmail.com

107

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

PDO l cm t vit tt ca PHP Data Objects, c ngha l Cc i tng d liu


trong PHP (i loi th). y l mt thnh phn m rng ca PHP nhm cung cp
cho chng ta mt cch thc n gin truy cp vo cc CSDL khc nhau trong
PHP.
Nu nh cc bn tng lp trnh trn .Net, cc bn s thy mt ci gi l ADO
(bn c) v ADO.Net, cn nu cc bn tng code bng Delphi, n cng c mt
mn chi tng t gi l BDO, cn trn Java l JDBC... V c bn th my ci
ny n ging ging nhau, m bn cht l cung cp mt m hnh tru tng truy
cp ti CSDL. (C th coi n nh l mt lp (layer) trong lp trnh a lp).
C ch lm vic ca nhng ci ny c th c m hnh ho nh sau:
ng dng <----> PDO <---> Trnh iu khin cc CSDL <---> Cc truy vn ti
CSDL v kt qu tr v t CSDL <---> CSDL (Access, MySQL, SQL Server,
Oracle....).
Chng ta c th hnh dung rng mi mt H qun tr CSDL c mt cch qun l
d liu khc nhau, chng ai ging ai. V vy, truy xut vo mt loi CSDL no
, chng ta cn phi khai bo trnh iu khin CSDL tng ng vi loi CSDL
. Sau khi khai bo trnh iu khin, chng ta c th kt ni ti CSDL , tin
hnh cc truy vn (c th da trn ngn ng truy vn SQL, qua cc Stored
Procedure... m CSDL h tr), ly kt qu v ri dng cc lnh khc ca PHP
x l kt qu v hin th cho NSD.
II. Ci t PDO
PDO ch xut hin trong PHP t ver 5 chm tr i, v vy nu nh server ca cc
bn ch support di 5 chm, hy chu kh update ln 5 chm.
Sau khi ci t xong, chng ta phi m ci php.ini v enable th vin ny (nu
cha c) cng cc trnh iu khin ti cc CSDL lin quan.
VD di y l dng lnh cu hnh trnh iu khin CSDL chy trn Windows:
extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
Email: Mrhaisyc@gmail.com

108

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
Chi tit hn trn cc HH khc nhau th cc bn chu kh xem trn PHP Manual
nh. Gi t phi i pha cafe .
I. Thit lp kt ni ti CSDL
u tin, chng ta cn phi bit rng PDO thun tu l mt lp (class) c dng
thao tc vi CSDL. V vy, n cng c cc phng thc v thuc tnh nh bt
k mt lp no c xy dng trn PHP.
PDO s dng mt phng thc mc nh l __construct(). Phng thc ny kim
lun nhim v to kt ni ti CSDL. Phng thc ny c cc tham s nh sau:
PDO {
PDO __construct(string dsn,
string username,
string password,
array driver_options);
}
Trong :
- dsn (Data Source Name) l mt chui vn bn cha cc thng tin cn thit
kt ni ti mt CSDL xc nh.
- username v password: cha tn truy cp v mt khu ca mt ti khon c
quyn thao tc trn CSDL .
- driver_options l cc tham s tu chn b sung nu cn.
Ci DSN hi kh nh mt cht, v n tu thuc vo loi CSDL. Nu cn thit th
cc bn chu kh vo Google search. V d di y l mt chui DSN kt ni ti
CSDL MySQL:
'mysql:dbname=testdb;host=127.0.0.1';
V d:
{geshibot lang="php" head=""}<?php
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
?>{/geshibot}
on m trn to ra mt bin $dbh (th hin ca i tng PDO). V __construct
l phng thc mc nh ca PDO nn trong on m trn chng ta khng cn
phi gi tn phng thc ny ra.
II. Hu kt ni ti CSDL
hu kt ni, n gin chng ta ch vic gn instance ca i tng vi gi

Email: Mrhaisyc@gmail.com

109

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

tr null.
VD:
{geshibot lang="php" head=""}<?php
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$dbh=null
?>{/geshibot}
III. S dng PDO truy vn SQL
trn, cc bn bit cch kt ni v hu kt ni ti CSDL. By gi chng ta s
tin hnh thc hin mt truy vn SQL thng qua PDO.
thc hin mt truy vn SQL, chng ta s dng mt phng thc ca PDO l
exec().
PDO {
int exec(string statement);
}
Trong , statement l mt cu lnh SQL. Ch rng cu lnh SQL ny phi chy
c trn CSDL m ta ang s dng, (do mi mt h qun tr CSDL li c mt vi
cu lnh SQL c chng nn ta cn phi ch iu ny). Phng thc trn tr v
kt qu l s "ru" (row - record hay bn ghi) b nh hng bi cu lnh SQL
V d di y s dng xo mt vi bn ghi no :
<?php
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$count = $dbh->exec("DELETE FROM users WHERE user_id<100"); // Xo b
nhng "tn" c "s" nh hn 100.
print(" xo b $count ngi khi CSDL.\n");
?>
Comment: Hic, cc ng thy bi k ra cng ng, mi ngi ai cng c mt ci s
c. Nh b exec delete th toi
Vy l chng ta bit cch thc hin mt truy vn. Tuy nhin, i vn cn di, t
nht chng ta cn phi ly thng tin t CSDL ra ri in n na ch. D sao th hi 2
ht, xin xem tip hi 3 ...
Nu nh cc bn lm theo nhng bc trn th cha , ta phi tm cch ly d
liu tr v t cc query (VD nh truy vn Select chng hn).

Email: Mrhaisyc@gmail.com

110

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

lm iu ny, trc tin chng ta phi s dng mt phng thc khc ca PDO
l PDO->query(). Phng thc ny c nhim v thc thi mt truy vn SQL v tr
v tp kt qu. Thng th tp kt qu ny s c mt lp i tng khc l PDO
Statement x l. y l tp cc phng thc chuyn dng x l kt qu tr v,
n cng gn ging nh ci recordset vy.
PDO {
PDOStatement query(string sql);
}
Cc bn cn ch phn bit gia hai phng thc exec() v query(). Exec() thc
thi mt truy vn v tr v s cc dng b nh hng bi truy vn, cn query() tr
v mt tp kt qu (thng l mt recordset hoc gi tr false). Ngi ta thng
dng exec() truy vn cc cu lnh nh Insert, delete, update..., v dng query()
truy vn cc cu lnh Select.
Chng ta c th ly kt qu ra theo hai cch: Ly v tng dng hay ly v ton b.
im c bit l cng nh vi cc hm x l MySQL, kt qu tr v thng c
lu tr di dng mt mng, rt thun tin v d dng (hay ni ngn gn hn l ...
i tin ).
I. Ly kt qu v theo tng dng
ly kt qu theo tng dng (tng t nh hm mysql_fetch_array()), chng ta
c th s dng phng thc PDOStatement->fetch().
PDOStatement {
mixed fetch(int fetch_style,
int cursor_orientation,
int cursor_offset);
}
Hm ny s dng 3 tham s tu chn:
- Fetch_style xc nh cch thc ly d liu. N c th nhn mt trong cc gi tr
sau:

PDO::FETCH_ASSOC: Tr v mt mng c nh ch s bi tn ct
(field) (Tng t nh MYSQL_ASSOC)

PDO::FETCH_BOTH (mc nh): tr v mt mng c nh ch s bi


tn ct v ch s s nguyn bt u t 0. (tng t nh MYSQL_BOTH)

PDO::FETCH_NUM: tr v mt mng c nh ch s bi s th t ca
ct (xut hin trn query SELECT), bt u = 0 (Tng t nh MYSQL_NUM)
... v mt vi gi tr khc, tham kho thm trong manual, nhng v cha n lc s
Email: Mrhaisyc@gmail.com

111

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

n nn CMXQ khng lit k y.


Cng tng t nh mysql_fetch_array, phng thc ny ly mt dng t v tr con
tr hin ti v y con tr sang dng k tip.
V d:
{geshibot lang="php" head=""}$dbh = new
PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$stmt = $dbh->query("SELECT * FROM user where user_id<10") or die();
echo "<table>";
while (($row = $stmt->fetch(PDO::FETCH_ASSOC))) {
echo "<tr><td>${row['user_name']}<td>${row['e-mail']}\n";
}
echo "</table>";{/geshibot}
II. Ly ton b d liu v a vo mng.
thc hin iu ny, chng ta cn phi s dng mt phng thc khc thay cho
fetch, l fetchall(). Cch thc dng cng tng t nng thng fetch, ch c iu
n a tt c d liu vo mt mng.
V d:
{geshibot lang="php" head=""}$dbh = new
PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
$stmt = $dbh->query("SELECT * FROM user where user_id<10") or die();
$result=$stmt->fetchAll();
print_r($result);{/geshibot}
S dng Prepared statements:
Prepared statement c th coi l 1 mu query c dch sn vi cc tham s c th
thay i c.
Qu trnh x l (parse/prepare) 1 query ca database bao gm vic phn tch, dch
v ti u query trc khi thc hin n. S dng prepared statements, query ch
phi parse 1 ln, sau ta c th dng li n nhiu ln vi cc tham s khc nhau
m khng phi parse li vi mi ln thc hin truy vn nh cch thng thng,
nh s tit kim c ti nguyn v tng tc ng dng. Ngoi ra, s dng
prepared statements cn gip trnh c SQL injection.
to prepared statements, ta s dng phng thc: PDO->prepare()
class PDO {
PDOStatement prepare ( string statement [, array driver_options] )
Email: Mrhaisyc@gmail.com

112

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

}
Trong tham s statement l 1 chui query c s dng cc placeholder lm tham
s u vo. Phng thc ny tr v 1 i tng PDOStatement.
V d:
{geshibot lang="php" head=""}<?php
//To database object
$dbh = new PDO('mysql:host=localhost;dbname=thumotti', 'thumotti', 'thuhaiti');
//To prepared statement
$stmt = $dbh->prepare("INSERT INTO users (name, isMale) VALUES (:name,
:ismale)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':ismale', $ismale);
// Thm record
$name = 'cman';
$ismale = 1;
$stmt->execute();
// Thm record
$name = 'cmxq';
$ismale = -1;
$stmt->execute();
?>{/geshibot}
Gii thch:
- VD trn ta s dng :name, :ismale lm cc placeholder, ni s nhn cc gi tr
c th khi thc hin query. Ngoi cch trn, ta c th dng ? lm placeholder. VD:
{geshibot lang="php" head=""}<?php
$stmt = $dbh->prepare("INSERT INTO users (name, isMale) VALUES (?, ?)");
?>{/geshibot}
- Phng thc PDOStatement->bindParam() gn placeholder vi 1 bin, ging
nh PDOStatement->bindValue(). 2 phng thc ny hon ton ging nhau ngoi
tr vic bindParam() gn bin theo tham chiu. Placeholder khi c s dng di
dng ? s c phn bit bi th t ca chng. VD:
{geshibot lang="php" head=""}<?php
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $ismale);
?>{/geshibot}
- Phng thc PDOStatemen->execute() thc hin cu lnh prepared statement.
Tham s truyn vo l 1 mng. Nu b trng tham s, phng thc s s dng gi
tr ca cc bin m ta gn cho placeholder. VD:

Email: Mrhaisyc@gmail.com

113

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

{geshibot lang="php" head=""}<?php


$stmt->execute(array(':name'=>'cman', ':ismale'=>1));
$stmt->execute(array('cmxq', -1)); //Khi placeholder s dng ?
?>{/geshibot}
Bi 3: Thc hin cc truy vn thm, xa, sa bn ghi thng qua cu lnh SQL
Trong bi vit ny, ti s dng MySQL chy trn nn my ch localhost, ngi s
dng c username l mysql_user, mt khu l mysql_password.
CSDL c tn l CMXQ_Forum, trong c mt bng l CMXQ_Users lu
thng tin v nhng thnh vin ca din n. Bng CMXQ_Users c cc trng
sau:
User_ID: Autonumber.// m s ca ngi dng
User_Name: Varchar [20] // tn truy cp ca ngi dng
User_Pass: Varchar[64] //mt khu ca ngi dng
User_IP: Varchar [15] //a ch IP ca ngi dng.
User_Post: Number // S bi vit ca ngi dng.
By gi ti s tin hnh mt s thao tc thm, sa v xa d liu trn bng . Xin
xem li bi Cn bn v SQL.
thc thi mt cu lnh SQL bt k trong PHP tc ng ln MySQL, ta dng
hm mysql_query (chui_cu_lnh_SQL)
I. Thm mt bn ghi vo bng.
V d ti mun chn thm mt ngi s dng c User_Name l "CMXQ",
User_Pass l "123456", User_Post=0 ta lm nh sau:
<?
$sql = "INSERT INTO CMXQ_Users (User_Name, User_Pass) VALUES
("CMXQ","123456",0);
mysql_query ($sql);
?>
II. Xa mt bn ghi khi bng.
Trong trng hp ny, ta s dng cu lnh SQL DELETE FROM:
VD: ti mun xa khi bng CMXQ_Users tt c nhng ngi c
User_Name="CMXQ":
<?
$sql = "DELETE FROM CMXQ_Users WHERE User_Name='CMXQ'";
mysql_query ($sql);
?>
III. Sa thng tin ca bn ghi trong bng.
Trong trng hp ny, ti s dng c php UPDATE:
VD: Ti mun cp nht a ch IP cho ngi c User_Name="CMXQ" vi a ch
IP c ly t trnh duyt:
<?
Email: Mrhaisyc@gmail.com

114

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$sql = "UPDATE CMXQ_Users SET User_IP ='" .


$_SERVER['REMOTE_ADDR'] . "' Where User_Name='CMXQ'";
mysql_query ($sql);
?>
(Bin $_SERVER['REMOTE_ADDR'] cha a ch IP ca trnh duyt. Xin xem
li bi trc)
Bi 4: Cc thao tc kt ni ti MySQL v la chn CSDL bng PHP
Bi vit ny s tp trung vo vic khai thc h qun tr CSDL min ph MySQL.
Ti sao li s dng MySQL?
MySQL l mt phn mm qun tr CSDL m ngun m, nm trong nhm LAMP
(Linux - Apache -MySQL - PHP). "Lin minh" m m ny ang c coi l mt
i trng vi cc sn phm m ng "t vi..." (vi g th ti khng bit ) ca
Microsoft (Windows, IIS, SQL Server, ASP/ASP.NET).
Mt s c im ca MySQL
MySQL l mt phn mm qun tr CSDL dng server-based (gn tng ng vi
SQL Server ca Microsoft).
MySQL qun l d liu thng qua cc CSDL, mi CSDL c th c nhiu bng
quan h cha d liu.
MySQL c c ch phn quyn ngi s dng ring, mi ngi dng c th c
qun l mt hoc nhiu CSDL khc nhau, mi ngi dng c mt tn truy cp
(user name) v mt khu tng ng truy xut n CSDL.
Khi ta truy vn ti CSDL MySQL, ta phi cung cp tn truy cp v mt khu ca
ti khan c quyn s dng CSDL . Nu khng, chng ta s khng lm c g
c.
Cc bc xy dng chng trnh c kt ni ti CSDL:
Thng thng, trong mt ng dng c giao tip vi CSDL, ta phi lm theo bn
trnh t sau:
Bc 1: Thit lp kt ni ti CSDL.
Bc 2: La chn CSDL.
Bc 3: Tin hnh cc truy vn SQL, x l cc kt qu tr v nu c
Bc 4: ng kt ni ti CSDL.
Nu nh trong lp trnh thng thng trn Windows s dng cc chng trnh
iu khin trung gian (ADO, ODBC...) thc hin kt ni v truy vn, th trong
PHP, khi lp trnh tng tc vi CSDL, chng ta thng s dng thng qua cc
hm.
Email: Mrhaisyc@gmail.com

115

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Ch : Trc khi s dng PHP lp trnh vi MySQL, hy s dng chng


trnh qun l phpMyAdmin to trc mt CSDL, vi bng cng nh ngi
dng... tin thc hnh. Bi hng dn s dng phpMyAdmin s c trnh by
sau.
Trong bi vit ny, ti s dng MySQL chy trn nn my ch localhost, ngi s
dng ca CSDL ny c username l mysql_user, mt khu l mysql_password
Thit lp kt ni ti MySQL.
kt ni ti MySQL, ta s dng hm mysql_connect()
C php:
mysql_connect(host,tn_truy_cp,mt_khu);
trong :
host l chui cha tn (hoc a ch IP) ca my ch ci t MySQL.
tn_truy_cp l chui cha tn truy cp hp l ca CSDL cn kt ni
mt_khu l chui cha mt khu tng ng vi tn truy cp
V d:
<?
mysql_connect ("localhost", "thu_mot_ti","thu_hai_ti");
?>
Khi kt ni ti MySQL thnh cng, hm s tr v gi tr l mt s nguyn nh
danh ca lin kt, ngc li, hm tr v gi tr false.
Ta c th dng hm if kim tra xem c kt ni c ti MySQL hay khng:
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
if (!$link)
{
echo "Khng th kt ni c ti CSDL MySQL";
}
?>
La chn CSDL
la chn mt CSDL no m ngi s dng c tn l tn_truy_cp" c
quyn s dng, ta dng hm mysql_select_db:
mysql_select_db (tn_CSDL);
Hm ny thng c dng sau khi thit lp kt ni bng hm mysql_connect.
Hm ny tr v true nu thnh cng, false nu tht bi.
VD:
<?php
Email: Mrhaisyc@gmail.com

116

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$link = mysql_connect("localhost", "mysql_user", "mysql_password");


if (!$link)
{
echo "Khng th kt ni c ti MySQL";
}
if (!mysql_select_db ("Forums"))
{
echo "Khng th la chn c CSDL Forums";
}
?>
ng kt ni ti CSDL:
ng kt ni ti CSDL, ta dng hm mysql_close.
Hm ny c nhim v ng kt ni ti CSDL c m nh danh c to ra bi
hm mysql_connect().
C php: mysql_close(m_nh_danh_kt_ni).
V d:
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
if (!$link)
{
echo "Khng th kt ni c ti MySQL";
}
mysql_close($link);
?>

Email: Mrhaisyc@gmail.com

117

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Phn IV: PHP x l XML

Bi 1: X l XML
PHP5 cung cp class SimpleXML l mt class rt d s dng, bi ny s hng
dn cc bn parse file XML trong 7 nt nhc.
u tin, ly mt on XML mu tp tnh phn tch:
<?xml version="1.0"?>
<books>
<book isbn="978-1594489501">
<title>A Thousand Splendid Suns</title>
<author>Khaled Hosseini</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.27</amazon_price>
</book>
<book isbn="978-1594489587">
<title>The Brief Wondrous Life of Oscar Wao</title>
<author>Junot Diaz</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.97</amazon_price>
</book>
<book isbn="978-0545010221">
<title>Harry Potter and the Deathly Hallows</title>
<author>J. K. Rowling</author>
<publisher>Arthur A. Levine Books</publisher>
<amazon_price>19.24</amazon_price>
</book>
</books>
to ra mt i tng SimpleXmlElement, cch n gin l truyn vo mt
chui hoc mt file:
// Passing the XML
$books = SimpleXMLElement($XmlData);
//------------------// Passing a filename
$books = SimpleXMLElement('books.xml', null, true);
Nhn vo on XML v d, ta s ly ra tt c cc book hay ca Amazon:
<?php
// load SimpleXML
$books = new SimpleXMLElement('books.xml', null, true);
echo <<<EOF

Email: Mrhaisyc@gmail.com

118

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Publisher</th>
<th>Price at Amazon.com</th>
<th>ISBN</th>
</tr>
EOF;
foreach($books as $book) // loop through our books
{
echo <<<EOF
<tr>
<td>{$book->title}</td>
<td>{$book->author}</td>
<td>{$book->publisher}</td>
<td>${$book->amazon_price}</td>
<td>{$book['isbn']}</td>
</tr>
EOF;
}
echo '</table>';
?>
Bn rng $books (c ch 's' nh) l mt Element do khi nim mi
mt file XML th phi c root element. V th, ng mong i c i
tng SimpleXml khng nh .
Mi element c th c nhiu element con cng loi hay khc loi, v d
ny l cng loi 'book' v class SimpleXmlElement ny cho php ta duyt
qua cc element con cng loi nh mt array nh v d foreach() trn.
Cui cng, ni v c php truy cp child element v attribute. Bc no cha bit
khi nim ny na th:
<book isbn="978-1594489501">
<title>A Thousand Splendid Suns</title>
<author>Khaled Hosseini</author>
<publisher>Riverhead Hardcover</publisher>
<amazon_price>14.27</amazon_price>
</book>

Email: Mrhaisyc@gmail.com

119

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

isbn l mt attribute, cc gi tr ca mt attribute phi trong du (")


<title>, <author>,... l cc child element
Ch gii thch ti y thi, bc no c nh ngm cu XML, XML Schema,... th
5s gi l nn ... t b nh ngng cung tha thi gian ny i v c c nm
may ra hc mi xong m hc t thng 1-12 th ti thng 12 s qun thng 1 . C
vic coi n nh khi nim HTML hc ri xi cho thoi mi nh.
Quay v c php, li coi v d 'simple' trn: $book->title l truy cp child element
trong khi $book['isbn'] l truy cp attribute. Done!!!
n gin th thi, bn thy x l XML data c d cha ?
V d trn, nu bn khng thch dng foreach th c th dng bin counter $i, vit
li l $tempBook = $books->book[$i] ri dng $tempBook x l.
Gi thm vo t XPath cho n bng anh bng em:
XPath n gin l cch ch ra ng dn "path" trong 1 XML document thng qua
cc element cha/con theo c php ging nh th mc ca linux: /home/user/...
Xpath gip bn lc ra cc child element trong cc element cha cng loi, gom li
thnh mng v x l.
V d sau gip bn ly ra tt c cc title ca book v tt c cc s ISBN:
$titles = $books->xpath('book/title');
foreach($titles as $title)
{
echo $title.PHP_EOL;
}
//////////////////////////////////////////////
$isbn = $books->xpath('book/@isbn');
foreach($isbn as $isbn)
{
echo $isbn.PHP_EOL;
}
Nh ch cch dng c php / v /@ nh.
Gi parse th RSS ca tui tr coi sao n
<?php
$rss = new
SimpleXMLElement('http://www.tuoitre.com.vn/tianyon/RssView.aspx?ChannelID=16',

Email: Mrhaisyc@gmail.com

120

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

null, true);
echo "<h1><a href='{$rss->channel->link}'>{$rss->channel>title}</a></h1>".PHP_EOL.'<hr />'.PHP_EOL;
foreach($rss->xpath('channel/item') as $item)
{
echo <<<EOF
<h2><a href='{$item->link}'>{$item->title}</a></h2>
<div>Posted at: {$item->pubDate}</div>
{$item->description}
<hr />
EOF;
}
?>
Cui cng,mt vi thuc tnh ca i tng SimpleXmlElement cc bn s quan
tm:
$value = trim((string) $element); // Bn thn element n l XML, bn ly gi tr
ca element th p kiu v string
$attributes = $element->attributes(); // ly tt c cc attribute
$children = $element->children(); // ly cc child element

Email: Mrhaisyc@gmail.com

121

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Phn V : Bo mt trong PHP


Bi 1: Bo mt vi PHP & Mysql
PHP , mt ngn ng lp trnh m ngun m , p ng cho s pht trin web v s
dng song song vi m HTML. Ngn ng lp trnh PHP cch thc vit gn gi vi
C v PERL , tuy nhin PHP vit d dng v khng cu k nh C hoc PERL vi
cch t bin d chu.
1) Gii thiu s lc
+ PHP , mt ngn ng lp trnh m ngun m , p ng cho s pht trin web v
s dng song song vi m HTML. Ngn ng lp trnh PHP cch thc vit gn gi
vi C v PERL , tuy nhin PHP vit d dng v khng cu k nh C hoc PERL
vi cch t bin d chu.
PHP c th chy trn nhiu h iu hnh nh Linux , Unix , Windows , MAC
OSX , OpenBSD... , nhng ph bin rng ri hin nay l Linux . Tch hp vi cc
dng server nh Apache , IIS . V PHP h tr c nhiu loi c s d liu nh :
Mysql, Oracle (OCI7 and OCI8) MySQL , ODBC ... v nhng loi khc . Hin
nay Mysql th ph bin nht .
+ Mysql ( ``My Ess Que Ell`` ) ,cng ging PHP mt ch l phn mm m ngun
m . Mysql load d liu nhanh v d s dng .
PHP v Mysql c th c coi nh l mt gii php ti u pht trin C s d
liu trn Internet hin nay vi s tin dng v hiu qu ca n , thch hp cho cc
c nhn , t chc , doanh nghip thc hin Thng Mi in t . PHP v MYsql
c th download min ph ti 2 a ch http://www.php.net v
http://www.mysql.com
2) Nhng li c bn thng gp vi PHP m Mysql
+ Dng truyn bin .
Khi lp trnh ta thng thy nhiu li do cch thc truyn bin ra IE hoc
Netcape do form . Khi submit mt form no , cc bin trong form c th truy
xut ra , v c s dng nh l bin ton cc ( global ) , $_POST , $_GET ,
$_VAR ... .NGoi cch a bin t form cn c session v cookies .
Mi con ng truyn bin bao gi cng c ci li v cc hi ca n . y xin
cp n vn tc hi ca n.
Khi mt lp trnh vin , Lp trnh vi PHP nu khng cn thn s dng bin c
th dn n nhiu s nguy him khc nhau .
Cc thc truyn bin c xem l nguy him nht l dng truyn bin trn bar
Email: Mrhaisyc@gmail.com

122

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

address ca cc chng trnh duyt web . Khi k tn cng c th li dng


nhng s h ny khai thc v nguy him l SQL injection .
V d . Khi bn s dng cc bin trc tip trn address bar dng cho cc mnh
logic , th thng d b vt qua .
Code v d :
if ($hello) echo ``hello``;
Code trn cho thy nu tn tn bin hello ri s thc thi . Vy vn ch cn cho
n tn ti . V th ta nn kim tra bin vi mt gi tr no , xc nh th li c
th c thng qua ( nhng nu source ca bn c tham kho th iu ny
coi nh v ngha - S c ni sau ti mc PHP exploit local ) .
Submit form vi hnh thc GET , th cc bin trong form s c truyn trc tip
ln address bar v nu s dng bin ton cc lin quan n Uncode th ... hiu
qu s gim i . Chng hn bn to mt form nh sau :
< input name=``key`` type=text >
< input type=submit value=``Test`` >
< /form >
Xin c ni s v SQL injection vi cch truyn bin ny .
V d :
$a = mysql_query(``SELECT * FROM user $osd``);
Nu $osd trn address l ra nh vy : ORDER by id DESC Th ta c th thay th
bin osd vi mt gi tr khc l code PHP chng hn . Vy l chng khc no to
iu kin cho k tn cng thc hin nhng hnh ng cht ngi . V d :
$osd=``); mysql_query(``INSERT INTO user .....``);
KHi bn nhp ttext vi dng unicode th khi truyn trn address bar cc k t s
khng cn chnh xc na . Vy lm cch no khc phc .
Vng ! C kh nhiu cch , bn c th cookies , session hay hidden bin .
V vn t bin dng hidden trong form HTML . Li th c li nhng hi vn
c .
V d :
Nu bn t mt bin hidden no dng check hoc cho mt mnh logic
thc thi th kh nng bo mt s khng cn , ch cn view source trong CT duyt
web l l nguyn si . V khi k tn cng c th to ra cc bin th ... vic check
mnh coi nh v ngha .
V khi cho php nhn thng tin t cc input a vo CSDL ri chuyn ti ra
website , nu khng lc nhng th HTML cho php thc thi JAVAscript cng
nguy him khn lng : Tn dng nhng ccc loi su b , Cc on m chm
thng tin ( cross site Scripting )
Email: Mrhaisyc@gmail.com

123

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

S dng bin t Cookies .


Cookies rt hiu qu cha nhng thng tin , nhng lm dng n qu c th
dn n nguy him . Nu mt lp trnh vin set cookies cc thng tin v mt ti
khon no th ... ch cn xem cookies l xong . Cch khc phc l m ha n
h t .
Th 2 . V d mt cookies sau y:
userid=11
passhash=``helloall``
Vn y l v vic cha thng tin khng cn thit l password ca ti khon.
D m ha hay khng m ha vn nguy him . Nu m ha dng thng thng
nh dng base64 , crypt ... vn dch ngc c v dng MD5 th vn c th Brute
Force .
Vy cookies nhng g cn thit khng nn cha nhng thng tin mang tnh bo
mt .
l nhng li c bn , v thi gian c hn , nn ch nu mt vi li nh th .
3) Safe mode PHP and Mysql local exploit ( LOCAL EXPLOIT)
y l mt li bo mt nguy him nht . Ni nm na l k thut khai thc thng
tin t host chung server .
V d khi bn c host server ABC v k tn cng cng c host chung server v
chung a vi bn th ht sc nguy him .
K tn cng c th lm mi vic th theo bo mt ca server . c th nh :
xem source ( tm li bo mt ca lp trnh ) ,xem thng tin ti khong host ca bn
( username , password , email ) , chim server , by pass server ......
Xin c ni s v li ny .
Ch cn 1 vi backdoor trn server l nguy him khng lng . Khi c s d liu
ca bn dng Mysql l password , user ca database th vic sinh st CDSL
hon ton c th thc thi ( DROP , QUERY , INSERT ... ) , v c bit nguy him
i vi cc server dng Cpanel qun l hosting cho mi ti khon . Mt s
Cpanel to db c info trng vi ti khoi login v Cpanel , FTP , Webmail , POP3
... , v ch mt vi th tht nh ca k tn cng th website ca bn c th thuc
quyn kim sot ca hn vi y quyn hn .
Nu PHP chy trn Linux th vic soi server tm thng tin ch l vic n gin
nhng cng tu theo bo mt ca server . Tnh hnh hin nay mt s Cng ty
VN hosting s dng PHP m Mysql trn Linux cng rt nhiu v vic bo mt cn
kh s si . V vy pht trin thng mi in t mun an ton trc ht phi bo
mt c s d liu mt cch an ton .
Email: Mrhaisyc@gmail.com

124

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Ngoi cch trn , cn c li bo mt ca Web server : Apache , mc tn dng


cng rt cao vi l ny : Apache chunked Vul .
Nguyn nhn xy ra li ny :
- Safe mode : c m
- Cc th mc cha c set quyn .
- Cha setting cho php.ini k .
- PHP cho php set php.ini bt k .
- Mysql cho php truy xut vo c s d liu vi host chung : localhost
Nh ta thng bit , a bt c d liu t ngi s dng vo CSDL ta u
thng qua dng truyn bin form HTML , gm nhiu dng v nhiu cch khc
nhau .
Nh ta thng bit , a bt c d liu t ngi s dng vo CSDL ta u
thng qua dng truyn bin form HTML , gm nhiu dng v nhiu cch khc
nhau .
V th li cng rt nhiu nu ta khng kp ngn chn , c th dn n nhng hu
qu kh lng.
D truyn bin dng POST , GET th li vn c . V li nghim trng l dng cc
bin n so snh hoc thc thi mt mnh logic no .
V d bn lm 1 bin n nh password , email ... th k tn cng c th view
source ca bn , thay i cc trng v thay i lun action . V th nu li th k
tn cng c th tn cng trc tip t nhng li ny vi vi th thut nu trn .
Cch khc phc : Khng t nhng bin n vi mc ch so snh hay thc thi
mnh logic .
Nu bn lp trnh a trc tip cc bin vo thng CSDL m khng thng qua
mt bc kim tra no th nguy him .
Cc nguy him c th xy ra :
- Cross site scripting
- SQL injection
- Buffer overflow in Mysql
V vy bc kim tra cc bin vo ht sc quan trng .
Cch khc phc :
- Cross site scripting : khc phc li ny , bn nn x l bin vo theo kiu
chn cc tag HTML cc hm PHP h tr lm vic : str_replace , strip_tags ,
htmlspecialchars , htmlentities ... ( tham kho thm v cc hm s l chui ) x
l cc tag nh < > chuyn sang m HTML hay thm k t no vo , .... , thay th
cc text nh onmouseover , onload ...
- SQL injection : cc bin a vo thng nguy him nu ``dnh`` du ` , ````
hoc # , v th cch khc phc cng nh trn hoc thm hm addslashes .
- Buffer overflow in Mysql : ci ny thng nghim trng , khi bn a bin vo
Email: Mrhaisyc@gmail.com

125

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

CSDL m khng chng flood th k tn cng c th fresh trnh duyt web hoc
dng nhng script tn cngf t server , host hay localhost khc , lm trn server .
Khin tt nghn ... v server c th ct host bn nh chi . Cch khc phc , so
snh bin nhp vo trng hay thi gian ... ni chung c nhiu cch lm vic ny
, hiu qu v nhanh th dng hm header sau khi submit . ( Nu bn lp trnh dng
hm mysql_fetch_array , cng d b trn server , l do gm d liu vo mng nu
nhiu record th th no ... v th bn c th chuyn qua dng mysql_result , n ly
d liu theo filed v column )
Lu v dng upload file : ci ny cng quan trng khng km , v th bn phi
kim tra dng file g khi c upload v khng s c th lm host ca bn dnh
backdoor .
Dng flood c 2 loi dng Flood Form v Flood Process
- Flood form l g ? Flood form l dng gi d liu hng lot khin cho MYSQL
x l chi vi , v d bn thit k mt form n gin ch INSERT data vo
mysql . Nu D liu ch l mt request th khng sao , cn trong 1 giy m c c
trm request th lp tc hih
Hin ti kh nhiu web site thit k form khng c m xc nhn ? th vn g s
x y r a ?
Nu nhng form nh gp , ng k thnh vin : lu lu c c ngn record do
flood l chuyn thng , nu form x l c gi mail th ng nhin b li
dng lm Bomb mail , lm y CSDL ca mnh .
Nhng hu qu dn n : MYSQL b treo , server cht , b y space , tn
bandwidth . Chng hn 1 record chng 30kbytes th 1000 , hay 10000 c nh vy
lp i lp li theo cp s nhn th space tn kh nhiu cho nhng d liu v ch ,
v cpu s load rt nhiu tn ti nguyn .
- Flood process l g ? L dng flood khng to ra d liu mi m n gi nhng
request khin PHP v Mysql x l kh vt v . Hin ang c tro lu flood PHP
m MYSQL bng X-flash ( Macro Media Flash ) . Minh chng l cc bn thy
trang http://www.hvaonline.net v http://www.hvanews.net hng chu mt ngy
trn c trm t tn cng , nhng ti sao vn ng hin ngang , l do ch bo
mt cao , nu i vi cc site thng l c v b ngm .
Cch phng chng .
- i vi form nhp liu cn to ra m xc nhn dng Hnh nh ( c th xem
phn ng k thnh vin ti PHPeasy , Hvanews v mt s nhng forum khc .
- Cu hnh Mysql chp nhn nhiu kt ni hn ( mc nh MYSQL thng l
100)
Email: Mrhaisyc@gmail.com

126

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

- Thit lp h thng Firewall lc nhng header cha X-Flash


- Chuyn website sang SSL .

Phn VI: PHP v AJAX

Bi 1: Phn trang Ajax JSON v PHP


Lc u th ngh n cao siu lm c nhng bt tay vo vic ri th thy li cc k
n gin v khng kh nh mnh hay cc bn tng tng. Thut ton ca n
cng n gin, ging nh cc thut ton phn trang trong PHP, khng kh khn
nu bn vit c phn trang bng PHP.
iu kin trc khi c bi vit:
1 .Bit 1 t v Th vin JQUERY
2. Hiu 1 t v JSON
3. v PHP ... l ct li. =))
Yu cu:
Download jQuery ti www.jquery.com .
Ci t Webserver ^^ ( tt nhin ri nh :>)
Okie bt u vo vn nh ... ^^
u tin, chng ta cn tham kho hm javascript di y:
{geshibot lang="javascript" head=""}var Pagination = function(offset,
numOfPage, currentPage)
{
var pageStart = parseFloat(currentPage) - parseFloat(offset);
var pageEnd = parseFloat(currentPage) + parseFloat(offset);
var numPage = new String();
if(numOfPage < 1) return false;
numPage += '<ul id="et-pagi">';
if(currentPage > 1) numPage += '<li class="previous"><a href="javascript:;"
name="page'+(parseFloat(currentPage) - 1)+'">&laquo;</a></li>';
else numPage += '<li class="previous-off">&laquo;</li>';
if(currentPage > (offset + 1)) numPage += '<li><a href="javascript:;"
name="page1">1</a></li><li class="spacing-dot"> ... </li>';
for(i = 1; i <= numOfPage; i++){
if(pageStart <= i && pageEnd >= i){
if(i == currentPage) numPage += '<li class="active">'+i+'</li>';
else numPage += '<li><a href="javascript:;" name="page'+i+'">'+i+'</a></li>';
}
}
Email: Mrhaisyc@gmail.com

127

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

if(numOfPage > pageEnd) numPage += '<li class="spacing-dot"> ... </li><li><a


href="javascript:;" name="page'+numOfPage+'">'+numOfPage+'</a></li>';
if(currentPage < numOfPage) numPage += '<li class="next"><a
href="javascript:;" name="page'+(parseFloat(currentPage) +
1)+'">&raquo;</a></li>';
else numPage += '<li class="next-off">&raquo;</li>';
numPage += '</ul>';
return numPage;
}{/geshibot}
Cc tham s truyn vo hm gm c offset, numOfPage v currentPage ...
Gii thch cc tham s:
offset: s phn t div hay cn gi l .... tng trang s hin ra ..
th d : 1 - 2 - 3 - 4 - {5} - .. 100
numOfPage: tng s records chia cho s records hin ra ...
th d: mun hin 10 record v tng s records trong database l 100 th 100/10
currentPage: s trang hin hu.
Trc tin chng ta cn gi ajax ly cc thng tin cn thit thit lp Phn
trang.
{geshibot lang="javascript" head=""}$.ajax({
type: "POST",
url: "./test.php",
processData: false,
dataType: "json",
success: responseJson
});{/geshibot}
Khi d liu c tr v th gi hm responseJson
hm responseJson nh sau :
{geshibot lang="javascript" head=""}var responseJson = function(data){
var rowPerPage = 10;
var html = new String();
var totalPage = parseFloat(data.total) / rowPerPage;
var current = data.crr;
var record = 5;
var currentNow = new String();
$.each(data.items, function(i,item){
html += '<tr><td bgcolor="#f5f5f5">ID: '+item.id+'</td><td>Content:
'+item.content+'</td></tr>';
} );
$("#content-wrapper").html(html);
$("#pagi-wrapper").html(Pagination(record,totalPage,current ));
Email: Mrhaisyc@gmail.com

128

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$("#pagi li a").click(function(){
currentNow = $(this).attr("name").substr(4);
if($(this).attr("name").length > 0)
{
$.ajax({
type: "POST",
url: "./test.php",
data: "currPage="+currentNow,
processData: false,
dataType: "json",
success: responseJson
} );
}
} );
}{/geshibot}
Hm ny mc ch ly d liu tr v t PHP phn tch v in ra kt qu ... li dng
iu ny chng ta cho i km theo n vi d liu ca tng s record hin c
(data.total) v s trang hin hu (data.crr).
{geshibot lang="javascript" head=""}$.each(data.items, function(i,item){
html += '<tr><td bgcolor="#f5f5f5">ID: '+item.id+'</td><td>Content:
'+item.content+'</td></tr>';
} );
$("#content-wrapper").html(html);{/geshibot}
Gi hm each fetch d liu t i tng items v ly ra 2 kt qu cho vo bin
html sau in ra kt qu vi hm .html() ca jquery.
{geshibot lang="javascript" head=""}$("#pagiwrapper").html(Pagination(record,totalPage,current ));{/geshibot}
X l d liu v gi hm Pagination
{geshibot lang="javascript" head=""}$("#pagi li a").click(function(){
currentNow = $(this).attr("name").substr(4);
if($(this).attr("name").length > 0)
{
$.ajax({
type: "POST",
url: "./test.php",
data: "currPage="+currentNow,
processData: false,
dataType: "json",
success: responseJson
} );
}
});{/geshibot}
Email: Mrhaisyc@gmail.com

129

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Tip n th gi s kin click ca khch v gi li hm responseJson


Trang PHP nh sau:
{geshibot lang="php" head=""}<?php
$curr = (!isset($_POST{'currPage'})) ? "1" : $_POST{'currPage'};
$arrData = array(
array("id" => "1", "content" => "Hello the world"),
array("id" => "2", "content" => "Hello the Vit Nam"),
array("id" => "3", "content" => "Hello the Ho Chi Minh City"),
array("id" => "4", "content" => "Hello the Ha Noi City"),
array("id" => "5", "content" => "Hello the Bien Hoa City"),
array("id" => "6", "content" => "Hello the Vung Tau City"),
array("id" => "7", "content" => "Hello the Quang Ngai City"),
array("id" => "8", "content" => "Hello the Nha Trang City"),
array("id" => "9", "content" => "Hello the Da Nang City"),
array("id" => "10", "content" => "Hello the Lang Son City")
);
// when u want usage data page .. please control update more by $curr
$jsonData = json_encode($arrData);
$jsonData = "({'total':'1000','crr':'".$curr."','items':".$jso nData."})";
echo $jsonData;
?>{/geshibot}
Vic tip theo ca bn l ... thay i sao cho hp l l c.
Th l kt thc ..
B xung thm CSS cho n p 1 t
{geshibot lang="php" head=""}#pagi li {
border:0;
margin:0;
padding:0;
font-size:11px;
list-style:none; /* savers */
float:left;
}
#pagi a {
border:solid 1px #ddd;
margin-right:2px;
}
#pagi .previous-off,
#pagi .spacing-dot,
#pagi .next-off {
color:#666;
display:block;
Email: Mrhaisyc@gmail.com

130

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

float:left;
font-weight:bold;
padding:3px 4px;
}
#pagi .spacing-dot {
font-weight:normal;
}
#pagi .next a,
#pagi .previous a {
font-weight:bold;
border:solid 1px #fff;
}
#pagi .active {
color:#ff0084;
font-weight:bold;
display:block;
float:left;
padding:4px 6px;
padding-right:8px;
}
#pagi a:link,
#pagi a:visited {
color:#0063e3;
display:block;
float:left;
padding:3px 6px;
text-decoration:none;
}
#pagi a:hover {
border:solid 1px #666;
}{/geshibot}
Bi 2: Bt u vi AJAX v PHP - ng dng n gin nht
No demo nh: http://www.anhxtanh3087.110mb.com/ajax/1.htm
Bn th g tn vo Name xem!
iu ny lm vi javascript th cng n gin ng ko?Tuy nhin chng ta mun
ly gi server c.Vy th c cch no hay hn l dng AJAX.
ng dng n gin ny gm 2 file
file 1.htm:
{geshibot lang="php" head=""}<html>
<body>
<title>Bat dau voi AJAX & PHP - Anhxtanh3087</title>
<script type="text/javascript">
Email: Mrhaisyc@gmail.com

131

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

function ajaxFunction()
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
//alert("Khoi tao thanh cong doi tuong xmlHttp");
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","1.php",true);
xmlHttp.send(null);
}
</script>
<form name="myForm">
Name: <input type="text"
Email: Mrhaisyc@gmail.com

132

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

onkeyup="ajaxFunction();" name="username" />


Time: <input type="text" name="time" />
</form>
</body>
</html>{/geshibot}
v file 1.php:
{geshibot lang="php" head=""} <?
//bat dau voi AJAX va PHP - Anhxtanh3087
$now = getdate();
$currentTime = $now["hours"] . ":" . $now["minutes"] . ":" . $now["seconds"];
echo $currentTime;
?>{/geshibot}
No!By gi th chng ta s cng m x chng trnh nh! Ti sao chy file .htm
m li ly c thng tin t server? => chnh l AJAX cc bn thn mn
{geshibot lang="javascript" head=""}try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
//alert("Khoi tao thanh cong doi tuong xmlHttp");
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
alert("Your browser does not support AJAX!");
return false;
}
}
}{/geshibot}
Email: Mrhaisyc@gmail.com

133

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

y l on m khi to 1 i tng XMLHttpRequest tn l xmlHttp. Trn


FireFox v Opera 8 phng thc khi to l XMLHttpRequest() cn trn IE l
ActiveXObject("Msxml2.XMLHTTP") ,IE 6 tr ln l
ActiveXObject("Microsoft.XMLHTTP"). OK?
{geshibot lang="javascript" head=""}xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}
xmlHttp.open("GET","1.php",true);
xmlHttp.send(null);{/geshibot}
onreadystatechange: B x l s kin cho mt s kin pht sinh mi khi c s
thay i trng thi.
readyState: Trng thi ca request. C 5 gi tr l
0 = uninitialized,1 = loading, 2 = loaded, 3 = interactive, v 4 = complete.
responseText: tr v t server di dng string.
Cu lnh
{geshibot lang="javascript"
head=""}document.myForm.time.value=xmlHttp.responseText;{/geshibot}
s ly gi tr di dng string tr v t server v lu vo bin time (i loi th ^^)
{geshibot lang="javascript" head=""}void open(string method, string url, boolean
asynch, string username, string password){/geshibot}
Phng thc ny thit lp mt phin gi ti server. ngha ca n ny l khi to
mt request. N c hai tham s yu cu v ba tham s ty chn; ta phi cung cp
c t ca phng thc c triu gi (GET, POST, hay PUT) v a ch URL ca
ti nguyn c gi. Cng c th truyn mt bin ch bo kiu Boolean, xc nh
vic truyn l bt ng b - gi tr mc nh l true, ngha l cc request lun bt
ng b theo mc nh. Nu truyn mt gi tr false, qu trnh x l s phi i cho
n khi c phn hi t server. Vic truyn d liu bt ng b l mt li th ca
vic dng Ajax, v vy thit lp tham s ny gi tr false thay i mc ch
vic s dng XMLHttpRequest. Ta thy n rt hu ch trong mt s trng hp
chng hn nh chng thc ngi dng (validating user) trong khi trang web ca
khng h b thay i. Hai tham s cui ty chn, cho php s dng username v
password.
{geshibot lang="javascript" head=""}void send(content){/geshibot}
Phng thc ny thc hin gi request ti server. Nu request c khai bo bt
ng b, kt qu c tr v ngay, cn khng n s i cho ti khi nhn c
response t server. Tham s c th l mt th hin ca mt i tng DOM, mt
lung d liu vo (input stream), hay mt kiu string. Ni dung truyn cho phng
thc ny c gi i nh mt phn trong request.

Email: Mrhaisyc@gmail.com

134

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Tip nha,by gi l n file 1.php


Thi d qu,ko ni na nha :30:
file ny khi c gi s tr v string mang thi gian trn server:
{geshibot lang="php" head=""}echo $currentTime;{/geshibot}

Email: Mrhaisyc@gmail.com

135

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Phn VI: Th vin Script PHP

Bi 1: Hm to alias t title

Thc ra hm ny post nhiu ri,gi post li ln na,c l l khng tha


{geshibot lang="php" head=""}/**
*Hm thay ny c tc dng thay th cc k t ting vit v du cch bng cc k
t khng du v
*du '-'
*
*@author : khng r
*@param string
*@return string
*/
function convert2Alias($cs)
{
$marTViet=array("","","","","","","","","","","","",
"","","","","","","","","","","",""
,"","","","",
"","","","","",
"","","","","","","","","","","",""
,"","","","","",
"","","","","","","","","","","",
"","","","","",
"",
"","","","","","","","","","","",""
,"","","","","",
"","","","","","","","","","","",
"","","","","",
"","","","","","","","","","","",""
,"","","","","",
"","","","","","","","","","","",
"","","","","",
""," ");
$marKoDau=array("a","a","a","a","a","a","a","a","a","a","a"
,"a","a","a","a","a","a",
"e","e","e","e","e","e","e","e","e","e","e",
"i","i","i","i","i",
"o","o","o","o","o","o","o","o","o","o","o","o"
,"o","o","o","o","o",
"u","u","u","u","u","u","u","u","u","u","u",
"y","y","y","y","y",
Email: Mrhaisyc@gmail.com

136

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

"d",
"A","A","A","A","A","A","A","A","A","A","A","A"
,"A","A","A","A","A",
"E","E","E","E","E","E","E","E","E","E","E",
"I","I","I","I","I",
"O","O","O","O","O","O","O","O","O","O","O","O"
,"O","O","O","O","O",
"U","U","U","U","U","U","U","U","U","U","U",
"Y","Y","Y","Y","Y",
"D","_");
return str_replace($marTViet,$marKoDau,$cs);
}{/geshibot}
Bi 2: Cch lc link trong trang html
preg_match_all('/(href=)(.*?)(")/i',$response,$patterns);
var_dump($patterns[2]);
bi 3: Gii hn tc download bng php
{geshibot lang="php" head=""}<?php
/**
* Download with limited speed class file.
*
* i-php group : <http://i-php.net/>
* Copyright (c) <2008>, <i-php.net>
* Licensed under New BSD License
* @filesource download_limited.php
* @copyright
Copyright 2008, i-php group
* @author
habogay@gmail.com
* @link
http://i-php.net/about/
* @since
php 5 . 0
* @version
$Revision: 1 $
* @modifiedby $LastChangedBy: habogay $
* @lastmodified $Date: 2008-08-18 09:45:49 -0500 (Sat, 18 Oct 2008) $
* @license
http://www.freebsd.org/copyright/freebsd-license.html New BSD
Style License
*/
class DownloadLimited
{
/**
* Send the local file to client with limit download rate as user view file name
*
* @param string $localFile file to send
* @param string $userViewFileName filename client will see
Email: Mrhaisyc@gmail.com

137

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

* @param float $downloadRate download limit speed in kb/s (ex: 50 kb/s)


* @return no return
*/
function sendFile($localFile,$userViewFileName,$downloadRate)
{
/** check file exists
* @see file_exists
*/
if(!file_exists($localFile))
{
throw new Exception('File not found execption file :'.$localFile.'
not found');
}
/** check file is file
* @see is_file
*/
if(!is_file($localFile))
{
throw new Exception($localFile.' not is a file');
}
if(!is_readable($localFile))
{
throw new Exception('file '.$localFile.' not readable ');
}
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($localFile));
header('Content-Disposition: filename='.$userViewFileName);
// flush header content
flush();
// open file stream
$file = fopen($localFile, "r");
while(!feof($file))
{
// send the current file part to the browser
print fread($file, round($downloadRate * 1024));
// !important flush the content to the browser
flush();
// !important sleep one second
Email: Mrhaisyc@gmail.com

138

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

sleep(1);

// close file stream


fclose($file);

}
/**
* Send the string data to client with limit download rate as user view file
name
*
* @param string string data to send include ascii,utf-8 character
* @param string $userViewFileName filename client will see
* @param float $downloadRate download limit speed in kb/s (ex: 50 kb/s)
* @return no return
*/
function sendString($data,$userViewFileName,$downloadRate)
{
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($data));
header('Content-Disposition: filename='.$userViewFileName);
// flush header content
flush();
$start=0;
$sendSize=0;
while($sendSize<strlen($data))
{
$sendSize=round($downloadRate*1024);
print substr($data,$start,$sendSize);
$start=$sendSize;
// !important flush the content to the browser
flush();

// !important sleep one second


sleep(1);

}
?>{/geshibot}

Email: Mrhaisyc@gmail.com

139

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Phn VII: PHP Reference


Bi 1: Chui (xu) v cc hm x l chui trong PHP
1 addcslashes :Trch dn xu k t vi nhng vch cho trong kiu C
*Cu trc :addcslashes(string with special characters);
2 addslashes :Trch dn xu k t vi nhng vch cho
*Cu trc : addcslashes(a string with special characters);
3 bin2hex :Chuyn i d liu dng nh phn sang dng biu din h hexa
*Cu trc :bin2hex(string);
4 chop :Tch b nhng khong trng t cui mt xu
5 chr : Cho mt k t c bit trong bng m
*Cu trc : chr(numeric);
6 chuck split : Tch mt xu thnh cc xu nh hn
7 convert cyr string :Chuyn i t mt k t kirin sang mt k t khc
8 count_chart : Cho thng tin v cc k t dng trong xu
9 crc32 : Tnh ton s tha vng a thc ca mt xu
T ng to ra chu ki kim tra tng tha ca a thc di 32bit trong mt xu
10 crypt :Mt cch m ha mt xu
11 echo : In ra mt hay nhiu xu
12 explode :Tch mt xu ra bi xu k t
13 fprintf :Vit mt nh dng chui ra mt dng
14 get html translation table :Cho ra bng dch bng cch s dung cc th tc
html entity decode :
15 hebrev :Chuyn i vn ban logic kh hiu sang vn ban trc quan
16 hebrevc :Chuyn i vn ban logic kh hiu sang vn ban trc quan vi s
chuyn i dng mi

Email: Mrhaisyc@gmail.com

140

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

17 html entity decode :Chuyn i ttc ccthc th HTML sang nhng k t c


th dng c ca chng
18 htmlentities :i tt c cc k t c s dung sang cc thc th HTML
19 htmlspecialchars :i nhng k t c bit sang cc thc th ca HTML
20 implode :Ni cc phn t ca mng vi mt xu
21 join :Hm ny l mt b danh ca hm implode
22 levenshtein :Tnh khong cch gia hai xu
23 localeconv :Ly ra thng tin quy cch s
24,lstrim-- Strip whitespace from the beginning of a string
=>Xo khong trng t phn t u tin ca chui
25,md5_file-- Calculates the md5 hash of a given filename
=>M ho md5 tn file
26,md5 -- Calculate the md5 hash of a string
=>M ho md5 1 chui
27,metaphone -- Calculate the metaphone key of a string
=>Tnh siu kho m thanh ca 1 chui
28,money_format -- Formats a number as a currency string
=> nh dng 1 s nh 1 chui tin t
29,nl_langinfo -- Query language and locale information
=>Ngn ng truy vn v bin tp thng tin
30,nl2br -- Inserts HTML line breaks before all newlines in a string
=>Chn 1 dng ngt HTML trc tt c nhng dng mi trong 1 chui
31,number_format -- Format a number with grouped thousands
=>nh dng 1 s vi hng nghn ch s
32,ord -- Return ASCII value of character
=>Tr li gi tr ASCII ca k t
33,parse_str -- Parses the string into variables
=>Phn tch chui thnh cc bin s
Email: Mrhaisyc@gmail.com

141

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

34,print -- Output a string


=>In ra 1 chui
35,printf -- Output a formatted string
=>In ra 1 chui c nh dng
36,quoted_printable_decode -- Convert a quoted-printable string to an
8 bit string
=>Chuyn 1 chui c th in trch dn sang 1 chui 8 bit.(Gii m)
37,quotemeta -- Quote meta characters
=>Trch dn k t c bit
38,rtrim -- Strip whitespace from the end of a string
=>Xo khong trng t phn t cui cng ca chui
39,setlocale -- Set locale information
=>Thit lp v tr thng tin
40,sha1_file -- Calculate the sha1 hash of a file
=>M ho sha1 1 file
41,sha1 -- Calculate the sha1 hash of a string
=>M ho sha1 1 chui
42,similar_text -- Calculate the similarity between two strings
=>Cho s k t ging nhau ca 2 chui
43,soundex -- Calculate the soundex key of a string
=>Tnh kho ch m ca 1 chui
44,sprintf -- Return a formatted string
=>Tr li 1 chui c nh dng
45,sscanf -- Parses input from a string according to a format
=>Phn tch chui theo 1 nh dng
46,str_ireplace -- Case-insensitive version of str_replace().
=>Tng t str_ replace().
sscanf-- Parses input from a string according to a format
->Phn tch t loi nhp vao t mt xu theo mt nh dng
Email: Mrhaisyc@gmail.com

142

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

str_ireplace-- Case-insensitive version of str_replace().


->Thay th ngc li khi xu b thay th bng str_replace()
str_pad-- Pad a string to a certain length with another string
->Co mt xu ti mt di no vi mt xu khc
str_repeat--Repeat a string
->Lp li mt xu
str_replace-- Replace all occurrences of the search string with the replacement
string
->Thay th tt c cc bin c ca xu tm kim vi mt xu thay th
str_rot13--Perform the rot13 transform on a string
->Thc hin m ho theo rot 13 trn 1 xu
(Rot-13 :Trong cc nhm tin ca mng USENET, y l mt k thut mt m ho
n gin, n lm dch tng k t i 13 v tr trong bng ch ci (cho nn e s
thnh r). Mt m rot- 13 c dng cho mi thng bo tin bt k no c th lm
mt s th v ca mt ngi no (nh) cch gii cho mt tr chi chng hn
hoc xc phm mt s ngi c (nh) bi th v tnh dc chng hn. Nu ngi
c cho gii m thng bo tin ny bng cch pht ra mt lnh thch hp, th ngi
c - ch khng phi tc gi ca thng bo - s phi chu trch nhim i vi
s kh chu do vic c thng bo gy ra.)
str_shuffle--Randomly shuffles a string
->Thay i mt xu bng cch x dch ngu nhin
str_split-- Convert a string to an array
->i mt xu thnh mt mng
str_word_count-- Return information about words used in a string
->Tr li thng tin v nhng t s dng trong mt xu
strcasecmp-- Binary safe case-insensitive string comparison
->So snh xu theo case-insensitive.. nh phn
strchr--Alias of strstr()
->B danh ca strstr()
strcmp--Binary safe string comparison
->S so snh xu bng c s nh phn
Email: Mrhaisyc@gmail.com

143

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

strcoll--Locale based string comparison


->Ni din ra s so snh c s
strcspn-- Find length of initial segment not matching mask
->Tm di ca on u tin m khng tm thy trn b mt ca xu ny i vi
xu kia.
strip_tags--Strip HTML and PHP tags from a string
->Loi b cc th HTML v PHP t mt xu
stripcslashes-- Un-quote string quoted with addcslashes()
->Loi b cc du slashe trong xu do hm addcslashes() to ra.
stripos-- Find position of first occurrence of a case-insensitive string
->Tm ra v tr u tin ca xu ny trong xu kia ca trng hp s l cp xu.
stripslashes-- Un-quote string quoted with addslashes()
->Loi b hm addslashes(), hay ni cch khc, hm ny tr v gi tr ban u ca
xu khi xu b hm addslashes() chn cc du slashe cc k t c bit
stristr-- Case-insensitive strstr()
->Loi b hm strstr() khi trong xu c du chm.
strlen--Get string length
- > L y d i c a x u
strnatcasecmp-- Case insensitive string comparisons using a "natural order"
algorithm
->So snh xu theo th t abc, cc k t c xt t u n cui xu
(VD: a2>a12>a11).
strnatcmp-- String comparisons using a "natural order" algorithm
->So snh xu s dng th t abc v th t ton hc, nhng c tnh trn ton b
xu ( VD: a12 > a11>a2).
strncasecmp-- Binary safe case-insensitive string comparison of the first n
characters
->L mt hm ging nh strcasecmp(), khc ch hm ny c th ch r s k t
trong mi xu em so snh.
strncmp:tr ra gi tr m xu1 di hn so vi su hai.
Email: Mrhaisyc@gmail.com

144

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

strpos:Tm v tr xut hin u tin ca mt xu ny trong xu khc.


strrchr:Tm kim v tr xut hin cui cng ca mt k t trong xu.
strrev:o ngc mt xu.
strripos:Tm v tr cui cng ca xu ny khin n khc mt xu cho trc.
strrpos:Tm v tr ln xut hin cui cng cng ca mt k t trong mt xu.
strspn:Tnh xem di on u ca mt xu m cha ton cc k t thuc xu
khc.
strstr:Ly ra mt on ca xu t v tr xut hin k t cho trc.
strtok:chia ct xu.
strtolower:bin k t ch hoa thnh ch thng.
strtoupper:bin k t ch thng thnh ch hoa.
strtr:chuyn i k t theo mt qui tc no .
substr_compare:khng c thng tin.
substr_count:Tnh s ln xut hin ca mt xu ny trong mt xu khc.
substr_replace:thay th mt on vn bn trong phm vi mt on ca xu k t.
substr:tr ra mt phn ca xu.
trim:Loi b k t tha(whitespace) u v cui mi xu.
ucfirst:vit hoa k t u tin ca mt xu.
ucwords:vit hoa k t u tin ca mi t.
vprints:xut ra mt xu c nh dng
vsprint:quai li mt xu nh dng.

Email: Mrhaisyc@gmail.com

145

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

Bi 2: Cc thng tin khc lin quan n trnh duyt v my ch


Trong PHP, ngoi cc thng tin trnh duyt gi ln thng qua cc con ng
POST, GET, COOKIES, chng ta cng c th thu c mt s thng tin khc c
lin quan n trnh duyt cng nh cc thng s lin quan n my ch nh:
ng dn, a ch IP, phin bn... Cc thng tin ny c lu tr trong bin mng
$_SERVER (i vi cc phin bn mi) hoc $HTTP_SERVER_VARS (i vi
cc phin bn c hn bn 4.1.0):
$_SERVER['PHP_SELF']: Tn file nm trn th mc gc ca website. V d: bin
$_SERVER['PHP_SELF'] trong script t ti a ch
http://example.com/test.php/foo.bar s l /test.php/foo.bar.
$_SERVER['SERVER_NAME']: Tn ca my ch host, ni m on script c
thc thi. Nu on script ny ang chy trn mt host o th gi tr ny s tr v
tn host o .
$_SERVER['SERVER_SOFTWARE']: Chui nh danh ca my ch, thng
c cp trong phn header khi tr li cc yu cu t my khch.
$_SERVER['SERVER_PROTOCOL']: Tn v phin bn ca giao thc m trang
web yu cu. VD: 'HTTP/1.0';
$_SERVER['REQUEST_METHOD']: Loi yu cu c s dng truy cp
trang web. VD: 'GET', 'HEAD', 'POST', 'PUT'.
$_SERVER['QUERY_STRING']: Cu truy vn (cha cc thng tin lin quan n
cc bin v gi tr ca phng thc GET.
$_SERVER['DOCUMENT_ROOT']: Th mc gc ca website, ni m file script
ang c thc thi.
$_SERVER['HTTP_HOST']: Nhng ni dung lin quan n Host header ly t
yu cu hin ti
$_SERVER['REMOTE_ADDR']: a ch ca trnh duyt, ni ngi s dng ang
duyt web.
$_SERVER['REMOTE_PORT']: Cng c s dng trn my khch ( kt ni
ti web server).
$_SERVER['SCRIPT_FILENAME']: ng dn tuyt i ca file cha script
ang chy

Email: Mrhaisyc@gmail.com

146

Yahoo: Nguyenthanhhai702

Ngn Ng Lp Trnh PHP

$_SERVER['SERVER_PORT']: Cng ca my ch web c m truyn d


liu. Mc nh l cng 80.
$_SERVER['SERVER_SIGNATURE']: Chui cha phin bn ca my ch v tn
host o (nu c bt)
$_SERVER['PATH_TRANSLATED']: ng dn file (khng phi l th mc
gc) da trn ng dn ca on
script.
$_SERVER['SCRIPT_NAME']: Cha ng dn ca file script. Thng dng
tr n chnh n.
$_SERVER['REQUEST_URI']: a ch URI (nh danh i vi cc ti nguyn
mng, l mt dng thc m rng ca URL).
###GOOGLEADSN###

Email: Mrhaisyc@gmail.com

147

Yahoo: Nguyenthanhhai702

You might also like