[Lecture de musique] 

DAVID J. Malan: Très bien. Ceci est CS50. Ceci est le début de la huitième semaine. Et vous souvenez peut-être que nous nous sommes quittés dernier temps à regarder une nouvelle langue tout à fait. En fait, celui qui est assez léger et il est même pas un langage de programmation. Il est un langage de balisage qui nous permet réellement structurer et rendre les pages Web. Et quand vous quelque chose d'autre en conjonction avec this-- ou vous sera bientôt le cas, si vous ne l'avez pas déjà. Nous allons utiliser en cascade Les feuilles de style CSS, ou qui est un autre type de langue avec les propriétés et les valeurs qui va nous laisser faire des choses comme changer la couleur et changer la position et ces sortes de réglages. Mais aujourd'hui, et au-delà, nous commençons à se concentrer sur les langues les plus puissants, langages de programmation comme PHP réels. 

Donc, PHP a été autour depuis un certain temps. Et comme vous le verrez, il a été conçu principalement dès le début réel de utiliser dans le développement web et en fait la génération des pages web. Alors, quel genre de caractéristiques ne une langue besoin afin de rendre web pages dynamiquement avec elle? 

En d'autres termes, si vous voulez générer dynamically-- contenu comme de Facebook RSS, qui change constamment, ou messages instantanés qui apparaissent de temps à time-- comme ce qui est le élément clé de la fonctionnalité vous avez besoin dans un langage de programmation ce serait vous laisser dynamique imprimer de nouvelles informations à l'écran? 

L'ÉLÈVE: Code. DAVID J. Malan: Code. D'accord. Nous allons prendre cela. Un peu plus précis. Je veux dire, nous pourrions faire ce avec C, franchement. Ce serait une douleur dans le cou. Mais-- est cet engagement? 

L'ÉLÈVE: Oui. Variables, peut-être? DAVID J. Malan: Variables. OK, bien sûr. Les variables peuvent certainement nous aider. Et même quelque chose de simple. Nous l'avons utilisé dans la première programme de la première journée et quand nous sommes dit "Bonjour tout le monde." 

L'ÉLÈVE: Imprimer. 

DAVID J. Malan: Imprimer, non? Imprimer, ou printf dans la monde de C. Donc, tout ce temps, nous avons eu à notre disposition un language-- C, dans particular-- et même Scratch d'ailleurs que peut générer des chaînes de texte. 

Eh bien, si le code HTML, comme nous l'avons vu la semaine dernière, est juste un tas de chaînes de texte mais avec crochets ouvert et fermé supports et une sorte de rime et la raison derrière elle, eh bien nous pourrions vraiment commencer à générer des pages de navigateur manuellement en les saisissant dans gedit ou dans Microsoft Word, pour que matter-- nous avons juste besoin d'un éditeur de texte. 

Ou nous pourrions écrire du code, à votre suggestion plus tôt, cela nous laisser générer dynamiquement HTML, et qui est ce que nous allons de commencer à faire avec PHP et, finalement, encore avec un langue appelée le JavaScript est d'utiliser une langue à générer un autre. Et en effet, voici ce que Facebook et beaucoup, beaucoup d'autres sites faire pour réellement dynamique afficher de nouvelles informations à vous. 

Commençons donc avec un this-- cryptique ligne à la recherche, mais un qui est en fait assez puissant. Jusqu'à présent, nous avons utilisé C, qui est un langage compilé. Et juste un rapide recap-- une compilation langue a ce caractère? Vous avez évidemment besoin de compiler , mais ça veut dire quoi? Ouais? 

L'ÉLÈVE: Il doit être assemblé en code machine. 

DAVID J. Malan: OK. Il doit être assemblé en code machine. Vous prenez donc votre code source, qui est en quelque sorte de l'anglais comme. Vous convertissez que pour quelque chose niveau inférieur, qui est finalement appelé code-- objet de 0 et de 1. Et ce sont ces 0 et de 1 qui une unité centrale, comme ceux fabriqués par Intel, fait comprendre. 

Maintenant, PHP et Python et Ruby et JavaScript et grappes d'autres langues ne sont pas compilés langues mais les langues interprété, ce qui signifie que vous venez saisissez-les et vous ne les mettez pas en 0 et de 1. Vous fournissez la place juste alors que entrée au programme de quelqu'un d'autre, appelé un interprète. Et cette personne programme a été conçu de comprendre ce que chacun et chaque symbole en Python ou PHP ou rubis ou un nombre quelconque de d'autres langues moyens. 

Et si tous nous avons besoin est quelque chose comme ça. Donc, en fait, je vais passer à l'appareil ici, tout en toute ancienne fenêtre, et nous sommes aller de l'avant et ouvert un fichier appelé, dire bonjour. Maintenant déjà, je pourrais avoir sauvé ce même avec une extension de fichier, mais je vais faire quelque chose d'encore plus simple ici. Je vais aller de l'avant et commencer ce fichier avec la syntaxe cryptique. Ainsi, "l'utilisateur, bin, env, pour l'environnement, php ". 

Ceci est tout simplement une ligne de code qui est aller dire à mon système d'exploitation, aller trouver dans votre région environnement quel qu'il soit, où PHP est-- la interpreter-- et aller de l'avant et d'utiliser cette interprète d'interpréter le code suivant. Maintenant, ce genre est de une caractéristique laid de PHP. Mais dans cette langue, toute fois que vous écrivez du code PHP, vous avez besoin d'avoir un de ces laid balises PHP délimitant le début de votre code-- <? php. 

Mais au-dessous ici, je peux maintenant faire quelque chose assez simple comme bonjour printf virgule, monde barre oblique inverse n proche citation, parenthèse fermante. Et puis juste pour faire bonne mesure, je vais à aller de l'avant et à proximité mon tag php ici de sorte que tout semble bien joli imprimé. 

Et dès que je clique sur Enregistrer, gedit est en fait assez intelligent d'examiner cette première ligne et réaliser, oh, vous écrivez du code PHP. Je voudrais souligner la syntaxe avec les couleurs ici de sorte qu'il se un peu plus. Mais maintenant, je vais aller jusqu'à ma fenêtre du terminal. Je vais un zoom avant. 

Ce programme a été appelé «bonjour», donc je vais faire slash dot bonjour, mais permission refusée. Et bash. En fait, nous avons entendu de cette Il ya une chose quelques semaines dans le contexte de Shellshock, un de ces bugs. 

Mais Permission denied nous avons vu avant, peut-être dans un contexte différent. Est-ce que quelqu'un se souvient comment vous pourriez réparer quelque chose où l'autorisation est refusée comme ça? Quelle est la commande, au moins? 

L'ÉLÈVE: chmod. DAVID J. Malan: Ouais, chmod, pour changer le mode d'un fichier. Et vous aurez d'autant plus l'habitude de la semaine prochaine avec un problème ultérieur fixer. Mais pour l'instant, je vais changer le mode de ne pas être lisible, mais de donner à chacun executeability privilèges, la capacité pour exécuter ce fichier. Et je vais assigner que le fichier bonjour. 

Si je le fais maintenant slash dot bonjour entrer, vous voir, en fait, mon programme, bonjour monde. Et ce que l'étape ai-je sauter clairement tout à fait? Compilation. Donc, je viens de rencontrer ce programme tout simplement. 

Et il se trouve que vous pouvez faire cela avec beaucoup de syntaxe proche du C. Laissez-moi aller pour le code d'aujourd'hui, que je mets dans mon répertoire de serveur virtuel ici, pour des raisons réelles nous y reviendrons. Et je vais aller dans, disons, les conditions 1. 

Et vous verrez ici, d'abord et avant tout, tout un tas de commentaires. Mais cela est en fait une re-création en PHP d'un programme que nous avons fait dans la semaine une des conditions dites 1.c où dans le but durée de ce programme est apparemment à poser l'utilisateur pour un nombre entier et puis faire un peu de moelleux analyse sur ce par quoi vous dites si elle est positive ou négatif ou égal à zéro. Et je soulève cette question parce que, sauf peut-être un petit détail, il est impossible de distinguer si loin de C. 

