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