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