Quelle est la seule caractéristique que peut-être ici saute à vous comme un peu différent? Peut-être deux choses. Ouais? 

L'ÉLÈVE: Dollar signe n? 

DAVID J. Malan: Ouais. Donc, signe de dollar n est présent. Et le symbole du dollar, que nous le verrons, vont être une solution au début d'une variable en PHP. Il est à la fois bon et bad-- bon dans qu'il est une sorte de manifeste ce qui est une variable, mauvaise en ce qu'elle est encore une autre chose à taper. Et il ya une autre chose que nous avons pas assez vu, au moins par cette orthographe. ouais? 

L'ÉLÈVE: Readline. 

DAVID J. Malan: Readline. Readline nous ne voyons pas, en soi, C, même si il existe quelque chose similaire, mais nous avons utilisé getString, ce qui est sa contrepartie. Donc, si je vais dans cette répertoire, qui se trouve être, comme je l'expliquerai dans un peu dans mon vhost répertoire et ma source est le répertoire et je vais de l'avant et faire slash dot conditions-- whoops-- point barre conditions 1, vous verrez, à nouveau, la même autorisation Issue-- refusée. 

Permettez-moi de zoom avant et chmod un plus x sur les conditions, les conditions de slash dot. Je voudrais un entier, se il vous plaît, 50. Et nous pourrions jouer ce jeu toute la journée. Il va se comporter exactement comme il l'a fait dans une semaine. 

OK donc pas si différent, sauf pas juste que peu léger de la syntaxe, mais au sommet, je nouveau eu cette ligne qui m'a permis de créer quelque chose qui ressemble à un programme en C appelé bonjour, conditions dites 1. Mais il est pas 0 et ceux Je exécuter directement. Il est plutôt l'exécution de cette interprète dont le nom se trouve être identique à la langue. Le programme est appelé PHP, et mon code dessous de la ligne un est transmis en elle. 

Nous pouvons faire un autre assez simple exemple rappelle quelque chose nous l'avons fait il ya quelques semaines. Encore une fois, ceci est une sorte de morceau arbitraire d'un code qui, apparemment, ne ce lorsque vous exécutez il? Qu'est-ce que cela va-imprimer, sans doute? 

Donc, d'abord sur la ligne 16, il est va dire x est maintenant 2, probablement. % D est le même que i $ pour printf. Alors qu'il est au cube, point, point, point, à la ligne 17. Puis la ligne 18 apparaît pour appeler une fonction Cubed. Et où est Cubed défini? 

Eh bien, il ressemble à la ligne 25, de sorte que tout ce qui est pas différent. Je l'ai eu quelques commentaires ci-dessus , mais, pour la plupart, il est un assez simple portage ou la conversion à partir du programme de C à la version de PHP. Mais il ya maintenant un couple de différences que peut-être devrait sauter sur. Quoi d'autre est différent de la façon dont vous pourrait écrire ce même programme en C? 

L'ÉLÈVE: [inaudible]. 

DAVID J. Malan: Il ya pas de prototype en haut. Donc PHP-- et franchement, une beaucoup de languages-- moderne sont beaucoup plus intelligents et plus utile que les compilateurs C à vous peut mettre la fonction ici, vous pouvez mettre une fonction ici-bas, et l'interprète va à vous faire la faveur de la lecture L'ensemble du dossier avant de décider qu'il n'y a pas une fonction. So Nice améliorations ans plus tard. Mais il ya aussi quelque chose autre différent ou absent ici. Ouais? 

L'ÉLÈVE: [inaudible]. DAVID J. Malan: Nous ne devons pas déclarer les types de variables, alors nous verrons bientôt que il existe différents types en PHP, mais vous ne devez pas les spécifier, qui est aussi à la fois bon et mauvais. Et il ya une autre chose qui manquait. 

L'ÉLÈVE: Il n'y a pas de bibliothèques. 

DAVID J. Malan: Il n'y a pas de bibliothèques. OK, donc ce est agréable. Nous recevons beaucoup plus hors de la boîte. Donc, il ya effectivement beaucoup plus choses que je pensais étaient différentes. Que diriez-chemin dans le dos? Qu'est ce que ce est? Dites-le une fois de plus? 

L'ÉLÈVE: Pointeur. 

DAVID J. Malan: Pas de pointeurs. OK, au moins dans cet exemple, aucune. Voilà juste. Donc, il n'y a pas des pointeurs PHP en fait en général. Il ya ce qu'on appelle des références, mais nous ne serons pas passer trop de temps là-bas. Et quoi d'autre? 

L'ÉLÈVE: Main. DAVID J. Malan: Main. Donc, ce fut le biggie Je pensais. Remarquez qu'il n'y a aucun point d'entrée principal. Il vous suffit de commencer à écrire votre code. Et cela est effectivement va être avantageux lorsque nous passons momentanément à fait à l'aide basé sur le Web pour la même langue la programmation, pour lesquels nous ne veulent pas d'avoir un seul point d'entrée. Nous pourrions avoir un tas de URL, un tas de fichiers différents tout en prenant en entrée de l'utilisateur et produire une sortie. 

Mais voici la très décourageant exemple que je l'ai promis la dernière fois, à savoir dans ce dossier ici, les fautes d'orthographe. Donc, dans ce fichier Speller, qui nous ne sera pas passer trop de temps sur, il est essentiellement un porting-- P-O-R-T. Il est juste la parole donnée lorsque, par exemple, vous convertissez d'une langue généralement à l'autre manuellement. 

Ceci est un portage de PC version du correcteur orthographique de PSET 5. Et je essentiellement essayé de convertir ligne par ligne comme étroitement que possible. Donc, si vous aimez ce genre de chose, il est en fait une valeur à un moment donné les tirant à la fois côte à côté et voir ce qui est la même et ce qui est différent. Mais ils sont sacrément similaire. Si vous vous souvenez ce que Speller même ressemblait, même si vous ne l'avez pas avoir à modifier ce fichier, il est assez similaire structurellement avec juste un couple des changements ici et là. 

Donc, ceci est seulement pour dire qu'il est assez facile à convertir en orthographe de C à PHP. Mais dans le dictionnaire, il est quelque chose d'encore plus convaincant. Permettez-moi aller de l'avant et créer mon propre fichier dictionary.php. Ainsi légèrement différent en ce que nous l'appellerons .php au lieu de .c. Parce que cela est un fichier PHP, je do-- légèrement annoyingly-- ont pour démarrer le fichier avec une balise php comme ça. Et je vais aller de l'avant et définir quelques fonctions. Fonction appelée chèque, ce qui est va prendre en un mot comme avant. Mais de cet argument va avoir un dollar signer parce que nous sommes, encore une fois, en utilisant PHP. Une autre fonction de dictionary.c était charge et il a fallu au nom d'un dictionnaire, donc je vais prendre cette fonction prêt à aller. 

Un autre dans dictionary.c était quoi? Taille était l'une des plus belles que, à moins si vous avez gardé une variable autour. donc la taille vient de retourner une variable. Et puis il y avait déchargement. 

Il y avait donc ces quatre fonctions de problème mis 5 que vous avez besoin pour mettre en œuvre avec une certaine structure ou des structures de données. Donc je l'ai promis que dans PHP, nous pouvons déclarer une table de hachage, par exemple, tout cela plus facilement. En fait, si je veux une table de hachage, Je vais aller comme ça et il ya ma table de hachage. Et qui est la note, décourageant, que nous nous sommes quittés sur la dernière fois. Et vous savez quoi, si je voulais une variable de taille, bien, celui-ci est pas tout si différent de C, mais je vais aller de l'avant et le faire. Et remarquez aucun type de données. Et je vais revenir plus tard et en fait ajouter quelques commentaires ici. Mais qu'en est-charge? 

