DOUG LLOYD: Så i vår video på PHP syntax, Vi pratade mycket om hur PHP kan användas på kommandoraden att köra program på ett sätt som vi är ganska bekant med från C. Men som jag nämnde också i att video, PHP utvecklades från början till genomföra webbprogrammering, webbplatser. Och så i den här videon är vi kommer att tala om hur vi använda PHP i webbutveckling sammanhang. Vi vet redan, från vår video på HTML, att webbplatser är byggda ut ur en uppsättning HTML-taggar som semantiskt definiera strukturen för en webbsida. Men webbplatser som är byggd med ren HTML lider av en mycket, mycket allvarlig begränsning. Och för att illustrera denna begränsning, låt oss betrakta följande. Så nu vill jag bygga en webbsida att när användaren besöker det, det ger mig den nuvarande tid i Cambridge, Mass., visar det till den senaste minuten. Om jag gjorde detta just nu, Jag kan säga ungefär så här. Tiden i Cambridge-- så jag har HTML-taggar, huvud taggar, rubriktaggar, kropp tags-- strömmen tid i Cambridge är 14:08, utskrift av militära tid. Vad händer om det nu 2:09, 14:09? Bra hittills, med HTML, har jag att gå in och ändra det till 14:09. Och sedan en minut senare, Jag måste ändra det igen. Och sedan en minut senare, Jag måste ändra det igen. Och som ni kan föreställa er, det är troligen den värsta jobbet någonsin. Du är webmaster för en webbsida, och varje minut, 24 timmar om dygnet, Du behöver uppdatera den aktuella tiden med manuellt öppna time.html och ändra bara att kodsträng att säga aktuell tid i timmar och minuter. Det är förmodligen inte en mycket bra användning av våra resurser, både mänskliga och beräknings. Webbplatser som alla är HTML är helt statisk. Det enda sättet du kan uppdatera innehåll, som vi just har sett, är att öppna dem källa manuellt filer, redigera dem, och spara dem. Och sedan när användaren uppdaterar sidan, eller besöker sidan för första tid, kommer de att få det senaste innehållet. Men bara för att vi har redigeras manuellt det. Om vi ​​börjar blanda lite PHP där, vår kod kan få en mycket mer flexibel. Och vi kan ha ett sätt för våra sidor att vara dynamisk, eller uppdatera sig, utan att kräva våra fattiga webmaster i föregående exempel att manuellt uppdatera saker. De kan göra det automatiskt. Vi behöver inte ingripa. Vi kan få lite sömn. Vilket förmodligen är en bra sak om du gör en hel del webbprogrammering. Så i CS50 IDE, vi kör en webbserver som heter Apache. Det är ett mycket vanligt, open source web server system. Detta system har kapacitet att tolka PHP, som kommer att vara användbart om du vill göra något PHP-programmering. Och i CS50 IDE, har vi ett kommando för att göra detta mycket lätt att göra, apache50 starta. Och då snedstreck bana, snedstreck till snedstreck dir, det är bara ett riktigt vanligt sätt att anger vad du har angett här är en väg till en viss katalog som du vill vara roten webbplats, eller rotsidan, eller mapp som din webbserver kommer att börja undersöka filer och servera dem till kunder som efterfrågar dem. Så låt oss pop över till CS50 IDE, bara för att visa, verkligen snabb, hur det fungerar. Så här i CS50 IDE, jag befinner mig i en katalog som heter Vecka Zero Nine. Och jag har two-- jag har avrättades en LS kommandot bara ovan för att visa er att jag har två kataloger i här, PHP, vilket är den uppsättning filer som jag använde i PHP syntax video, och sedan PHP-bana, som är den uppsättning filer som jag skulle vilja använda i den här videon. Och jag skulle vilja börja en webbserver instans med innehållet i PHP-webbmappen eftersom filerna som serveras upp. Så vad ska jag göra? Jag kommer att skriva apache50 utrymme start, utrymme PHP, streck banan. Det är vägen till katalogen från där jag är för närvarande. Då jag trycker på Retur. Det kommer att göra en lite saker här. Och sedan kommer att säga, Apache startats. Din webbplats är nu tillgänglig at-- och sedan finns det webbadressen till sajten. Så vad ska jag göra? Jag kommer att snabbt kopiera detta. Och jag kommer att öppna up-- och Jag zooma ut lite här-- Jag kommer att öppna upp en ny flik i Chrome. Och jag kommer att besöka denna URL. Jag kommer att slå Enter. Det kommer att läsa in. Och jag ska zooma ut igen. Och vi kan se här är innehållet i min PHP webbkatalog. Så nu vad som i grund och botten händer här är min instans av CS50 IDE tjänar upp dessa filer till vem som helst som begär dem. Och under loppet av den här videon kommer vi sorterar av ta en titt på ett gäng av dessa olika filer i sitt sammanhang. För att testa att din Apache servern fungerar, som i allmänhet kommer vara fallet i CS50 IDE, men om du gör det mer allmänt, och du börjar bygga din egen webb servrar, det är en riktigt vanligaste typen av analog till "Hej världen", som vanligtvis används för PHP webbutveckling. Vilket är att ha en fil bestående av just detta code-- en PHP avgränsare set med PHP info, parenteser, semikolon emellan. Vilket egentligen är en speciell PHP-funktionen som talar om vilken version av PHP du kör. Så i CS50 IDE, har jag filen finns bara att visa dig vad det skulle se ut. Så jag ser på mitt index från min PHP instans. Min Apache-instansen körs innehållet i PHP-Web. Och jag har en fil här kallas info.php. Jag kommer att klicka på det, zooma ut. Detta är vad du tänker att se, ganska mycket. Detta är bara talar om för mig att min Apache servern fungerar. Och detta är, tydligen, version av PHP som jag kör. Detta är min analog till "Hej världen." Så jag vet saker är i drift. Så vi är bra att gå. Vi kan gå härifrån. Så låt oss återkomma som tids exempel vi var talar om med våra fattiga webmaster som var tvungen att uppdatera sidan hela tiden. Detta kan vara en fix för hur Jag skulle genomföra saker så att webmaster inte måste hålla uppdatera tiden. Det skulle bara typ av ske automatiskt. Den nere, HTML, är det ganska likartade, med ett undantag. Men här har jag fått lite PHP på toppen. Jag har, som synes, kallade detta funktion date_default_timezone_set. Och vi talar inte om alla dessa funktioner i CS50, eftersom PHP har förmodligen tiotusentals. Det kan vara lite av en överdrift, men det kanske inte. Det har fått en hel del funktioner inbyggda i. Och så detta är en funktion som synes sätter min tidszon som US / Eastern, vilket är den tidszon som jag är närvarande för att göra den här videon. Då ska jag ringa ett samtal till Funktionen kallas, datum. Och, uppenbarligen, jag lagra HANS av något som kallas, tid. Så vad är det som händer här? Tja, i princip vad är händer är, jag ringer ett samtal till viss server som kommer att berätta vad tiden är närvarande. Och jag omvandla den till ett format timmar, minuter, sekunder. Och anledningen till det är kapital H är detta kommer att ge mig 24 timmars tid, inte 12 timmars tid, vilket skulle vara gemener tim. Och jag bara lagra att i en variabel som kallas, tid. Så att den andra raden av PHP där, anrop till funktionen, Hittills är bara få vissa sträng, som är kommer att ge mig den dag, och tid, och en massa annan information. Och det första argumentet där, att HIS, bara extrahera viktig del att jag bryr mig om i det här exemplet, vilket är en timme, minut och sekund. Så det är allt som händer. Så jag lagra den i en variabel $ tid. Och sedan ner på längst ned där, jag har det förkortning för skriva ut den aktuella tiden. Så jag ska bara skriva ut reda på vad klockan är. Så låt oss ta en titt på detta CS50 IDE och se hur vi är nu spara som webmaster en massa problem. Okej, så här är jag igen tillbaka i rotkatalogen min Apache instans. Och jag har en fil här kallas time.php. Jag kommer bara att klicka på den. Och jag ska rulla upp, eftersom vi zoomat in ganska långt. Den aktuella tiden är 14:20:34. Så jag gör det timmar, minuter och sekunder. Och jag kan uppdatera och få ny tid. --41. Jag kommer att uppdatera sidan och få ny tid, 44, 46, 47. Så jag är uppenbarligen inte ändra någonting själv. Jag här uppdatera sidan. Så jag kan inte vara tillbaka där redigera den. Och jag lovar dig, jag vet inte har några förbunds som redigerar filen för min räkning på sidan. Jag bara använda det PHP-funktionen, tid, för att generera tid för mig automatiskt. Så att även om jag sover, och min webbserver körs, användaren som besöker den sidan är fortfarande kommer att få exakt den aktuella tiden. Så det är ganska bra. Jag har gjort min webbplats mer dynamisk med inte alltför mycket PHP-kod. Det var bara två rader kod och sedan en liten bit av en utskrifts uttalande. Och redan jag har en mycket mer dynamisk webbplats än det första exemplet vi såg i början av videon. Så minns från videon på PHP syntax att när PHP tolken körs vårt program, ignorerar det allt det är inte inne i PHP avgränsare, spotta ut det. I detta exempel, vad den saken att det var spotta ut var HTML. Och det betyder att jag kan nu blanda HTML och PHP tillsammans. Eftersom tolken kommer bara ignorera HTML och bokstavligen utsignal. Vilket är bra, eller hur? Eftersom förmodligen, Vid slutet av dagen, Jag vill att min webbplats till vara konstruerad av HTML. Så att alla webbläsare kan tolka det eller förstå HTML på sidan och göra det som något som vi kan faktiskt förstå som människor. Och jag kan bara använda PHP för de delar av min webbplats det kräver dynamik, som kräver mig att ha saker som uppdateras hela tiden. Den statiska informationen kan förbli densamma. OK, så det är bra. Men varför skulle jag göra det? Varför skulle jag blandar HTML och PHP? Jag kan bara skriva ut alla HTML, med hjälp av PHP utskriftsfunktionen. Varför får jag inte göra det? Tänk på det för en sekund. Varför, när jag kunde bara skriva out-- jag kunde ha rader av PHP som bara säga, utskrifts HTML-tagg, skrivhuvudet. Varför får jag inte göra det? Varför jag blanda PHP och HTML? Tja, om du tror om det för en sekund. PHP, har tolken att tolka vad den ser. Och så det kommer att ha att utföra en rad kod. Skriv ut HTML. Skriv ut öppna huvud tag. Skriv ut öppna rubriktaggen. Det kommer att behöva genomföra och tolka att varje enskild steg på vägen. Varför inte bara låta tolk bara släta över saker man inte förstår och göra det automatiskt? Det kommer att spara mig en hel del tid att blanda min HTML och min PHP tillsammans. Och så det är därför vi inte bara öppna PHP avgränsare och sedan bara skriva ut hela innehållet på vår sida som en gigantisk PHP Ring till funktionen, Print, och sedan nära PHP avgränsare och vi är klara. Så det är därför vi blandar upp dem tillsammans. Hittills har vi inte sett alltför mycket av skillnad från allmän PHP syntax. Det har varit ganska enkelt. Vi har redan sett frågetecken, lika. Vi såg ett par nya funktionsanrop, men ingenting riktigt snygga händer. Låt oss kanske göra saker lite snyggare. Vad händer om vi vill överföra information mellan olika PHP-filer, så att kanske kan användaren lämna information till mig. Och då kunde jag göra något med det på en annan sida. Så PHP har stöd för något som kallas Super Global Variabler, vilket låter ganska häftigt. De är egentligen bara jätte associativa arrayer som hjälper genomföra detta funktionalitet passerar information mellan PHP-filer som är befintliga på vår webbserver. Den första av dessa super globals kallas $ _GET. Och det är förmodligen enklaste att förstå. Vad händer med $ _GET? Tja, i princip, är användaren kommer att skriva till extra information i slutet av URL: er. Och vad de skriver, förutsatt det är formaterad på ett visst sätt kallas en frågesträng, som är bara en uppsättning av nyckelpar värde separeras av et-tecken. Dessa nyckelpar värde kommer att vara lagras i en $ _GET associativ array. Och från vår video på PHP syntax, vi vet hur man arbetar med associativa arrayer redan. Så här är ett exempel på vissa PHP, där kanske jag extrahera alla nyckelpar värde att användaren levereras i webbadressen. Så jag har min öppet PHP avgränsare. Jag har en foreach slinga. Jag iterera över Super Globalt Array kallas $ _GET. Och jag vill kunna hänvisa till både nyckeln och värdet. Och jag bara skriva ut dem ut, var och en på till synes sin egen punkt tag här. Jag skriva ut några HTML och interpolering av värdena av nyckel och värde i det uttalandet. Så låt oss ta en titt på hur detta skulle faktiskt arbetar på vår IDE. Och kanske detta kommer att hjälpa illustrerar en liten bit vad GET faktiskt gör. Så jag är tillbaka här i min webbroten. Och jag kommer att zooma in ett lite att visa dig att jag har en fil som heter, get1.php. Så låt oss titta på get1.php. Och jag ser inte något innehåll. Det är konstigt, eller hur? Tja, inte riktigt faktiskt. Eftersom jag inte har lämnat något i webbadressen. Jag ska get1.php, men jag inte levererar några nyckelpar värde som en del av mitt frågesträng. Så låt oss lägga till en frågesträng och se vad den här filen kan göra. Till att börja en frågesträng du skriv bara frågetecken. Då kanske jag ska säga name = Doug & år = 2015. Och då kommer jag trycker på Retur. Nu märker vad som händer. Jag är fortfarande i get1.php. Men nu har jag levererat nyckelpar värde, och jag är skriva ut dem på egen hand paragraph-- namn, Doug-- år 2015. Det är precis den kod vi bara såg på bilden för en stund sedan. Och om jag vill kanske lägga till en annan nyckelvärdet paret, och class = CS50. Nu har jag en annan nyckelvärde par som är utskrivna När jag återkomma webbadressen igen. Nu kanske detta inte är formaterad fruktansvärt bra. Så jag har en annan version av get.php. Det är get2.php. Skillnaden i detta en är att jag har CSS-fil, och det format saker lite mer bra för mig. Det är kanske inte den mest vackra CSS i världen. Men det är bara ett annat sätt att göra det. Så jag kan fortfarande få tillgång till mina variabler med hjälp av $ _GET. Och i detta fall, jag är bara typ av gör CSS lite mer fantasi. Och om vi pop över till min IDE för en sekund, Jag ska visa dig i min PHP katalog här, get2.php. Vi kommer att öppna upp, en del HTML här. Tydligen jag bindning i det CSS-fil jag pratade om. Jag öppnar ett bord tag. Och så här är min foreach loop. Här är det, vad jag visade på bilden innan. Den enda skillnaden är att jag har denna nyckel och värde CSS styling att jag söker det. Men det är allt jag gör är jag iterera över $ _GET att få alla av nyckelparen value. Och jag skriva ut dem som tabellen. Och, uppenbarligen, jag formatering nycklarna i ett sätt, med