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.