Si le signe dollar dictionnaire est le nom de mon fichier et je veux vraiment charger mots dans ce tableau l'entreprise, Je peux réellement faire quelque chose d'assez simple. One-- et cela est minorly annoying-- en PHP, vous devez spécifier l'intérieur d'une fonction si vous vouloir accéder à certaines mondial variable qui est défini à l'extérieur. 

Mais qui est pas particulièrement intéressant en ce moment. Ce qui est plus intéressant est ce pour chaque construis que je l'ai mentionné la dernière fois. Et il se trouve que PHP dispose d'une fonction appelé fichier dont le but dans la vie est d'ouvrir un fichier et lire dans l'ensemble de ses lignes dans un tableau et de les remettre à dos. 

Ce qui veut dire que je peux faire si dictionnaire que maintenant effectivement quand je l'appelle fichier, cela va me restituer un tableau de mots du fichier. Il est pas si bon. Il va toujours y avoir une ligne des mots, quelque chose linéaire. Mais je peux aller de l'avant et itérer sur chacun de ces mots à l'aide que nous avons vu brièvement syntaxe dernière fois. Et vous le verrez plus dans le prochain PSET. 

Mais maintenant, je dois une itération de la boucle sur chaque mot dans le dictionnaire. Et à chaque itération, rappelle que je suis appelant le mot courant "mot". Et tout ça va prendre pour mettre un mot dans le dictionnaire est va être le mot conjecture «vrai». Voilà ma fonction d'insertion. Voilà ma fonction de charge pour mon dictionnaire. Maintenant, il est un peu de la triche parce que, vous savez quoi, il ya en fait barre oblique inverse n est à la fin des mots que je devrais probablement me débarrasser de, mais qui est pas un problème parce que PHP a une fonction appelée côtelette qui littéralement côtelettes hors d'un caractère tout à la fin. Donc, pas de problème. Nous avons pris les devants et fait raccourci pour que tout cela. Et maintenant, je devrais probablement suivre de taille, donc de laisser au moins faire this-- taille ++. Je peux le faire comme avant. Et puis ce va probablement fonctionne très bien, de sorte que de revenir vrai. Terminé. PSET 5. 

[Rires] 

DAVID J. Malan: OK. Nous allons le faire à nouveau avec la prochaine PSET, aussi. Alors que sur la taille? Eh bien, celui-ci est, espérons-sur que vous attendez la dernière fois, même si je dois faire cette chose stupide mondiale. Il est juste un artefact de La conception de la langue. 

Mais chèque est un peu plus intéressant. Donc, si je passais en dollar Signe verbal, je première veulent avoir accès à cette table variable globale. Et maintenant, si je veux vérifier si un mot est là, Je peux simplement dire si il est vrai que le suivant est fixé dans le tableau, alors allez-y et retour vrai; autre, retourner faux. Terminé. L'autre moitié de PSET 5. 

Très bien, alors encore une fois, je suis couper quelques virages. En toute justice, je devrais probablement passer quelques secondes sur cette mise en oeuvre. Et je ne devrais probablement pas se moquer de tout le heures vous mettre sur la PSET tellement. Donc strtolower est une fonction. Quelque chose existentialiste similaire en C, au moins pour les caractères, mais PHP monde a une version toute de chaîne. 

Cela va forcer tout en minuscules, que certains d'entre vous aurait pu le faire canoniser ce vous mettez dans votre dictionnaire. Et maintenant, vous pouvez le faire en C, aussi. Cela n'a rien à voir avec PHP. 

Mais chaque fois vous avez un état booléenne, comme quelque chose en ligne 10 y, qui est seulement va évaluer à vrai ou faux, et si votre autre clairement est de retour vrai ou faux, je ne pouvais simplement vraiment faire ce sexy et il suffit de faire quelque chose comme ça. Alors qu'il est ma fonction de contrôle. Droit, si l'opérateur booléen renvoie true ou une fausse, disons simplement revenir tout de suite. 

Et il ya quelques autres améliorations Je pourrais faire ici et là. Déchargement Load--, par la manière, ce qui est fait. Rien à faire. Etant donné que la totalité de la mémoire dans PHP et bien d'autres langues est en fait géré pour vous. Ainsi, alors que dans C, comme vous avez appris douloureusement, tout ce que vous malloc ou calloc ou realloc, vous devez vous libérer. Tout ce que vous fopen, vous devez fclose, afin que les ressources sont finalement libérés et des outils comme Valgrind ne le font pas préavis et ne se plaignent pas, qui est une bonne chose pour fonctionner sur eux. 

Mais sûrement, il doit être quelques captures, non? Sinon, nous sorte de perdu tout un tas de semaines. Donc, il ya un certain nombre de raisons pourquoi nous prenons ce genre de trajectoire, mais il ya un compromis. Droit, ce qui a été thématique. 

Donc, ce qui pourrait un compromis ici en mouvement, de C à PHP? On se sent comme tout gagner jusqu'ici autre que un peu de la laideur ici ou là. Ouais. Qu'est ce que ce est? 

L'ÉLÈVE: [Inaudible] mémoire. DAVID J. Malan: Vitesse. D'accord. Eh bien, ma vitesse était assez rapide. Droit? Mais la vitesse d'exécution du programme? OK, donc ce est un bon point. 

Alors que cela arriverait, je l'avance indicé ma solution à la fois de l'essayer, l'un Je devais le grand tableau était une solution à base d'essayage, et je dois que dans ce répertoire ici. Donc je dans un moment, je peux aller de l'avant et exécuter sur la King James Bible, en appuyant sur Entrée. Et ce, nous l'espérons correct mise en œuvre à la fin, me donne le temps au total de 0,38 secondes pour que un exemple un peu arbitraire. 

Et si je vais maintenant dans cette deuxième fenêtre de terminal là où je l'ouvris premier gedit, laisser moi aller dans la code-- d'aujourd'hui qui, encore une fois, est dans ce répertoire et ici-- laissez-moi aller de l'avant et lance Speller. Donc, juste pour être clair, ceci est la version de PHP. Je suis simplement en vous montrant le haut de celui-ci ici. 

Donc, si je fais correcteur orthographique de tilde CS50 PSET 5 textes, King James, entrez. Il est encore plus rapide que l'écriture en C, mais la durée totale est, avis, 0,93, alors que mon Mise en œuvre sur la base-C était de 0,38. Donc, il ya une différence non négligeable. 

Et cela est juste sur un seul fichier. Si vous deviez exécuter les deux programmes par opposition au grand tableau et avoir tout un tas d'entrées testé, ce serait sûrement ajouter. Et si nous avions encore de plus grands ensembles de données, Cela, aussi, pourrait ajouter jusqu'à autant plus. Alors oui, verser de prix de vitesse est effectivement le cas. Quoi d'autre? Ouais? 

Étudiants: Le montant de l'utilisation de la RAM. 

DAVID J. Malan: Montant de l'utilisation de la RAM. Donc, je ne donne pas un seconde pensé en écrivant cette PHP la version de combien mémoire dont je me servais. Je suis complètement report que pour PHP lui-même et celui qui a écrit ce programme. Et que peut-être OK, mais si je fait vraiment soucier serrant autant la performance de mon programme ou sur mon site ou sur quel outil Je construis, peut-être PHP, en effet, ne sont pas la bonne langue. 

Et en fait, voilà pourquoi, pour Ainsi, un grand nombre servers-- Web Les programmes actuels que servir jusqu'à web content-- ne sont pas écrits en PHP ou en Python ou Ruby. Ils sont écrits, comme vous allez maintenant faire avec PSEt 6, en C de sorte que vous pouvez presser chaque bit de la performance de ce et vraiment exercer contrôle à grain fin sur ce qui est passe au-dessous de la capot et pas juste le prendre pour acquis certains plus Structure de données de niveau. 

