DOUG LLOYD: SÃ¥ i vÃ¥r video pÃ¥ PHP syntaks, Vi snakket mye om hvordan PHP kan brukes pÃ¥ kommandolinjen til Ã¥ kjøre programmer pÃ¥ en mÃ¥te som vi er ganske godt kjent med fra C. Men som jeg nevnte ogsÃ¥ i denne videoen, PHP ble opprinnelig utviklet for Ã¥ implementere web-programmering, nettsteder. Og sÃ¥ i denne videoen er vi kommer til Ã¥ snakke om hvordan vi bruke PHP i webutvikling sammenheng. Vi vet allerede, fra vÃ¥r video pÃ¥ HTML, at nettsteder er bygget ut av et sett med HTML-koder at semantisk definere strukturen pÃ¥ en nettside. Men nettsteder som er bygget med ren HTML lider av en veldig, meget alvorlig begrensning. Og for Ã¥ illustrere denne begrensningen, la oss vurdere følgende. SÃ¥ nÃ¥ ønsker jeg Ã¥ bygge en web-side at nÃ¥r brukeren besøker det, det gir meg den aktuelle tid i Cambridge, Mass., vise den til den siste minutt. Hvis jeg var Ã¥ gjøre dette akkurat nÃ¥, Jeg kan si noe sÃ¥nt som dette. Gjeldende tid i Cambridge-- sÃ¥ jeg har HTML-koder, head tags, titler, Kroppen tags-- gjeldende tid i Cambridge er 14:08, skrive ut militære tid. Hva skjer hvis det er nÃ¥ 02:09, 14:09? Vel sÃ¥ langt, med HTML, har jeg Ã¥ gÃ¥ inn og endre det til 14:09. Og sÃ¥ ett minutt senere, Jeg mÃ¥ endre det igjen. Og sÃ¥ ett minutt senere, Jeg mÃ¥ endre det igjen. Og som du kan forestille deg, er at trolig den verste jobben noensinne. Du er webmaster for en nettside, og hvert minutt, 24 timer i døgnet, du mÃ¥ oppdatere gjeldende klokkeslett ved manuelt Ã¥pne time.html og endring bare at kodebit Ã¥ si gjeldende tid i timer og minutter. Det er sannsynligvis ikke en veldig god bruk av vÃ¥re ressurser, bÃ¥de menneskelig og beregningsorientert. Nettsteder som er all HTML er helt statisk. Den eneste mÃ¥ten du kan oppdatere innhold, som vi nettopp har sett, er Ã¥ Ã¥pne de kilde manuelt filer, redigere dem og lagre dem. Og sÃ¥ nÃ¥r brukeren oppdaterer siden, eller besøker siden for første tid, vil de fÃ¥ den nyeste innhold. Men bare fordi vi har manuelt redigert det. Hvis vi begynner Ã¥ blande litt PHP der inne, koden vÃ¥r kan fÃ¥ en mye mer fleksibel. Og vi kan ha en mÃ¥te for vÃ¥re sider Ã¥ være dynamisk, eller oppdatere seg, uten Ã¥ kreve vÃ¥re fattige webmaster i forrige eksempel være manuell oppdatering ting. De kan gjøre det automatisk. Vi trenger ikke Ã¥ gripe inn. Vi kan fÃ¥ litt søvn. Som sannsynligvis er en god ting hvis du gjør en masse web-programmering. SÃ¥ i CS50 IDE, kjører vi en web server kalt Apache. Det er en veldig vanlig, open source web server system. Dette system har den kapasitet til Ã¥ tolke PHP, som kommer til Ã¥ være nyttig hvis du ønsker Ã¥ gjøre noe PHP programmering. Og i CS50 IDE, har vi en kommando Ã¥ gjøre dette veldig enkelt Ã¥ gjøre, apache50 starte. Og da at slash banen, slash til, skrÃ¥strek dir, det er bare en veldig vanlig mÃ¥te Ã¥ indikerer hva du har angitt her er en bane til en bestemt katalog som du ønsker Ã¥ være roten omrÃ¥de, eller roten siden eller mappen webserveren vil begynne Ã¥ undersøke filer og tjene dem opp til kunder som ber om dem. SÃ¥ la oss komme over til CS50 IDE, bare for Ã¥ vise dere, virkelig rask, hvordan dette fungerer. SÃ¥ her i CS50 IDE, jeg er i en katalog som heter Week Zero Nine. Og jeg har two-- jeg ha henrettet en LS-kommandoen bare over for Ã¥ vise deg at jeg har to kataloger i her, PHP, som er sett av filer som jeg brukte i PHP syntaks video, og deretter PHP-web, som er sett av filer som jeg ønsker Ã¥ bruke i denne videoen. Og jeg ønsker Ã¥ starte en webserver forekomst med innholdet i PHP-web mappen som filene blir servert. SÃ¥ hva skal jeg gjøre? Jeg kommer til Ã¥ skrive apache50 plass starte, plass PHP, dash web. Det er banen til katalogen fra der jeg er i dag. SÃ¥ jeg trykker pÃ¥ Enter. Det kommer til Ã¥ gjøre en litt ting her. Og sÃ¥ kommer det til Ã¥ si, Apache startet med hell. Nettstedet ditt er nÃ¥ tilgjengelig at-- og sÃ¥ er det nettadressen til nettstedet. SÃ¥ hva skal jeg gjøre? Jeg kommer til Ã¥ raskt kopiere dette. Og jeg kommer til Ã¥ Ã¥pne opp-- og Jeg skal zoome ut litt her-- Jeg kommer til Ã¥ Ã¥pne opp en ny fane i Chrome. Og jeg kommer til Ã¥ besøke denne nettadressen. Jeg kommer til Ã¥ treffe pÃ¥ Enter. Det kommer til Ã¥ laste. Og jeg skal zoome ut igjen. Og vi kan se her er den Innholdet i min PHP web-katalog. SÃ¥ nÃ¥ hva som egentlig skjer her er min forekomst av CS50 IDE tjener opp disse filene til noen som ber om dem. Og i løpet av denne videoen, vil vi sortere av ta en titt pÃ¥ en haug av disse forskjellige filer i sammenheng. For Ã¥ teste at Apache server fungerer, som generelt gÃ¥r Ã¥ være tilfelle i CS50 IDE, men hvis du gjør dette mer generelt, og du begynner Ã¥ bygge din egen nettside servere, det er en virkelig felles slags analog til, "hello world", som vanligvis brukes for PHP webutvikling. Som skal ha en fil bestÃ¥ende av nettopp dette code-- en PHP skillesett med PHP info, parenteser, semikolon i mellom. Som er utgangspunktet en spesiell PHP funksjon som forteller deg hvilken versjon av PHP du kjører. SÃ¥ i CS50 IDE, har jeg at filen tilgjengelig rett Ã¥ vise deg hva dette ville se ut. SÃ¥ jeg ser pÃ¥ indeksen min fra min PHP forekomst. Min Apache forekomsten kjører innholdet i PHP-Web. Og jeg har en fil her heter info.php. Jeg kommer til Ã¥ klikke den, zoome ut. Dette er hva du skal Ã¥ se, ganske mye. Dette er bare Ã¥ fortelle meg at min Apache server fungerer. Og dette er, tilsynelatende, versjon av PHP som jeg kjører. Dette er min analog til "hello world". SÃ¥ jeg vet at ting er i drift. SÃ¥ vi er godt Ã¥ gÃ¥. Vi kan fortsette herfra. SÃ¥ la oss se at tid eksempelet vi var snakker om med vÃ¥re fattige webmaster som mÃ¥tte oppdatere siden hele tiden. Dette kan være en løsning for hvordan Jeg ville implementere ting slik at webmaster ikke nødt til Ã¥ holde oppdatere tiden. Det ville bare liksom skje automatisk. Den nede, HTML, er det ganske lik, med ett unntak. Men her har jeg fÃ¥tt noen PHP pÃ¥ toppen. Jeg har, tilsynelatende, kalles dette funksjon date_default_timezone_set. Og vi snakker ikke om alle disse funksjonene i CS50, fordi PHP har sannsynligvis ti av tusen. Det kan være litt av en overdrivelse, men det kan ikke være. Det fikk en rekke funksjoner innebygd. Og sÃ¥ dette er en funksjon tilsynelatende setter min tidssone som USA / Ãst, som er den tidssonen som jeg er tiden pÃ¥ Ã¥ lage denne videoen. SÃ¥ gjør jeg en telefon til funksjon kalt, dato. Og tilsynelatende, jeg oppbevarer HIS av noe som heter, tid. SÃ¥ hva er det som skjer her? Vel, i utgangspunktet hva som er skjer er, jeg gjør en samtale til noen server som kommer til Ã¥ Fortell meg hva klokken er i dag. Og jeg konvertere den til et format av timer, minutter, sekunder. Og grunnen til det er hovedstaden H er dette kommer til Ã¥ gi meg 24 timers tid, ikke 12 time tid, noe som ville være smÃ¥ timer. Og jeg bare lagre som i en variabel kalt, tid. Slik at andre linje av PHP der, kallet til funksjonen, Hittil er bare Ã¥ komme hyssing, som er kommer til Ã¥ gi meg dato, og tid, og en haug med andre opplysninger. Og det første argumentet der, at HIS, er bare Ã¥ trekke ut den viktigste delen at jeg bryr meg om for eksempel som er det time, minutt og sekund. SÃ¥ det er alt som skjer. SÃ¥ jeg lagre det i en variabel $ tid. Og deretter ned pÃ¥ helt nederst der, jeg har som forkortelse for skrive ut gjeldende klokkeslett. SÃ¥ jeg skal bare skrive ut ut hva det nÃ¥værende tidspunkt er. SÃ¥ la oss ta en titt pÃ¥ dette i CS50 IDE og se hvor vi er nÃ¥ besparende at webmaster en masse problemer. Ok, sÃ¥ her er jeg igjen tilbake pÃ¥ rotkatalogen av min Apache eksempel. Og jeg har en fil her heter time.php. Jeg bare kommer til Ã¥ klikke pÃ¥ det. Og jeg skal bla opp, fordi vi zoomet inn ganske langt. Den nÃ¥værende tidspunkt er 14:20:34. SÃ¥ jeg gjør det timer, minutter og sekunder. Og jeg kan oppdatere siden og fÃ¥ ny tid. --41. Jeg kommer til Ã¥ oppdatere siden og fÃ¥ ny tid, 44, 46, 47. SÃ¥, jeg er helt klart ikke endre noe selv. Jeg her Ã¥ oppdatere siden. SÃ¥ jeg kan ikke være tilbake der du redigerer det. Og jeg lover deg, det gjør jeg ikke har noen medsammensvorne som redigerer filen pÃ¥ mine vegne pÃ¥ siden. Jeg bare bruker det PHP-funksjonen, tid, for Ã¥ generere tids for meg automatisk. Slik at selv om jeg sover, og min web server kjører, brukeren som besøker den siden er fortsatt kommer til Ã¥ fÃ¥ akkurat det nÃ¥værende tidspunkt. SÃ¥ det er ganske bra. Jeg har laget min side mer dynamisk med ikke for mye PHP-kode. Det var bare to linjer med kode, og deretter en liten bit av en utskrifts uttalelse. Og allerede har jeg en mye mer dynamisk nettsted enn det første eksempelet vi sÃ¥ i begynnelsen av videoen. SÃ¥ husker fra videoen pÃ¥ PHP syntaks at nÃ¥r PHP tolk gÃ¥r programmet vÃ¥rt, ignorerer det alt det er ikke inne i PHP skilletegn, spytter den ut. I dette eksempelet, hva ting at det ble spyttet ut var HTML. Og dette betyr at jeg kan nÃ¥ flette HTML og PHP sammen. Fordi tolken vil bare ignorere HTML og bokstavelig utgang det. Noe som er bra, ikke sant? Fordi formodentlig, pÃ¥ slutten av dagen, Jeg ønsker nettstedet mitt til være konstruert av HTML. Slik at enhver nettleser kan tolke det, eller forstÃ¥r HTML pÃ¥ siden og gjengi det som noe som vi kan faktisk forstÃ¥ som mennesker. Og jeg kan bare bruke PHP for de delene av nettstedet mitt det krever dynamikk, som krever meg Ã¥ ha ting som oppdaterer hele tiden. Den statiske informasjon kan forbli den samme. OK, sÃ¥ det er fint. Men hvorfor skulle jeg gjøre dette? Hvorfor skulle jeg blande HTML og PHP? Jeg kunne bare skrive ut alle HTML, ved hjelp av PHP utskriftsfunksjonen. Hvorfor jeg ikke gjør det? Tenk pÃ¥ det et sekund. Hvorfor, nÃ¥r jeg bare kunne skrive ut out-- jeg kunne ha linjer med PHP som bare sier: print HTML tag, skriverhodet. Hvorfor jeg ikke gjør det? Hvorfor fÃ¥r jeg blande PHP og HTML? Vel, hvis du tror pÃ¥ det et sekund. PHP, har tolken Ã¥ tolke hva den ser. Og sÃ¥ det kommer til Ã¥ ha Ã¥ utføre en kodelinje. Skrive ut HTML. Skriv ut Ã¥pen hodet tag. Skriv ut Ã¥pen tittelen koden. Det er nødt til Ã¥ utføre og tolke at hver enkelt steg pÃ¥ veien. Hvorfor ikke bare la tolk bare glatte over ting det ikke forstÃ¥r og gjøre det automatisk? Det kommer til Ã¥ spare meg mye tid Ã¥ blande min HTML og min PHP sammen. Og sÃ¥ det er derfor vi ikke bare ha Ã¥pent PHP delimiter og sÃ¥ bare skrive ut hele Innholdet pÃ¥ siden vÃ¥r som en gigantisk PHP ringe til funksjonen, Skriv ut og deretter nær PHP skilletegn og vi er ferdige. SÃ¥ det er derfor vi blande dem opp sammen. SÃ¥ langt har vi ikke sett for mye av en forskjell fra generell PHP syntaks. Det har vært ganske grei. Vi har allerede sett spørsmÃ¥lstegn, lik. Vi sÃ¥ et par nye funksjonskall, men ingenting virkelig lyst til Ã¥ gÃ¥ pÃ¥. La oss kanskje gjøre ting en litt mer avansert. Hva hvis vi ønsker Ã¥ sende informasjon mellom ulike PHP-filer, slik at kanskje kan brukeren sende informasjon til meg. Og sÃ¥ kunne jeg gjøre noe med det pÃ¥ en annen side. SÃ¥ PHP har støtte for noe som kalles Super Globalt Variabler, som høres ganske utrolig. De er egentlig bare gigantiske assosiative matriser som bidrar til Ã¥ gjennomføre dette funksjonaliteten til bestÃ¥tt informasjon mellom PHP-filer som er eksisterende pÃ¥ vÃ¥r webserver. Den første av disse super globals kalles $ _GET. Og det er trolig den enkleste Ã¥ forstÃ¥. Hva skjer med $ _GET? Vel, i utgangspunktet, er bruker kommer til Ã¥ skrive ekstra informasjon pÃ¥ slutten av vÃ¥re nettadresser. Og uansett hva de skriver, forutsatt det er formatert pÃ¥ en bestemt mÃ¥te kalt en søkestreng, som er like et sett med viktige verdi par skilt av-tegn. De sentrale verdi parene vil være lagret i en $ _GET assosiativ array. Og fra vÃ¥r video pÃ¥ PHP syntaks, vi vet hvordan jobbe med assosiative arrays allerede. SÃ¥ her er et eksempel pÃ¥ noen PHP, hvor kanskje jeg er trekke ut alle de viktigste verdi-par at brukeren følger med i nettadressen. SÃ¥ jeg har min Ã¥pne PHP skilletegn. Jeg har en foreach loop. Jeg gjentar over Super Global Array kalt $ _GET. Og jeg ønsker Ã¥ være i stand til Ã¥ referere til bÃ¥de nøkkelen og verdien. Og jeg bare skrive dem ut, hver og en pÃ¥ tilsynelatende sin egen paragraf tag her. Jeg skriver ut noen HTML og interpolere verdiene av nøkkel og verdi i det utsagnet. SÃ¥ la oss ta en titt pÃ¥ hvordan dette faktisk ville fungere pÃ¥ vÃ¥r IDE. Og kanskje dette vil hjelpe viser en litt av hva GET faktisk gjør. SÃ¥ jeg er tilbake her i min web roten. Og jeg skal zoome inn en litt Ã¥ vise deg at jeg har en fil som heter, get1.php. SÃ¥ la oss klikke pÃ¥ get1.php. Og jeg ser ikke noe innhold. Det er rart, ikke sant? Vel, egentlig ikke egentlig. Fordi jeg ikke leverer noe i URL. Jeg kommer til Ã¥ get1.php, men jeg ikke leverer noen viktige verdi par som en del av min søkestrengen. SÃ¥ la oss legge til en søkestreng og se hva denne filen kan gjøre. For Ã¥ begynne en søkestrengen du bare skriver spørsmÃ¥lstegn. SÃ¥ kanskje jeg skal si name = Doug & Ã¥ret = 2015. Og da vil jeg trykker pÃ¥ Enter. NÃ¥ merke til hva som skjer. Jeg er fortsatt i get1.php. Men nÃ¥ har jeg levert sentrale verdi-par, og jeg er skrive dem ut pÃ¥ egen hÃ¥nd paragraph-- navn, Doug-- Ã¥r, 2015. Det er akkurat den koden vi bare sÃ¥ pÃ¥ lysbildet et øyeblikk siden. Og hvis jeg vil kanskje legge til en annen nøkkelverdi pair, og class = CS50. NÃ¥ har jeg en annen sentral verdi paret som er skrevet ut nÃ¥r jeg besøker nettadressen pÃ¥ nytt. NÃ¥ kanskje dette er ikke formatert veldig godt. SÃ¥ jeg har en annen versjon av get.php. Det er get2.php. Forskjellen i denne ene er at jeg har CSS-fil, og det formaterer ting litt mer pent for meg. Det er kanskje ikke den mest vakker CSS i verden. Men det er bare en annen mÃ¥te Ã¥ gjøre det. SÃ¥ jeg kan fortsatt fÃ¥ tilgang til mine variabler som bruker $ _GET. Og i dette tilfellet, er jeg bare slags gjør CSS litt mer fancy. Og hvis vi pop over til min IDE for et sekund, Jeg skal vise deg i min PHP web katalogen her, get2.php. Vi vil Ã¥pne den opp, noen HTML her. Angivelig Jeg lenking i at CSS-filen jeg snakket om. Jeg Ã¥pner en tabell tag. Og sÃ¥ her er min foreach loop. Her er det, hva jeg viste pÃ¥ lysbildet før. Den eneste forskjellen er at jeg har denne nøkkelen og verdi CSS styling at jeg søker pÃ¥ det. Men det er alt jeg gjør, er jeg itera over $ _GET Ã¥ fÃ¥ alle av de viktigste verdiparene. Og jeg skrive dem ut som tabellen. Og tilsynelatende, jeg formaterer nøklene pÃ¥ en mÃ¥te, med