DOUG LLOYD: SÃ¥ i vores video pÃ¥ PHP syntaks, Vi talte meget om, hvordan PHP kan bruges pÃ¥ kommandolinjen at køre programmer pÃ¥ en mÃ¥de, vi er temmelig kender fra C. Men som jeg ogsÃ¥ nævnt i denne video, PHP blev oprindeligt udviklet til implementere webprogrammering, hjemmesider. Og sÃ¥ i denne video er vi vil tale om, hvordan vi bruge PHP i webudvikling sammenhæng. Vi ved allerede, fra vores video pÃ¥ HTML, at websites er bygget ud af et sæt af HTML-tags der semantisk definere strukturen af ââen webside. Men websteder, der er bygget med ren HTML lider af en meget, meget alvorlig begrænsning. Og illustrere denne begrænsning, Lad os overveje følgende. SÃ¥ nu jeg ønsker at opbygge en webside at, nÃ¥r brugeren besøger det, det giver mig den nuværende tid i Cambridge, Mass., vise det til den nyeste minut. Hvis jeg var at gøre dette lige nu, Jeg kan sige noget som dette. Aktuel tid i Cambridge-- sÃ¥ jeg har HTML-tags, hoved tags, titel tags, organ tags-- den aktuelle tid i Cambridge er 14:08, udskrive militær tid. Hvad sker der, hvis det er nu 02:09, 14:09? NÃ¥ hidtil med HTML, jeg har at gÃ¥ ind og ændre det til 14:09. Og derefter én minut senere, Jeg er nødt til at ændre det igen. Og derefter én minut senere, Jeg er nødt til at ændre det igen. Og som du kan forestille dig, det er sandsynligvis det værste job nogensinde. Du er webmaster for et webside, og hvert minut, 24 timer i døgnet, du nødt til at opdatere den aktuelle tid ved manuelt Ã¥bne time.html og skiftende bare, at kodestykke at sige aktuelle tid i timer og minutter. Det er nok ikke en meget god brug af vores ressourcer, bÃ¥de menneskelige og beregningsmæssige. Websteder, der alle HTML er helt statisk. Den eneste mÃ¥de du kan opdatere indhold, som vi lige har set, er manuelt Ã¥bne dem kilde filer, redigere dem og gemme dem. Og sÃ¥ nÃ¥r brugeren opdaterer siden, eller besøger siden for den første tid, vil de fÃ¥ det nyeste indhold. Men kun fordi vi har manuelt redigeret det. Hvis vi begynder at blande nogle PHP derinde, vores kode kan fÃ¥ meget mere fleksibel. Og vi kan have en mÃ¥de for vores sider at være dynamisk, eller opdatere sig selv, uden at kræve vores fattige webmaster i det foregÃ¥ende eksempel at være manuelt opdatere ting. De kan gøre det automatisk. Vi behøver ikke at gribe ind. Vi kan fÃ¥ noget søvn. Som sandsynligvis er en god ting, hvis du laver en masse web-programmering. SÃ¥ i CS50 IDE, vi kører en webserver kaldet Apache. Det er en meget almindeligt anvendt, open source webserver system. Dette system har den evnen til at fortolke PHP, hvilket vil være nyttigt, hvis du ønsker at gøre noget PHP programmering. Og i CS50 IDE, har vi en kommando at gøre denne meget let at gøre, apache50 starte. Og sÃ¥ er skrÃ¥streg sti, skrÃ¥streg til, skrÃ¥streg dir, det er bare en rigtig almindelig mÃ¥de angivelse af, hvad du har angivet her er en vej til et bestemt mappe, som du ønsker at være roden site, eller rodsiden, eller den mappe, som din webserver vil begynde at undersøge filer og tjene dem op til kunder, der ønsker det. SÃ¥ lad os pop over til CS50 IDE, bare for at vise dig, virkelig hurtig, hvordan det virker. SÃ¥ her i CS50 IDE, jeg er i en mappe kaldet Uge Zero Nine. Og jeg har to-- jeg har henrettet en LS-kommando bare ovenfor for at vise dig, at jeg har to mapper i her, PHP, hvilket er det sæt af filer, som jeg brugte i PHP syntaks video og derefter PHP-nettet, hvilket er det sæt af filer, som jeg gerne vil bruge i denne video. Og jeg vil gerne starte en web-server instans med indholdet af PHP-webmappen da filerne bliver serveret. SÃ¥ hvad skal jeg gøre? Jeg kommer til at skrive apache50 plads starte, rum PHP, bindestreg nettet. Det er vejen til biblioteket fra hvor jeg i øjeblikket er. SÃ¥ jeg ramte Enter. Det kommer til at gøre en lille smule af ting her. Og sÃ¥ det kommer til at sige, Apache startede med succes. Dit websted er nu tilgængelig at-- og sÃ¥ er der URL'en for webstedet. SÃ¥ hvad skal jeg gøre? Jeg har tænkt mig at hurtigt at kopiere denne. Og jeg har tænkt mig at Ã¥bne up-- og Jeg vil zoome ud en lille smule her-- Jeg har tænkt mig at Ã¥bne op en ny fane i Chrome. Og jeg har tænkt mig at besøge denne URL. Jeg har tænkt mig at trykke Enter. Det kommer til at indlæse. Og jeg vil zoome ud igen. Og vi kan se her, er den indholdet af min PHP web bibliotek. SÃ¥ nu, hvad der dybest set sker her er mit eksempel pÃ¥ CS50 IDE afsoner op disse filer til nogen, der anmoder om dem. Og i løbet af denne video, vil vi sortere af tage et kig pÃ¥ en flok af disse forskellige filer i sammenhæng. For at teste, at din Apache server fungerer, der generelt vil at være tilfældet i CS50 IDE, men hvis du gør dette mere generelt, og du begynde at bygge din egen web servere, der er en virkelig fælles slags analog til, "Hej verden", der er normalt bruges til PHP webudvikling. Som skal have en fil bestÃ¥ende af netop dette code-- en PHP afgrænser sæt med PHP info, parenteser, semikolon i mellem. Som er dybest set en særlig PHP funktion der fortæller dig hvilken version af PHP du kører. SÃ¥ i CS50 IDE, jeg har at filen findes lige til at vise dig, hvad det ville se ud. SÃ¥ jeg ser pÃ¥ min indeks fra min PHP instans. Min Apache eksempel kører indholdet af PHP-Web. Og jeg har en fil her kaldet info.php. Jeg har tænkt mig at klikke pÃ¥ det, zoome ud. Dette er, hvad du vil at se, temmelig meget. Dette er bare at fortælle mig, at min Apache-server fungerer. Og det er, tilsyneladende, den version af PHP, som jeg kører. Dette er mit analog til "Hej verden". SÃ¥ jeg ved, tingene er operationelle. SÃ¥ vi er gode til at gÃ¥. Vi kan fortsætte herfra. SÃ¥ lad os vende det tid eksempel var vi taler om med vores fattige webmaster der skulle opdatere siden konstant. Dette kan være en rettelse til, hvordan Jeg vil gennemføre tingene sÃ¥ledes at webmasteren ikke nødt til at holde opdatere tiden. Det ville bare slags ske automatisk. Den ned nedenfor, HTML, er det temmelig ens, med en enkelt undtagelse. Men her har jeg fÃ¥et nogle PHP pÃ¥ toppen. Jeg har tilsyneladende kaldte denne funktion date_default_timezone_set. Og vi taler ikke om alle disse funktioner i CS50, fordi PHP har formentlig titusinder. Det kunne være lidt af en overdrivelse, men det kan ikke være. Det har fÃ¥et en masse funktioner indbygget. Og sÃ¥ dette er en funktion tilsyneladende sætter min tidszone som USA / Eastern, som er den tidszone, at jeg er i øjeblikket i at gøre denne video. SÃ¥ jeg foretage et opkald til funktion kaldes, dato. Og tilsyneladende, jeg opbevare HANS af noget, der hedder, tid. SÃ¥ hvad sker der her? NÃ¥, dybest set, hvad der er sker er, jeg foretager et opkald til nogle server, der kommer til at fortælle mig, hvad tid i øjeblikket er. Og jeg konvertere den til et format af timer, minutter, sekunder. Og grunden til at det er kapital H er dette kommer til at give mig 24 timer tid, ikke 12 timers tid, hvilket ville være smÃ¥ bogstaver h. Og jeg er bare opbevaring, at i en variabel kaldet, tid. SÃ¥ledes at anden linje i PHP der, kaldet til den funktion, dato, er lige ved at komme noget snor, som er kommer til at give mig den dato, og tid, og en masse andre oplysninger. Og det første argument der, at HIS, er lige ekstrahere vigtig del at jeg holder for dette eksempel, som er den time, minut, og sekund. SÃ¥ det er det alt det der foregÃ¥r. SÃ¥ jeg gemmer det i en variabel $ tid. Og derefter ned pÃ¥ meget bund der, jeg har denne forkortelse for udskrive det aktuelle tidspunkt. SÃ¥ jeg bare kommer til at udskrive ud af, hvad den aktuelle tid er. SÃ¥ lad os tage et kig pÃ¥ denne i CS50 IDE og se, hvordan vi er nu besparelse at webmaster en masse besvær. Okay, sÃ¥ her er jeg igen tilbage pÃ¥ hovedbiblioteket af min Apache instans. Og jeg har en fil her kaldet time.php. Jeg skal bare klikke pÃ¥ det. Og jeg vil rulle op, fordi vi er zoomet ind temmelig langt. Den aktuelle tid er 14:20:34. SÃ¥ jeg gør det timer, minutter og sekunder. Og jeg kan opdatere side og fÃ¥ ny tid. --41. Jeg har tænkt mig at opdatere siden og fÃ¥ ny tid, 44, 46, 47. SÃ¥ jeg er helt klart ikke ændre noget selv. Jeg er her opdatere siden. SÃ¥ jeg kan ikke være tilbage der redigerer den. Og jeg lover dig, det gør jeg ikke have nogen forbundsfæller der er ved at redigere filen pÃ¥ mine vegne pÃ¥ siden. Jeg er bare ved hjælp af denne PHP funktion, tid, til at generere tid for mig automatisk. SÃ¥ selvom jeg sover, og min webserver kører, den bruger, der besøger den side stadig kommer til at fÃ¥ præcis det aktuelle tidspunkt. SÃ¥ det er temmelig godt. Jeg har lavet min hjemmeside mere dynamisk med ikke for meget PHP kode. Det var blot to linjer kode og derefter en lille smule af en udskrift erklæring. Og allerede jeg har en langt mere dynamisk websted end det første eksempel vi sÃ¥ ved begyndelsen af ââvideoen. SÃ¥ husker fra videoen pÃ¥ PHP syntaks at nÃ¥r PHP fortolkeren kører vores program, det ignorerer alt det er ikke inde i PHP afgrænsere, spytte det ud. I dette eksempel, hvad de ting at det var spytte ud var HTML. Og det betyder, at jeg nu kan intersperse HTML og PHP sammen. Fordi tolken vil bare ignorere HTML og bogstaveligt output det. Hvilket er godt, ikke? Fordi formodentlig ved slutningen af ââdagen, Jeg vil gerne have min hjemmeside til være konstrueret af HTML. SÃ¥ledes at enhver webbrowser kan fortolke det eller forstÃ¥ HTML pÃ¥ siden og gøre det som noget, vi kan faktisk forstÃ¥r som mennesker. Og jeg kan kun bruge PHP for de dele af mit site Det kræver dynamik, der kræver mig at have ting, der opdateres konstant. Den statiske oplysninger kan forblive den samme. OK, sÃ¥ det er fint. Men hvorfor skulle jeg gøre det? Hvorfor skulle jeg blande HTML og PHP? Jeg kunne bare udskrive alle HTML, ved hjælp af PHP print funktion. Hvorfor er jeg ikke gøre det? Tænk over det et sekund. Hvorfor, nÃ¥r jeg kunne bare udskrive out-- jeg kunne have linjer af PHP, der bare siger, print HTML-tag, printhovedet. Hvorfor er jeg ikke gøre det? Hvorfor er jeg blande PHP og HTML? Tja, hvis du tror over det et sekund. PHP, tolken har at fortolke, hvad det ser. Og sÃ¥ det kommer til at have at udføre en linje kode. Udskriv HTML. Udskriv Ã¥ben hoved tag. Udskriv Ã¥ben titel-tag. Det kommer til at have til udføre og fortolke at hver eneste skridt pÃ¥ vejen. Hvorfor ikke bare lade tolk bare glans over ting, det ikke forstÃ¥r og gøre det automatisk? Det kommer til at spare mig for en masse tid at blande min HTML og min PHP sammen. Og sÃ¥ det er derfor vi ikke bare Ã¥bne PHP afgrænser og sÃ¥ bare udskrive hele indhold pÃ¥ vores side som en kæmpe PHP ringe til funktionen, Udskriv, og derefter tæt PHP skilletegn og vi er færdig. SÃ¥ det er derfor vi blande dem op sammen. Hidtil har vi ikke set for meget af en forskel fra almindelige PHP syntaks. Det har været temmelig ligetil. Vi har allerede set spørgsmÃ¥lstegn, lige. Vi sÃ¥ et par nye funktionskald, men intet virkelig lyst til at gÃ¥ pÃ¥. Lad os mÃ¥ske gøre tingene lidt avanceret. Hvad nu, hvis vi ønsker at videregive oplysninger mellem forskellige PHP-filer, sÃ¥ mÃ¥ske kan brugeren indsende oplysninger til mig. Og sÃ¥ kunne jeg gøre noget med det pÃ¥ en anden side. SÃ¥ PHP understøtter noget, der hedder Super Global Variabler, hvilket lyder temmelig awesome. De er virkelig bare gigantiske associative arrays at hjælpe med at gennemføre dette funktionalitet forbifarten oplysninger mellem PHP-filer, der er eksisterende pÃ¥ vores web-server. Den første af disse super globals hedder $ _GET. Og det er nok det enkleste at forstÃ¥. Hvad sker der med $ _GET? Tja, dybest set, at brugeren er kommer til at skrive ekstra information ved slutningen af ââvores URL'er. Og uanset hvad de skriver, under forudsætning af det er formateret pÃ¥ en bestemt mÃ¥de kaldes en forespørgsel streng, som er lige et sæt af centrale værdipar adskilt af-tegn. Disse centrale værdipar vil være opbevares i en $ _GET associative array. Og fra vores video pÃ¥ PHP syntaks, vi kender hvordan man arbejder med associative arrays allerede. SÃ¥ her er et eksempel pÃ¥ nogle PHP, hvor mÃ¥ske er jeg udvinding alle de vigtigste værdipar at brugeren leveres i URL'en. SÃ¥ jeg har min Ã¥bne PHP skilletegn. Jeg har en foreach løkke. Jeg iteration tværs af Super Global Array kaldet $ _GET. Og jeg ønsker at være i stand til at henvise bÃ¥de nøglen og værdi. Og jeg er bare udskrive dem ud, hver pÃ¥ tilsyneladende et afsnit tag her. Jeg udskriver nogle HTML og at interpolere værdierne af nøgle og værdi i denne erklæring. SÃ¥ lad os tage et kig pÃ¥, hvordan denne ville faktisk arbejde pÃ¥ vores IDE. Og mÃ¥ske dette vil hjælpe illustrerer en lille smule af, hvad fÃ¥r, er faktisk gør. SÃ¥ jeg er tilbage her i min web rod. Og jeg vil zoome ind pÃ¥ et lille smule til at vise dig at jeg har en fil kaldet, get1.php. SÃ¥ lad os klikker pÃ¥ get1.php. Og Jeg kan ikke se noget indhold. Det er underligt, ikke? Tja, ikke rigtig faktisk. Fordi jeg ikke levere noget i webadressen. Jeg har tænkt mig at get1.php, men jeg ikke leverer nogen centrale værdipar som en del af min forespørgsel streng. SÃ¥ lad os tilføje en forespørgselsstreng og se, hvad denne fil kan gøre. Til at begynde en forespørgsel streng, du blot skrive spørgsmÃ¥lstegn. SÃ¥ mÃ¥ske vil jeg sige name = Doug & Ã¥r = 2015. Og sÃ¥ vil jeg trykke Enter. Nu mærke til, hvad der sker. Jeg er stadig i get1.php. Men nu har jeg leveret centrale værdi par, og jeg er udskrive dem ud pÃ¥ egen hÃ¥nd paragraph-- navn, Doug-- Ã¥r, 2015. Det er præcis den kode vi bare oplevede pÃ¥ diaset for et øjeblik siden. Og hvis jeg vil mÃ¥ske tilføje en anden nøgle værdi par, og class = CS50. Nu har jeg en anden vigtig værdi par, der er udskrevet nÃ¥r jeg revidere URL'en igen. Nu mÃ¥ske er det ikke formateret særlig godt. SÃ¥ jeg har en anden version af get.php. Det er get2.php. Forskellen i dette den ene er jeg har CSS-fil, og det formater tingene lidt mere pænt for mig. Det er mÃ¥ske ikke den mest smukke CSS i verden. Men det er bare en anden mÃ¥de at gøre det. SÃ¥ jeg kan stadig fÃ¥ adgang til mine variabler ved hjælp af $ _GET. Og i dette tilfælde er jeg bare lidt gør CSS lidt mere fancy. Og hvis vi pop over til min IDE til en anden, Jeg vil vise dig i min PHP web mappe her, get2.php. Vi vil Ã¥bne det op, nogle HTML her. Tilsyneladende jeg forbinder ved, at CSS-fil jeg talte om. Jeg Ã¥bner et bord tag. Og sÃ¥ her er min foreach løkke. Her er, hvad jeg viste pÃ¥ diaset før. Den eneste forskel er, at jeg har denne nøgle og værdi CSS styling, at jeg gælder for det. Men det er alt jeg gør, er jeg iteration over $ _GET at fÃ¥ alle De Nøgleværdiparrene. Og jeg udskriver dem ud som tabellen. Og tilsyneladende, jeg formatering tasterne pÃ¥ én mÃ¥de, med