Considérons, après tout, quiconque en PHP mis en œuvre cette notion d'un hachage table-- il est en fait plus correctement appelé un array-- associatif At-il une idée de ce genre des entrées que vous allez être mettre dans la structure? Alors, évidemment pas, non? Il est un outil générique dans la boîte à outils qui est fourni à tous ceux qui veulent de l'utiliser, et aussi sûrement il ne peut pas être optimisé en définitive exactement ce que vous voulez faire. 

Donc, le temps de développement de commerce offs-- pourrait diffèrent, les performances peuvent différer, complexité ou utilisation de la mémoire peuvent différer. Et si ce que vous trouverez de plus en plus est qu'il n'y a va être différent outils pour le commerce. Et en fait, pour une super-majorité de projets définitifs de personnes dans cette classe, croyez-le ou pas, C ne va pas être la bonne langue à utiliser. 

Et en fait, l'un des plats à emporter en fin de compte pour une classe comme ça est de vous faire réfléchir sur, bien, ce que vous devriez retirer le plateau quand vous voulez pour résoudre un problème. Et en effet, nous traverserons ce pont d'autant plus que nous regardons d'autres langues même au-delà aujourd'hui. 

Alors disons transition maintenant peut-être un contexte plus familier pour utiliser un langage comme PHP. Il est assez courant d'utiliser au la ligne de commande, l'écriture de scripts comme je l'ai fait, mais il est beaucoup, beaucoup plus commun. Et il a été conçu pour être utilisé dans la forme de fichiers qui se terminent généralement dans .php-- mais qui est pas un prerequisite-- qui se génèrent du contenu web. 

Alors laissez-moi aller de l'avant et d'ouvrir un peu Je exemples préparés à l'avance. Et ce sont en fait sorte de vrai histoires que l'une des premières choses Je me suis jamais fait après avoir terminé CS50 et peut-être, je pense, il ya des années de CS51 est mon colocataire et moi aidions pour exécuter le intra-muros de première année programme de sport, qui, à la fois, avait freshman enregistrement pour divers sport en remplissant une feuille de papier, comme on l'appelait, marche dans la cour de Wigglesworth, et en le déposant dans certains La baisse de la porte de surveillant. Et puis il ou elle passerait par eux et puis nous fait manuellement par courriel que nous étions inscrits pour un peu de sport. 

Donc, clairement, une opportunité d'amélioration. Ces jours-ci, vous risquez de mettre à juste Google formes, mais dans la journée, nous avons eu à réellement atteindre en vue de: cette n'a pas atteindre même que longtemps ago-- pour une programmation langue qui n'a pas PHP. À l'époque, il était ce qu'on appelle Perl, qui est sorti de la mode depuis. Mais l'idée est la même. 

Et je me suis assis essentiellement à essayer au port va versions de Perl à PHP, mais en plein déni, ne pas donner toute pensée de l'esthétique pour l'instant. Voici donc une page Web. Ceci est un fichier. Si je zoome, son apparence appelé froshim0.php juste parce qu'elle est notre première Ainsi dans cette série. Et remarquez qu'il a ce qui semble comme une forme de HTML très laid, mais une forme est intéressant car elle permet moi d'apporter une contribution de l'utilisateur pour le navigateur. 

Maintenant, la dernière fois que nous avions un formulaire, qui ne nous soumettons notre paramètre de requête, le paramètre de file d'attente comme on l'appelait? Donc, pour Google, non? Nous sommes totalement botté sur l'idée de faire quelque chose avec cette entrée. 

Mais aujourd'hui, nous commençons à produire une sortie. Et le comportement que je vais voir est ici d'abord assez trivial. David, je vais cocher sexe ici, dire Matthews ici. Je ne vais pas être capitaine. Je vais cliquez sur Enregistrer. Et remarquez que l'URL a changé de registre-0.php, et puis il ya ce texte laid ici. Je ne songeait à la mise en forme de ce produit. 

Mais ce qui est intéressant est que trois valeurs ont été apparemment transmis à. Ceci est le genre de PHP équivalent à printf-- nous allons voir ce qu'il est vraiment appelé dans un bit-- qui se contente d'afficher ce que vous avez passé en elle. Donc, ce qui suggère que cette forme a au moins trois domaines à elle, et vous avez vu me les taper. L'un était mon nom, on était sexe, on était dortoir. Et le capitaine n'a même pas été envoyé le serveur parce que je ne le vérifie. 

Ceci pour dire apparemment, lorsque vous soumettez des choses sur le web, non seulement l'URL parfois change-- parfois ça ne marche pas. En fait, le nom de fichier a changé mais ce qui est absent de l'URL que nous avons vu la dernière fois avec Google. Ouais? 

L'ÉLÈVE: Aucune chaîne de requête 

DAVID J. Malan: Il n'y a pas la chaîne de requête. Il n'y a pas d'interrogation quelque chose. Il n'y a pas d'interrogation q est égal à chats, comme nous l'avons fait la dernière fois. Et il n'y a certainement pas nom de point d'interrogation est égal à David ou dortoir est égal à Matthews, Alors où est ce que tout va? 

Eh bien, permettez-moi de revenir à gedit ici et ouvrir le premier de ces fichiers dans mon serveur virtuel, hôte local, publique répertoire ici et aller dans froshim0. Donc, il se trouve que presque tous de cette page est juste HTML. Et cela pourrait vous être inconnus, mais il sera bientôt plus avec PSET 6 et PSET 7 et 8 PSET. Mais ceci est juste une page HTML. 

Et les choses intéressantes semble être ici. Une balise de formulaire dont l'attribut l'action a une valeur de registre 0. Voilà pourquoi lorsque je soumets cela, il va à ce fichier. Mais la méthode est différente poste de today--. Donc, il se trouve qu'il ya au moins deux méthodes utilisées sur le web pour envoyer des informations à partir du navigateur de serveur. Get met dans l'URL. Poste met ailleurs. Et quand et pourquoi pourriez-vous voulez vraiment un site Web à utiliser après puis la place de faire, juste intuitivement? Tout site Web. Quel type de données devraient être transmises seulement par inférence maintenant par la poste, par opposition pour obtenir, si nous avons vu les deux différences? L'ÉLÈVE: [Inaudible] sécuriser. DAVID J. Malan: Si vous voulez quelque chose d'être sécurisé. Ainsi, vous pouvez taper un mot de passe dans un site Web, une carte de crédit dans un site Web serait nature de ces sous-optimale si le navigateur a mis cette valeur à l'intérieur de l'URL. Pourquoi? Vous voyez, ce qui ne fonctionne pas semble être une grosse affaire, mais les chances sont que vous marchez assez fréquemment loin de votre ordinateur ou de l'utilisation ordinateur laboratoires, et si quelqu'un d'autre ou même d'un colocataire pourrait facilement monter et voir que l'information privée. Lorsque vous envoyez un e-mail via le web, vous avez probablement ne veulent pas que fin de données dans l'URL ainsi. Et donc il ya un certain nombre de raisons pourquoi nous pourrions le mettre ici. Et droit photos--, je ne peux même pas tout à fait imaginez comment vous vous prenez un graphique, comme un JPEG, et le mettre dans une URL. Vous pourriez le faire. Il ya des moyens de codage, mais il est tout simplement pas simple comme ça. 

Alors inscrivez-0 est en fait très décevante. Tout ce qu'il dit est littéralement ce. Elle imprime à l'intérieur de certaines Balises HTML suivantes. Je dois une balise PHP ici imbriquée dans une balise de pré. "Pre" signifie simplement texte pré-formaté, mono-espacées, comme une machine à écrire. 

Printr est une fonction récursive d'impression. Et puis il ya cette Ce qui est intéressant ici. Et nous reviendrons à cette car il ya d'autres, mais signe de dollar de soulignement poste semble être une variable en PHP dans lequel tout vous envoyez à partir du navigateur de serveur est stocké pour vous. Et nous allons voir comment obtenir à cette information avant longtemps. 

