Oratè: Koulye a, kite a plonje nan kòd la distribisyon
ak pran yon gade nan yon kontèks la nan ki kòd la ou ekri
yo pral opere.
Nan fen jounen an, w ap ale nan aplike
antye a nan sèvè a entènèt.
Men, nou te bay ou ak kilè eskèlèt la
Kòd ki gen kèk fonctionnalités, patikilyèman ki gen rapò ak rezo.
Se pou nou pran yon gade.
>> Se konsa, moute isit la nan direksyon tèt la nan dosye a se yon pakèt
nan karakteristik tès kondisyon macro.
Koulye a, sa a se jis yon karakteristik nan c, annakò ak sa dapre yon pakèt moun sou paj moun
ou gen defini kèk nan konstan sa yo yo dwe vre
oswa yo dwe menm nimewo espesifik pou ke ou gen aksè nan fonksyon sèten.
Sinon yo pral sekrè epi ou pa pral gen aksè.
Se konsa, mwen te fè sa a pa fason nan lekti paj sa yo moun.
Koulye a, desann anba a, nan liy 15 a 17, nou
gen yon pakèt antye nan limit te deklare.
>> E nou te prete sa yo ki sòti nan yon popilè sèvè wèb yo rele Apache.
Ak sa yo, se jis nimewo ki yo ale
Cap kantite total nan bytes ki gen dwa
nan divès kontèks pou demann lan HTTP ki se yon navigatè pèmèt yo voye m '.
Next, nou defini okte.
Koulye a, yon oktwor se jis yon fason anpenpan nan di yon multiple, oswa uit miyèt moso.
Vire soti nan autrefois yon multiple pa t 'nesesèman uit Bits,
se konsa oktwor se toujou uit miyèt moso.
Se konsa, nan ka sa a nou te adopte sa ki nan komen nan rezo a
mond nan rele uit bytes yon oktwor.
>> Isit la mwen te espesifye ki okte pral gen 512, se konsa ke anpil tankou nan forensics
lè nou li yon pakèt moun sou bytes nan yon moman, isit la tou,
nou ap ale nan li yon pakèt moun sou okte nan yon tan.
Next yon pakèt antye nan dosye header.
Ki jan t 'mwen konnen genyen ladan sa yo?
Oke Mwen tou senpleman li nonm sa a paj pou yon nimewo nan fonksyon
ki nou pral sèvi ak nan distribisyon sa a Kòd ak mete nan yo menm ki
Mwen te enstwi yo.
>> Epi, koulye a nou gen yon kalite done.
Nou te te deklare yon oktwor yo dwe yon Char.
Epitou, n ap wè pi ta ke sa a, se itilize nan tout kòd la.
E nou te deklare yon pakèt antye nan prototip,
epi n ap mache byen vit nan chak nan sa yo fonksyon.
Anfen, e petèt pi enpòtan kenbe nan
lide nan pwen sa a nan istwa a, se ke gen
se, an reyalite yon antye pakèt moun sou varyab mondyal
nan tèt la nan dosye a, rasin, CFD, SFD, demann, dosye ak kò.
>> Koulye a, jeneralman, lè l sèvi avèk anpil mondyal varyab, oswa varyab mondyal nan tout,
se pa pratik la tounen.
Men, li sanble nou ap tou lè l sèvi avèk yon teknik yo rele manyen siyal pita
nan kòd la, ki pèmèt nou detekte lè itilizatè a frape yon bagay
tankou CTRL C ak fèmen sèvè a grasyeu.
Ak yo nan lòd yo fè sa grasyeu ak aktyèlman gratis moute memwa,
nou bezwen gen aksè a varyab mondyal sa yo.
>> Epi, koulye a kite a pran yon gade nan prensipal yo, ki kondui antye a nan pwogram sa a.
Premyèman, nan tèt la isit la nou gen yon varyab nimewo erè
ki parèt pa gen yon kalite, men sa a
paske li la aktyèlman defini nan yon dosye rele
erè errno.h ki se enkli moute pi wo.
Si ou fè sa nonm erno aktyèlman al nan definisyon pou bagay sa a,
ou pral wè ke sa a se yon plase varyab espesyal ki
se mete pa yon pakèt antye nan fonksyon sa ekri
pa nou, men pa otè yo nan Linux ak lòt sistèm yo aktyèlman mete
yon PO varyab sa lè yon bagay ale mal pou ke ou ka globalman
konnen sa ki te fè ale mal.
>> Koulye a, desann anba a ou pral wè yon nouvo teknik petèt lè l sèvi avèk jetopt,
yon fonksyon ki ede lòd analyzes agiman liy se konsa ke nou pa fè sa
gen bezwen deranje tan gaspiye lè n ap kalkile konnen kouman ou kapab analizan yon bagay tankou 8080,
oswa priz p, oswa h priz jwenn èd.
jetopt esansyèlman fè sa pou nou.
Wè paj la nonm pou pi plis.
>> Apre sa, nou fè yon ti jan nan erè tcheke a asire w
ke nimewo a pò se nan ranje a espesifye nan espèk a.
Next, nou wè yon rele nan fonksyon an kòmanse, ki gen definisyon nou pral
gade nan nan yon moman, epi kòm non li sijere, sa a kòmanse sèvè a entènèt.
Isit la nou gen yon apèl nan yon fonksyon rele siyal ki di,
si ak lè ou tande Kontwòl C soti nan klavye itilizatè a, ale pi devan epi rele
yon fonksyon rele Handler ki k ap pase bagay sa yo finalman pwòp leve, li sispann
sèvè a.
>> Anba a se sa ki sa ki parèt yo dwe genyen yon enfini riban, liy lan premye nan ki
efektivman se yon apèl nan yon fonksyon rele
Reyajiste, ki nou menm nou aplike pita sou yo nan lòd
moute gratis kèk nan eta mondyal nou an.
Apre sa se yon liy nan kòd ki kondisyon
se tcheke retounen nan valè de konekte.
Koulye a, sanble konekte tankou yon suppose, yon bagay ki retounen vre oubyen fo.
Epi li fè sa, men gen nan yon bagay espesyal nan konekte
nan ke li nan yon apèl bloke.
Li pral chita la epi rete tann jouk navigatè yon itilizatè a
ap eseye konekte nan sa a web sèvè ak sèlman Lè sa a, li pral
retounen vre oubyen fo pou nou kontinye anndan an nan sa a si deklarasyon.
>> Yon fwa gen, avi sa a fonksyon nan yon fonksyon rele analyzes, nou te ekri,
ki analysis tout okte yo, tout nan bytes yo vini soti nan yon navigatè
nan sèvè a, pou nou ka men ou tounen finalman yon valè nan yon sèl
nan tout sa yo varyab mondyal ki magazen tout nan bytes yo nan jis
Tèt yo nan ki demann, pa kò a
si te gen aktyèlman yon kò nan li.
>> Koulye a, desann anba a nou kòmanse analizan moun Tèt yo ekstrè
yon sou nan enfòmasyon ki ke nou pran swen sou.
Espesyalman, pou chak nan spesifikasyon, nou premye
te vle mande liy, ki se sèlman sa liy trè premye ki
èspere ke di yon bagay tankou jwenn koupe oswa kèk chemen ak Lè sa a HTTP 1.1.
Nou ap lè l sèvi avèk metafò sa a nan yon zegwi nan yon gwo pile zèb
gade pou patikilye charaktèr oswa adrès.
Ak tout bon, gen nan yon kantite fonksyon nan kòd distribisyon nou an
ke ou, tou, ta ka jwenn itil lè ap chèche pou valè an patikilye.
>> Alafen, nou kopye bytes sa yo nan yon liy varyab rele,
ki remake, tou, nou te resevwa lajan sou pil la
pa fason pou yon etalaj dynamique gwosè.
Epi nou ap fè espre ap eseye pou fè pou evite rele malok
paske ankò, paske nan kontwòl C yo te
yon karakteristik potansyèl de pwogram sa a, nou pa vle gen sa a kòd toudenkou
koupe pa frape nan itilizatè Kontwòl C, rezilta a nan yo ki
se ke mwen pa ta ka gen yon chans pou gratis yon bagay mwen te malloced.
Se konsa, mwen ap eseye sèvi ak kòm anpil nan chemine a se mwen ka isit la.
>> Next moute, yon pakèt antye nan dos.
Spesifikasyon la ap eksplike sou egzakteman sa k ap espere isit la,
men kòmantè yo ba ou yon allusion nan sa ki bay manti devan yo.
Ou premye bezwen valide liy lan demann
ak asire w ke li sanble nan espesifikasyon gramè, se konsa pale,
di li ta dwe.
Ou Lè sa a, bezwen ekstrè yon bagay rele rechèch la, bagay la soti
apre yon mak kesyon, tankou nou te wè ak egzanp Google nou an
nan pase nan yon paramèt HD.
Nou Lè sa a, anchene ansanm rasin lan nan sèvè wèb la
ak chemen an sa a, se nan ke demann premye liy
ak fòme chemen an plen nan dosye a nou vle gade pou.
>> Apre sa, nou ap ale nan asire w ke ke dosye a egziste e se lizib.
Lè sa a, nou ap ale nan ekstrè li yo ekstansyon dosye, html nan oswa php la,
oswa kèk ekstansyon tankou sa a, se nan la trè fen fisèl la mande a.
Moute pwochen se yon antye pakèt moun sou Kòd nou te ekri
ki aktyèlman jenere PHP te pwodwi kontni pou ou.
Nan yon Nutshell, sa a Kòd pran nan non
nan dosye a ou vle PHP ka esplike nou rèv.
Nou pase li pa yon bagay yo rele yon tiyo nan entèprèt PHP a.
Jwenn tounen repons lan tankou si repons lan te yon dosye tèt li.
Lè sa a, nou repekte sou dosye a ki bytes, rale yo tout nan yon sèl zòn de defans
pou nou kapab finalman enprime yo deyò.
>> Vreman vre, tout moun sa yo rele isit la yo dprintf
pèmèt nou ekri ak lèt ​​detache yon bagay rele yon dèskripteur ranpli, ki
se jis yon nonb antye relatif ki reprezante yon dosye.
Trè menm jan an nan lespri, men fondamantalman diferan soti nan yon dosye
zetwal konsèy.
Avi sou jan ou ka itilize sentaks tankou printf isit la pou m 'ka dynamique
Insert yon bagay tankou longè a pou valè a nan yon header HTTP
rele Content-Length.
Epi finalman mwen itilize nan fonksyon dwa aktyèlman ekri
kò a demann lan.
>> Malerezman, nou sèlman aplike sipò pou dynamique
pwodwi PHP dosye.
Nou pa t 'aplike sipò pou dosye estatik tankou jif, ak JPEGs,
ak CSS ak HTML dosye.
Sa, malerezman, ki rete nan ou pou reponn a bi pou kliyan
sa a fè.
Se konsa, nan gen w ap jwenn ke gen nan pa anpil enspirasyon nan ki blòk,
men si ou yon ti kras pi wo moute nan ki jan nou te ale sou entèprete Kòd PHP,
fonksyon yo ou pral sèvi ak se yon ti kras diferan.
>> An reyalite, ou ka prete kèk nan fonctionnalités a
petèt soti nan forensics yo seri pwoblèm, paske
nan fen a nan jounen an tout sa ou bezwen fè isit la se yon fwa ou konnen ki sa dosye louvri
epi yon fwa ou konnen li la sa yo rele Pantomim kalite oswa kontni kalite,
ou bezwen li nan sa yo bytes ak yon jan kanmenm krache yo tounen soti.
>> Epi, koulye a yon toune nan sa a lòt fonksyon dosye a.
Up premye ki konekte, ki tou senpleman retounen vre
lè li finalman tande yon koneksyon ki sòti nan yon itilizatè.
Next moute se erè.
Erè, pandan se tan, kòm yon nou fonksyon te ekri okipe tout nan diferan 400 an
ak estati 500 HTTP kòd ke ou ta ka vle
voye tounen nan itilizatè a, ansanm ak yon mesaj estanda.
>> Next moute se chaj, yon patikilyèman fonksyon etofe, ki gen objektif nan lavi
se li ki sòti nan yon etwal dosye konsèy la sa nan yon dosye nan yon zòn de defans mondyal
ke nou te deklare globalman pi wo a [? prensipal la. ?]
Sa a se yon konplèks ti jan paske nou gen li bytes yo nan dosye a
men tcheke sou chak iterasyon si wi ou non nou te deja
frape nan fen dosye a oswa te yon lòt bagay ale mal.
Apre sa, nou itilize realloc a asire w ke tou sa tanpon nou ap sèvi ak ap grandi
ak ap grandi ak ap grandi ak toujou rete devan yo nan nimewo a nan bytes
ke nou bezwen nan anfòm nan la.
Handler, pandan se tan, se fonksyon an ki vin
rele pa fason pou gen anrejistre Kontwòl C kòm yon siyal
ke nou vle segman aks dèz.
Avi isit la nan kap okipe ke li finalman
apèl sispann, ki nan kou sispann sèvè a entènèt.
Men, malerezman, Passage se pa sa aplike.
Nan Lespri Bondye, sa a se yon fonksyon san patipri ki senp.
Bay yon ekstansyon dosye, li bezwen retounen li nan sa yo rele Pantomim
kalite oswa kontni kalite.
Apre sa, nou presize nan spesifikasyon la sa kat ki dwe.
Men, ou bezwen tradui li finalman nan kòd c.
>> Next moute se fonksyon menm etofe nou an rele analyzes, bi ki gen nan lavi
se li, pa soti nan yon dosye, Men, nan yon koneksyon rezo-a.
Espesyalman, lekti ak analyzes la Demann HTTP ki nan soti nan yon navigatè
nan sèvè a pou ke finalman nou ka analizan
nan jis tèt yo nan demann lan liy epi retounen moun nan ou
pa fason pou yon zòn de defans mondyal ki nou te deklare pi wo a [? prensipal la. ?]
>> Reyajiste, pandan se tan, se yon fonksyon ki nou defini
ki vin rele iterativman andedan nan prensipal chak fwa w ap sou
pare yo kòmanse koute pou yon koneksyon nouvo
pou nou toujou konnen eta a nan varyab nou an
ak pou ke nou te tou libere nenpòt memwa ki
ta ka yo te resevwa lajan pou yon koneksyon rezo anvan yo.
Next moute se kòmanse, nan fonksyon ki nou te ekri
ki gen yon antye anpil nan rezo Kòd
ki finalman kòmanse sèvè a entènèt.
>> Denye moute se fonksyon an rele sispann, ki
fè egzakteman sa, li sispann sèvè a entènèt.
Men, anvan li libere moute nenpòt memwa ki toujou ki te resevwa lajan.
Men, li finalman rele sòti san yo pa menm retounen kontwòl
nan fonksyon prensipal nou an.
Alafen, youn nan la pi teknik enpòtan
lè mete ann aplikasyon sèvè wèb sa a se pral gen yon ti jan nan esè ak erè,
gen yon sèl navigatè louvri fenèt sou bò dwat ak yon fenèt tèminal nan
kite, serveurs konsole a fenèt, se konsa ke ou
ka wè mesaj yo ke yo ke yo te parèt sou ekran an.
>> Men, pi bon toujou ta dwe yon twazyèm fenèt, yon fenèt tèminal dezyèm,
nan ki w itilize telne, l 'a pou ki se preskri nan espèk a.
Epi telne se jis yon trè pwogram rezo senp
ki pèmèt ou pretann yo gen yon navigatè nan yon sèl fenèt
pandan y ap pale nan fenèt la ak lòt.
Fason sa a ou ka wè egzakteman kòmandman yo textuelle
ke yo vini tounen soti nan sèvè a kliyan
san yo pa gen poking alantou pwomotè Chrome a
zouti nan yon otreman clunkier koòdone.