Mais d'abord, revenons à un exemple un peu différent. Entrant dans register-- ou plutôt, froshims1.php, qui est un peu différent. Je pris un peu plus effort de mise en forme, même si elle est encore assez laid. Mais je vais aller de l'avant et tapez "David" maintenant. Homme. Nous allons vérifier "capitaine" cette fois. Nous ferons Matthews. Et enregistrer. 

Et cette fois, il est dit, hm, pas vraiment. Très bien, alors ce enregistre-1? Laissez-moi aller dans le registre ouvert 1 hm et--. Très bien, alors cela est intéressante, et ce est un tremplin vers l'entreprise programmes plus intéressants. 

Remarquez le haut de ce fichier a une PHP étiquette ainsi que quelques commentaires. Et ce sont, pour l'instant, une distraction donc on va plutôt se débarrasser de ces commentaires tout comme ils le sont dans C. Et je prétendent avec ce morceau de code avec un commentaire que ce code est la validation de la soumission. 

Eh bien, il se trouve que variables comme signe de dollar souligner poste sont appelé super-globales. Ils sont comme ces variables globales spéciales qui sont juste omni-actuellement disponibles dans votre programme. Et vous pouvez utiliser la notation crochet à l'index dans les pas en utilisant des numéros comme 0, 1, 2, 3, mais les mots réels. 

Ainsi, vous pouvez penser de signe dollar souligner poste comme une sorte de table de hachage que vous pourriez passer une clé dans une recherche mot entre crochets, et il va vous redonner la valeur que l'utilisateur a effectivement fourni. PHP dispose d'une fonction appelé vide qui vient dit oui ou non, cette variable est vide ou non. Nous avons ces doubles barres, qui signifie simplement ou, comme en C. 

Donc, en effet, cette ligne 4 est juste dire si l'utilisateur n'a pas donné de nom ou ne pas donner un genre ou n'a pas donner un dortoir, aller de l'avant et de rediriger le ou son via cette ligne ici. Donc, cela est un peu cryptique, mais cela signifie juste littéralement revenir à cet endroit, il plates l'utilisateur retour à l'endroit où il ou elle vient. Mais il est un peu inélégante dans que je codés en dur il. 

Mais que faire si cette situation se ne pas évaluer à vrai? Que faire si l'utilisateur ne m'a donné son ou son nom et son dortoir et le sexe? Que si la condition est pas va évaluer à vrai, si je ne frappe pas la sortie à la ligne 7. Donc ce qui se passe? Et ceci est ce qui est intéressant sur PHP. 

Vous pouvez déposer dans et hors de mode PHP, pour ainsi dire. Si vous voulez un peu de code à exécuter, vous pouvez ouvrir et fermer une balise PHP et mettre le code là comme je l'ai fait ici. Dès que vous fermez la balise PHP, le serveur va simplement cracher ce que vous y mettez. Et en effet, cela faisait partie de la conception originale de PHP, pour une meilleure et pour le pire, était-ce mélange des codes et balises langue. Et nous verrons que cette très dévolue rapidement dans un désordre. Et si nous ferons mieux que ce terme, mais seulement remarquer la facilité avec laquelle je suis effectivement en mesure d'exécuter une certaine logique. 

Mais encore un peu décevante. Ouvrons la version deux de Frosh SGI, qui apparemment soumet à register2.php. Donc, ce fichier va réellement à regarder presque la même. Je vais aller à Frosh MI 2. Mais dans Frosh IM 2, Voyons ce qui se passe. 

David, cliquez sur le bouton de la radio, comme il est appelé; Matthews, sans capitaine. Créer. Vous êtes inscrit. Pas vraiment. Oh, attends, nous venons de faire que par exemple, ne pas nous? Tout droit, veille. Nous allons faire les trois. Il est clair que quelque chose est sur arriver avec Gmail. Nous y arriverons. 

Donc Frosh IMS 3 ressemble à ceci. Pas différent. Mais quand je fais David, homme, Matthews, et enregistrer, cette troisième et dernière version revendications, tout simplement vous, sont des marques vraiment. Voilà en quelque sorte immatériel. Mais je prétends avec cette troisième et dernière version Je suis maintenant recréé exactement ce que mon colocataire et moi avons construit pour l'IMS Frosh il ya années de programme. Et il était simple. Il n'y avait aucune base de données, pas de feuille de calcul Excel. Mais plus important encore, il n'y avait plus de papier parce que ce que nous avons fait avec ce programme était effectivement d'envoyer le surveillant, qui recevait auparavant ces choses via des formulaires. 

Et apparemment, nous avons programmé ce dans de telle sorte que lorsque quelqu'un enregistre, Compte les courriels de John Harvard le proctor-- ou lui-même dans ce cas, John Harvard-- avec la suite text-- "Cette personne juste enregistré." Nom est David, le capitaine est vide; sexe, mâle; et dortoir, Matthews. 

Donc ce qui est arrivé? Eh bien, le fichier en question ici est apparemment register3.php. Et si je l'ouvre, vous verrez à la fois la puissance de ce type de code et aussi, franchement, l'insécurité d'un système comme le courrier électronique. Je viens effectivement prétendu soit John Harvard de la façon suivante. 

Je dois la balise php ouvert en haut, qui dit simplement voici un peu de code PHP. Ici-bas, il se révèle des bibliothèques dans PHP. Il ne suffit pas besoin de inclure des fichiers d'en-tête que beaucoup. Vous obtenez plus avec la évier de cuisine, pour ainsi dire. 

Mais cette fois, à la ligne 4, je fais vouloir bibliothèque spéciale appelée PHP Mailer, qui est quelque chose que vous peut installer gratuitement dans de nombreux systèmes. Ici-bas, je vais valider la soumission seulement en vérifiant que l'utilisateur ne donne moi un nom, un sexe, et un dortoir. Et si oui, allez-y et instancier un logiciel de messagerie. 

Vous pouvez penser à cela comme étant une ligne de code qui alloue seulement. Il est comme malloc, mais il est un peu plus sexy dans que vous mentionnez pas seulement malloc et un nombre générique. Vous dites me donner un de ceux-ci, me donner une nouvelle partie. 

Et si vous avez programmé dans Java ou C ++ ou d'autres langages, vous avez peut-être vu. Mais le court, ce, si inconnu, cette ligne met en signe de dollar courrier une structure spéciale appelée un objet qui a intégré fonctionnalité de messagerie. Et en effet, remarquer et syntaxe similaire. 

Cela ne veut pas un pointeur, en soi. PHP utilise simplement la même syntaxe. Cette ligne dit utilisation SMTP-- Simple Mail Transfer Protocole, qui est que le Protocole utilisé pour envoyer du courrier. Ceci est la spécification utilisation Le serveur SMTP de Harvard, qui est quelque part ici sur le campus. 

Cela revient à dire que TCP le numéro de port à qui parler, et je viens de comprendre que par googler ou en demandant à l'assistance. Et puis parce que Harvard utilise une partie la sécurité du système sur le poste de Server-- à crypter au moins trafic entre vous et elle, même si tout le monde peut envoyer à it-- Je vais tourner sur le protocole TLS pour maintenir ce sécurisé. 

Mais ceci est où les choses obtenir un peu peur. Je peux juste arbitrairement dire que je suis jharvard, et je peux juste arbitrairement moi par courriel ici. Et puis je peux spécifier une sujet avec cette ligne ici. 

Et cela semble juste laid, mais il est juste un tas de concaténation. Avère que PHP a un symbole super utile, comme certaines langues, l'opérateur point, qui concatène juste littéralement chaîne après chaîne après chaîne, et vous ne devez pas malloc ou chiffre la longueur totale de la chaîne. Vous venez de le faire. Et en effet, parce que je suis la concaténation dans toutes ces choses avec ces points, Voilà pourquoi l'email je envoyé regardé comme il l'a fait. 

Et puis enfin ici, je suis l'envoi de courrier. Donc, si cela est faux, Je vais mourir, qui est une fonction qui imprime seulement à l'écran certains de message d'erreur. Mais il est, en fait, l'appel de la fonction d'envoi. Sinon, si tout cela échoue, il me redirige ici. 

Et pourquoi ai-je vois que Je suis inscrit vraiment? Eh bien, il est arrivé ici. Donc, je soulève cette question pour un couple de raisons. 

Un, cela est exactement comment si vous construisez certains sites pour un projet final ou pour le monde réel, il est comment vous envoyer des rappels par courriel à vos clients ou à vos abonnés. Voici comment vous envoyer des rappels de mot de passe. Voici comment vous envoyer des messages de personnes qu'ils ont une nouvelle Facebook message en attente ou quelque chose comme ça. 

Mais il parle aussi de le fait que ce pourrait ont été très bien à partir de Davin ou quelqu'un d'autre. Et je dis ce genre de avec un sourire parce que je suis tout à fait sûr de ce qui se passe à travers plusieurs de vos esprits à ce point. Mais ceci est l'un de ceux Faites ce que je dis, pas comme je fais genre de choses, car il est trivial de créer des messages électroniques de ce genre. Mais comme vous avez pu le voir ou lire dans le Crimson, de la fin il est également assez trivial pour les personnes de remonter à une origine. Et me demander un certain temps, peut-être CS50 à déjeuner, comment je première ont pris connaissance de très près presque à la carte ed nombreuses années il ya quand je découvris comment l'Internet a travaillé. Donc, en toute case-- légèrement après que le conseil d'ED a fait. 

Ainsi, dans tous les cas, il existe un tas ensemble de super-globales, comme on les appelle ici, dont l'un nous saw-- dollar signe de soulignement poste. Il ya un homologue appelé get, qui est là choses à partir d'un URL finit par aller. Et il ya tout un tas d'autres, séance too-- et le serveur et les cookies. Nous y reviendrons cookie d'un autre temps, mais la session est plutôt cool parce que le droit maintenant-- jusqu'à maintenant-- tout ce que nous avons fait avec un navigateur Web est une sorte de apatride, pour ainsi dire. Je peux cliquer autour, accès des fichiers sur le serveur, ce qui se passe sur l'écran, mais puis la connexion se ferme. L'Internet Explorer ou la Firefox icône arrête de tourner et vous voyez ce que cette page web contient. 

Donc HTTP est apatride dans ce une fois qu'il établit une connexion, obtient des données, ça y est. Pas plus de connexion, contrairement à Skype, contrairement à Facetime, contrairement GChat, qui maintient une constante connexion au serveur. Le web est fondamentalement déconnecté, si nous voir avant longtemps comment nous pouvons simuler choses comme Facebook chat et GChat, qui maintiennent la illusion-- ou fait faire maintenir une connexion constante à l'aide plus la technologie moderne. 

Mais si je vais à, dire, counter.php, ceci est un autre exemple simple, comme nous le verrons, que pense actuellement Je me suis rendu sur le site le temps zéro. Mais si je recharge simplement la page, il sait de toute façon je suis ici avant. Si je recharge encore, il sait que je suis ici avant. Et encore et encore et encore et encore. 

Il ya donc une certaine plus-plussing passe, mais avis la petite chose tourne toujours si brièvement dessus et puis se déconnecte, il est pas comme je dois une constante Connexion à mon appareil. Eh bien, si je vais dans counter.php, remarquez comment il est simple. Je donne d'abord cette spéciale fonction que nous allons bientôt commencer à prendre pour acquis appelé début de la session. Démarrer une session. 

Et une session est désormais juste va être un seau, comme un centre panier dans lequel vous pouvez mettre des valeurs et le type de confiance en tant que programmeur qu'ils vont être là quand que l'utilisateur vient back-- un second plus tard, une heure plus tard, même un an plus tard, tant qu'il ou elle ne disparaît pas leurs cookies, comme nous le verrons par la suite voir. Et maintenant, je viens une condition if ici. Donc, si la clé suivante, appelé compteur, est fixé à l'intérieur de ce super global-- ce hachage table, si vous will-- appelé session, alors allez-y et prenez la valeur de la réflexion session-- de ce qu'un centre cart-- et stocker dans une variable temporaire appelée compteur. 

Sinon, si cette valeur était contre pas définie dans le soi-disant panier, juste initialiser à 0. Enfin, ici, aller et remettre dans les caddies ou la session la valeur du compteur 1. Donc, il se trouve que ce ici-- contenant spécial qui, encore une fois, est un de ces associés tableaux, un tableau que vous pouvez indexer en mots au lieu de numbers-- persiste même après que l'utilisateur va. Encore une fois, je vais revenir à la page maintenant. Ça a été une minute ou deux. Mais il rappelle que je l'ai été ici 19 fois avant. Ceci est mon 20ème visite. 

Et si cela va être la clé de mise en œuvre de tout site Web qui se souvient que vous êtes connecté, que vous mettez quelque chose littérale dans votre panier à acheter ou que vous avez des nombre de messages en attente. Chaque fois que vous voulez souvenir de l'information, nous verrons que PHP, comme plusieurs autres langues, nous donne cette illusion de l'Etat même si, comme vous le verrez dans PSET 6, comme vous êtes des requêtes HTTP du client au serveur, ça y est. Une fois que vous obtenez en retour que réponse, il n'y a rien de plus revenir à partir du serveur par défaut. Mais nous allons voir comment contourner cela. 

Eh bien maintenant, nous allons essayer de nettoyer cette place un peu. Nous avons vu quelques-uns différents exemples là-bas. Oh, et en passant, pour ceux familiers ou non, la raison pour laquelle la Exemple Frosh GI a de regarder vraiment laid à bien slightly--, ugly-- encore légèrement moins laid mais toujours laid En effet, si nous regardons le code source ici, il se trouve que je dois cette tout en haut du fichier. 

Avère que bootstrap est l'un des nombreux bibliothèques librement disponibles là-bas qui existe pas pour les langages de programmation toujours, mais pour CSS ou JavaScript pour ou HTML ou un certain nombre de langues. 

Et ces gens ici-- l'origine est sorti de Twitter-- juste avoir tout un tas de styles. Il est un volumineux dossier ici que quelqu'un a écrit, ou de quelqu'un a écrit, au fil du temps que précise des couleurs et la mise en forme et ainsi de suite pour que je puisse genre de emprunter leur syntaxe et ne pas avoir à comprendre comment poser ma forme. Ceci est également minifiés de sorte que l'ordinateur peut le comprendre, mais pas nécessairement un humain. Voilà donc pourquoi la juste stylisation il a changé. 

Mais faisons maintenant mieux en termes de conception, parce que si nous restons en bas cette route trop longtemps, notre code va déraper et Messier. Donc, nous allons mettre l'accent sur ces exemples ici. La dernière pour aujourd'hui. 

Voici donc un super simple la version 1.0 du site Web de CS50. Il a seulement des liens vers des conférences et des syllabus, et il utilise cette liste non ordonnée tag-- l'étiquette UL que nous avons utilisé la dernière fois. Et si, en fait, si je ouvrir source de la page, vous verrez que cela est vraiment, vraiment HTML simple. Et en fait, même si cela est un fichier PHP sous le capot, il est toujours juste cracher uniquement HTML pour l'instant. 

Donc, si je clique sur Conférences, nous voyons cela se produise. Et si je clique sur semaine zéro, nous voyons cela. Et si je clique sur Mercredi, nous voyons cela. Et ce fut apparemment le PDF les diapositives de ce jour-là. Tout ce que je l'ai fait avec un lien est balise d'ancrage à cette adresse ici. 

Donc, ceci est seulement pour dire cela est une jolie version simple du site Web de CS50. Voyons comment il est mis en œuvre. Si je vais dans le répertoire de mvc0, nous verrons quelques fichiers. L'un est un fichier README, si une partie de ce qui est trop rapide, il vous suffit de fouiller un peu partout plus tranquillement plus tard. Et remarquez ici est un fichier index.php. Il se trouve que si vous-même, l'être humain, ne spécifiez pas un nom définitif en une adresse URL, le serveur Web habituellement déduit un nom par défaut pour vous. Un indice du point quelque chose est généralement la valeur par défaut. 

Voilà pourquoi il ya un instant quand je me suis rendu cette URL ici, aucun nom de fichier, pas de fichier extension, aucune période dans l'URL. Il savait juste comme par magie à chercher index.php. Il est juste une convention. L'on pourrait appeler quelque chose. 

Donc, si je vais maintenant en index.php, vous verrez que, indeed-- nous allons se débarrasser des commentaires ici parce qu'il ya vraiment rien d'intéressant à it-- cela est juste codé en dur HTML. Voilà donc cohérent, si, avec ma demande que vous pouvez les mélanger HTML et PHP. Il n'y a pas réelle la logique de programmation ici. 

Et les autres fichiers sont assez beaucoup comme sans intérêt. Il est juste une semaine codé en dur ici pour une semaine et la semaine un m w, le lundi et le mercredi. Et puis si je ouvre la semaine zéro, remarque qu'il est presque identique. 

Et qui est une sorte de clé à emporter. Remarquez à quel point cela est redondant. Ces fichiers changent à peine, et pourtant je tiré un de ces copier / coller des emplois où je pris un file-- probablement en semaine zero-- copié quand la semaine est venu autour, et tordu quelques valeurs. Nous devrions probablement en mesure à faire mieux que cela. 

Donc, revenons à MVC et aller à la version d'un. Et notez que je dois une quelques fichiers, parce que ce était commune à tous ces fichiers juste un ago-- instant si je reviens à la version 0, Revenons en indice, et juste postulate-- une fois je me débarrasser de la comments-- quelle partie de cette page est sans doute dans chacun de mes fichiers? Il suffit d'appeler le. Les lignes sont dupliquées probablement l'ensemble de ces pages? Ouais? 

L'ÉLÈVE: [inaudible]. 

DAVID J. Malan: 1 à 9. Oui, absolument. 1 à 9, à l'exception peut-être 8 change un peu parce que CS50 devient conférences ou semaine zéro ou quelque chose. Mais presque identique. Donc, tout ça est juste sorte de copié-collé. Et il ya un couple autres lignes je peux penser de qui sont probablement identique dans tous les fichiers. 

ÉTUDIANT: 12 et 13. DAVID J. Malan: Ouais. Bien sûr, 12, 13, et 14 probablement, juste parce que les choses intéressantes qui se passe sur les lignes 11 et 10, il semblerait. Alors regardons à la version 1, qui cherche à améliorer sur ce point. Dans la version 1 de cette example-- MVC nous allons expliquer ce que signifie MVC dans un moment-- si je vais dans l'indice, il sorte de semble un peu confus maintenant. Il est pas tout à fait aussi simple qu'avant. 

Mais une fois que vous commencez à lire attentivement, il est assez simple ce qu'il fait. Apparemment, la ligne 1 et ligne 8 ont remplacé tous les trucs que vous identified-- juste mais juste pour faire bonne mesure, Je quittai les AMT là juste au cas où certains jours ne sont pas une liste de choses. Et nécessitent donc est un peu comme livre inclure dans C. Il copie et colle le contenu efficacement ici dans ce fichier. 

Ainsi, dans header.php, comme vous peut déduire de son nom, va être l'en-tête de la page. Il est une sorte de orpheline ici. Il a seulement le haut de, mais il n'y a pas plus de contenu ci-dessous. 

Et si je regarde le pied en attendant, qui était l'autre fichier mentioned-- celui-ci est encore moins intéressant, mais encore une fois, il est courant de tout. Voilà donc le pied de page. Ceci est l'en-tête. Ceci est le fichier qui est changer, alors pourquoi ne pas essayer de tenir compte de la communauté avec ces deux lignes ici? 

Mais nous pouvons nettoyer cette un peu plus loin. Je vais aller de l'avant et ouvrir version à deux où nous verrons qu'il n'y a un nouveau fichier, helpers.php. Nous allons voir ce qui est dans un moment. Allons à l'index, comme le le point d'entrée comme avant. 

Et maintenant je remarque exigeant helpers.php, pas d'en-tête ou pied de page. Mais des aides est une sorte de helpers.c et helpers.h de PSET 2 ou PSET 3 il ya longtemps quand vous avez réellement ne chercher et de trouver pour que PSET, et vous aviez tous de votre code pour le tri et la recherche dans un fichier séparé. Voilà ce qui se passe ici. 

Et maintenant, la ligne 3 est un peu différent. Et il est juste une ligne. Pour rendre le tout encore plus clair, je ne pouvais ne ce soit stylistiquement cohérente avec tout ce que nous avons fait. Mais qui est pas vraiment changer la fonctionnalité. Il est juste une ligne de code réel. 

Apparemment, il ya une fonction quelque part appelé rendre tête, et ceci est où les choses devenir assez puissant. Notez que l'intérieur de ses parenthèses est ce autre pièce de la syntaxe? Il est probablement un peu difficile à dire, mais remarquer there's-- je vais mettre un peu de blanc espace. Il est entre crochets. 

Et entre crochets, nous avons vu il ya un peu dans le cadre de tableaux associatifs, qui sont, encore une fois, comme les tables de hachage. Et si vous pensez maintenant à C, la l'ordre des arguments dans une fonction doit toujours être la même. Vous devez vous rappeler que la commander est-- x, y, z ou z, y, X- et vous devez leur fournir toujours dans le même ordre ou les consulter si vous avez oublié. 

Mais ce qui semble être une façon intelligente de passer une valeur de clé arbitraire paires selon lesquelles un titre est le nom d'un argument dans ce cas et CS50 est sa valeur. Et le fait que je dois ces crochets signifie ici que je pouvais passer aussi dans quelque chose comme une semaine est égal à 0 ou 1 ou 2 ou 3. Nous avons donc paramétré cette fonction de manière à ce que cela peut prendre plusieurs entrées, mais pour l'instant il est juste l'un. 

Si je vais maintenant en helpers.php, remarqué ce qu'il fait. Ceci est un peu de nouvelles fonctionnalités, mais pour l'instant il suffit de prendre sur la foi que cela est la syntaxe avec laquelle vous définir une fonction en PHP. Vous dites littéralement fonction. Vous ne spécifiez pas un retour tapez, et cela correspond avec le détail des variables plus tôt où on n'a pas vraiment fortement de la frappe. 

Cela indique seulement que, par défaut, ce prend un associative tableau comme un argument. Et vous savez quoi? Si l'utilisateur ne passe pas une dans, prendre une valeur par défaut. 

Ceci est une fonction qui ne possède pas de C pour nous, ce qui est bien, parce que maintenant données, même si vous ne lui donnez pas quelque chose, va être un tableau mais un vide. Et en passant, extrait juste fait quelque chose de génial où il prend toutes les clés de cette tableau associatif, toutes les choses vous pourriez mettre entre crochets, et crée des variables sur les afin que nous puissions finalement avoir accès à eux dans footet.php et header.php. Voilà un peu abstrait, alors laissez-moi le signale. 

Dans index.php, remarque que je suis passant dans une paire de valeur de la clé de titre avec une valeur de CS50. Si je regarde maintenant helpers.php, remarquerez que RenderHeader est l'extraction de ces données que je suis de passage dans, et nécessitant alors header.php. Qu'est-ce que je l'ai fait est en quelque sorte un pauvre homme de maintenant la mise en oeuvre des opérations suivantes. 

Si je ouvre header.php, avis que je l'ai plus dur codé le mot CS50 dans ce fichier d'en-tête. Je l'ai mis ce vrai atrocement fonction nommée, HTML caractères spéciaux, là-dedans. Mais remarquez ce que je fais. Je dois HTML est ouvert. Je dois ensuite ouvert le crâne et le titre ouvert. 

Et puis à l'intérieur de son titre et ouvert balises de fermeture, je dois un peu de code PHP. Et cela est une belle mais de syntaxe, qui signifie simplement écho à. Il signifie littéralement this-- écho à la following-- mais cela est plus sexy à écrire. Echo sur le titre qui a été adoptée en. 

Mais que pensez-vous HTML caractère spécial est tout au sujet, surtout si vous avez une certaine expérience HTML avant? Quels sont les caractères pourrait être dangereux de passer à une page où vous êtes la génération dynamique la page Web avec ce code? Permettez-moi de passer à ce fichier, la version deux, et voir si je peux pas faire cela. 

Version deux est la suivante. Et tout remarquer est très bien, fonctionne bien. Mais suppose que je vais dans index.php et Je précisé que le titre de ma page est pas CS50. Il est alerte script de support ouvert Bonjour tout le monde, près apostrophe, fermeture de parenthèse, point-virgule, parenthèse ouverte, script slash. 

Script, comme nous allons finalement voir, est un tag que vous pouvez utiliser pour utiliser d'une autre langage de programmation appelé JavaScript à l'intérieur d'une page web. Et remarquez maintenant la logique ici. Voici une clé appelée titre. Voici sa valeur fou longtemps. 

Mais si je vais aux aides page- ou au contraire, la page d'en-tête, Je vais appeler cette fonction sur ce premier titre. Donc, si je recharge maintenant cette page, je voir ce qui a l'air ridicule, mais il est sûr. Il semble tout simplement stupide. 

Mais supposons que la place Je l'avais oublié. Et croyez-moi, un nombre non nul de vous oubliez de le faire et vous aurez un peu laborieux étudiant ou un ami à venir vous à la foire de CS50 ou anonyme la nuit de fouiller sur votre site et essentiellement injectant du code à votre insu sur votre site en quelque sorte. 

Parce que si je crache tout simplement à titre ici et titre there-- bien, si le titre littéralement ressemble à ceci et PHP comme un langage qui peut cracher sur un autre texte sur les langues, ce va littéralement de remplacer cette étiquette avec, bien sûr, ce que je mets ailleurs. 

Donc, si je vais maintenant ici et recharger après défaire les mécanismes de sécurité, maintenant je dois Bonjour tout le monde ici. Maintenant que ce pas tout ce que la taille d'un Deal, mais vous pourriez faire quelque chose un peu plus malveillant ici, comme il est autre tags-- comme nous le verrons, une fois que nous passons plus de temps dans JavaScript-- comme emplacement point href obtient, entre guillemets, HTTP business.com, mais à l'opposé de ce que de l'autre jour. Et maintenant, vous pouvez induire une web Page d'aller effectivement immédiatement à cette page web ici. 

Et en fait, je ne veux pas même pour aller à business.com parce que je ne veux pas à savoir ce qui est. Mais cela, aussi, va déclencher le code à injecter dans cette page. Donc, ceci est seulement pour dire que même si nous introduisons super tôt sur certains des structures plus complexes, il est tout vers une fin de faire en sorte que votre code est pas exploitable. 

Alors maintenant, une troisième version ici. Il se fait un peu amateur. Je ne l'ai pas vraiment like-- le côté anal de moi devenait un peu agacé par la fait que je l'avais une fonction appelée RenderHeader et RenderFooter qui étaient presque identiques. Donc je me suis dit, pourquoi pas Je paramétrer ces fonctions en un seul appelé rendre, ont-il un second argument comme le nom du modèle, la finale à render-- soit en-tête ou le pied? Et puis éventuellement, si je veux à passer dans certaines paires clé-valeur comme je le fais pour le titre de la tête mais pas pour le pied de page, Je pourrais le faire. 

Et maintenant si je vais dans helpers.php, il est un peu plus complexe. Et je ferai signe mes mains à la détails, mais il est juste une fonction. Voilà donc une étape vers une meilleure conception. 

Nous pouvons prendre un peu plus loin. Si je vais dans ma quatrième version de ce, remarquez maintenant que je fais quelque chose encore plus de nature cryptique. Et je sais que cela est une beaucoup d'absorber à la fois, mais nous sommes juste un peu de nettoyage choses. Maintenant, je vais mettre mes aides déposer dans un dossier appelé durée comprend juste un arbitraire nommer où je veux mettre des choses que je veux comprendre: et puis le reste de la présente est la même. 

Mais si je regarde maintenant dans gedit, avis que je suis débarrassé de tous ces autres fichiers et je l'ai les déplacés, par exemple, dans ici. Et puis dans les modèles, Je dois voir ici, trop. Et si tout cela est maintenant vers une étape d'utilisation d'un bien meilleur modèle de conception. Et nous sommes très rapidement va éloigner de la fonctionnalité par défaut de PHP, qui nous avons commencé ici avec, où vous venez COMMINGLE PHP, et votre HTML, CSS et votre, et vous venez de cracher et vous allez sur votre chemin. Il ne va pas être très maintenable. Tout comme en C, nous avons commencé à l'aide plusieurs fichiers et plusieurs fonctions et affacturage choses cela. Nous ferons la même chose ici. Et de fait, dans la cinquième et dernière version ici, je l'ai fait une autre chose. Vous pouvez même utiliser dot dot, qui, encore une fois, est tout simplement le répertoire parent. Pour être encore plus soucieux de la sécurité, parce que si je regarde l'écoute ici pour la cinquième et la version finale, un avis que je dois un répertoire appelé ici publique, et ensuite sur la même niveau, pour ainsi dire, Je dois comprend et modèles et puis ce fichier texte readme. 

Et la raison pour laquelle je l'ai structuré il aime this-- et tant de web hôtes, en particulier ces 5 $ par les mois ou les $ 10 par mois, si vous avez déjà eu un de ces services-- ce que beaucoup d'entre eux ne est qu'ils attendent juste de vider tous de vos fichiers dans un répertoire, comme nous l'avons fait déjà avec ce premier exemple. 

Mais dès que vous commencez à construire plus des sites sophistiqués qui stockent seulement données que vous aimez et fichiers que vous soucier, l'organisation fait des choses correctement et avec plus de sécurité conscience à l'esprit peut nous commençons à défendre contre tous les amis que vous avez dans ou en dehors de cette classe qui, dès que vous commencez à faire programmes vous-même sur le web, vont commencer à ramasser sur vous et sur eux. 

Et si nous regardons en fin de compte à cette conception. Ceci est juste une image qui représente ce qui suit. Nous allons mettre toute notre la logique de programmation dans un ou plusieurs fichiers, et nous allons commencer tout appelant les contrôleurs. Il est où le cerveau de nos sites sont en réalité. Ensuite, nous allons avoir des vues et points de vue sont aussi simple que séparé files-- appelés modèles, souvent. Ils ont juste le esthétique de ma page, ce que je veux la page pour regarder like-- les couleurs et le tracé et les positions de toutes les variables. 

Et puis plus intéressant que nous finirons par arriver à est le modèle qui va être juste le mot nous tape sur les autres technologies que nous apportons dans le image, comme les bases de données réelles, de sorte que lorsque vous voulez pour enregistrer des informations, vous ne vous contentez pas d'envoyer un e-mail à votre surveillant ou à vous-même, vous stockez en fait dans une base de données en utilisant une autre langue connue sous le nom SQL. Et si nous laissons ici aujourd'hui et ramasser avec ce mercredi et introduire ensuite des bases de données. 

[Lecture de musique]