1 00:00:00,000 --> 00:00:03,920 >> [Lecture de musique] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. Malan: Très bien. 4 00:00:13,800 --> 00:00:15,640 Ceci est CS50. 5 00:00:15,640 --> 00:00:17,620 Ceci est le début de la huitième semaine. 6 00:00:17,620 --> 00:00:22,440 Et vous souvenez peut-être que nous nous sommes quittés dernier temps à regarder une nouvelle langue 7 00:00:22,440 --> 00:00:23,240 tout à fait. 8 00:00:23,240 --> 00:00:25,905 En fait, celui qui est assez léger et il est même pas 9 00:00:25,905 --> 00:00:26,940 un langage de programmation. 10 00:00:26,940 --> 00:00:31,100 Il est un langage de balisage qui nous permet réellement structurer et rendre les pages Web. 11 00:00:31,100 --> 00:00:33,350 Et quand vous quelque chose d'autre en conjonction avec this-- 12 00:00:33,350 --> 00:00:35,670 ou vous sera bientôt le cas, si vous ne l'avez pas déjà. 13 00:00:35,670 --> 00:00:38,530 Nous allons utiliser en cascade Les feuilles de style CSS, ou qui 14 00:00:38,530 --> 00:00:40,971 est un autre type de langue avec les propriétés et les valeurs 15 00:00:40,971 --> 00:00:43,220 qui va nous laisser faire des choses comme changer la couleur 16 00:00:43,220 --> 00:00:46,010 et changer la position et ces sortes de réglages. 17 00:00:46,010 --> 00:00:49,940 Mais aujourd'hui, et au-delà, nous commençons à se concentrer sur les langues les plus puissants, 18 00:00:49,940 --> 00:00:52,810 langages de programmation comme PHP réels. 19 00:00:52,810 --> 00:00:54,880 >> Donc, PHP a été autour depuis un certain temps. 20 00:00:54,880 --> 00:00:56,810 Et comme vous le verrez, il a été conçu principalement 21 00:00:56,810 --> 00:01:00,280 dès le début réel de utiliser dans le développement web 22 00:01:00,280 --> 00:01:02,360 et en fait la génération des pages web. 23 00:01:02,360 --> 00:01:04,849 Alors, quel genre de caractéristiques ne une langue 24 00:01:04,849 --> 00:01:10,040 besoin afin de rendre web pages dynamiquement avec elle? 25 00:01:10,040 --> 00:01:14,760 >> En d'autres termes, si vous voulez générer dynamically-- contenu comme de Facebook 26 00:01:14,760 --> 00:01:19,480 RSS, qui change constamment, ou messages instantanés qui apparaissent de temps 27 00:01:19,480 --> 00:01:21,872 à time-- comme ce qui est le élément clé de la fonctionnalité 28 00:01:21,872 --> 00:01:24,580 vous avez besoin dans un langage de programmation ce serait vous laisser dynamique 29 00:01:24,580 --> 00:01:28,070 imprimer de nouvelles informations à l'écran? 30 00:01:28,070 --> 00:01:28,685 >> L'ÉLÈVE: Code. 31 00:01:28,685 --> 00:01:29,560 DAVID J. Malan: Code. 32 00:01:29,560 --> 00:01:30,440 D'accord. 33 00:01:30,440 --> 00:01:31,995 Nous allons prendre cela. 34 00:01:31,995 --> 00:01:35,310 Un peu plus précis. 35 00:01:35,310 --> 00:01:37,639 Je veux dire, nous pourrions faire ce avec C, franchement. 36 00:01:37,639 --> 00:01:38,930 Ce serait une douleur dans le cou. 37 00:01:38,930 --> 00:01:41,045 Mais-- est cet engagement? 38 00:01:41,045 --> 00:01:41,895 >> L'ÉLÈVE: Oui. 39 00:01:41,895 --> 00:01:42,677 Variables, peut-être? 40 00:01:42,677 --> 00:01:43,760 DAVID J. Malan: Variables. 41 00:01:43,760 --> 00:01:44,160 OK, bien sûr. 42 00:01:44,160 --> 00:01:45,740 Les variables peuvent certainement nous aider. 43 00:01:45,740 --> 00:01:47,020 Et même quelque chose de simple. 44 00:01:47,020 --> 00:01:50,640 Nous l'avons utilisé dans la première programme de la première journée 45 00:01:50,640 --> 00:01:55,686 et quand nous sommes dit "Bonjour tout le monde." 46 00:01:55,686 --> 00:01:56,570 >> L'ÉLÈVE: Imprimer. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. Malan: Imprimer, non? 48 00:01:57,778 --> 00:02:01,050 Imprimer, ou printf dans la monde de C. Donc, tout ce temps, 49 00:02:01,050 --> 00:02:03,362 nous avons eu à notre disposition un language-- C, 50 00:02:03,362 --> 00:02:05,570 dans particular-- et même Scratch d'ailleurs que 51 00:02:05,570 --> 00:02:07,400 peut générer des chaînes de texte. 52 00:02:07,400 --> 00:02:11,090 >> Eh bien, si le code HTML, comme nous l'avons vu la semaine dernière, est juste un tas de chaînes de texte 53 00:02:11,090 --> 00:02:14,692 mais avec crochets ouvert et fermé supports et une sorte de rime 54 00:02:14,692 --> 00:02:16,650 et la raison derrière elle, eh bien nous pourrions vraiment 55 00:02:16,650 --> 00:02:20,440 commencer à générer des pages de navigateur manuellement en les saisissant dans gedit 56 00:02:20,440 --> 00:02:23,870 ou dans Microsoft Word, pour que matter-- nous avons juste besoin d'un éditeur de texte. 57 00:02:23,870 --> 00:02:26,830 >> Ou nous pourrions écrire du code, à votre suggestion 58 00:02:26,830 --> 00:02:30,435 plus tôt, cela nous laisser générer dynamiquement HTML, 59 00:02:30,435 --> 00:02:32,560 et qui est ce que nous allons de commencer à faire avec PHP 60 00:02:32,560 --> 00:02:34,900 et, finalement, encore avec un langue appelée le JavaScript 61 00:02:34,900 --> 00:02:37,910 est d'utiliser une langue à générer un autre. 62 00:02:37,910 --> 00:02:40,720 Et en effet, voici ce que Facebook et beaucoup, beaucoup d'autres sites 63 00:02:40,720 --> 00:02:44,530 faire pour réellement dynamique afficher de nouvelles informations à vous. 64 00:02:44,530 --> 00:02:47,117 >> Commençons donc avec un this-- cryptique ligne à la recherche, mais un 65 00:02:47,117 --> 00:02:48,450 qui est en fait assez puissant. 66 00:02:48,450 --> 00:02:51,210 Jusqu'à présent, nous avons utilisé C, qui est un langage compilé. 67 00:02:51,210 --> 00:02:55,050 Et juste un rapide recap-- une compilation langue a ce caractère? 68 00:02:55,050 --> 00:02:59,050 Vous avez évidemment besoin de compiler , mais ça veut dire quoi? 69 00:02:59,050 --> 00:03:00,505 Ouais? 70 00:03:00,505 --> 00:03:02,940 >> L'ÉLÈVE: Il doit être assemblé en code machine. 71 00:03:02,940 --> 00:03:03,060 >> DAVID J. Malan: OK. 72 00:03:03,060 --> 00:03:04,530 Il doit être assemblé en code machine. 73 00:03:04,530 --> 00:03:07,340 Vous prenez donc votre code source, qui est en quelque sorte de l'anglais comme. 74 00:03:07,340 --> 00:03:09,270 Vous convertissez que pour quelque chose niveau inférieur, 75 00:03:09,270 --> 00:03:11,590 qui est finalement appelé code-- objet de 0 et de 1. 76 00:03:11,590 --> 00:03:14,830 Et ce sont ces 0 et de 1 qui une unité centrale, comme ceux fabriqués par Intel, 77 00:03:14,830 --> 00:03:16,110 fait comprendre. 78 00:03:16,110 --> 00:03:19,690 >> Maintenant, PHP et Python et Ruby et JavaScript et grappes d'autres 79 00:03:19,690 --> 00:03:23,190 langues ne sont pas compilés langues mais les langues interprété, 80 00:03:23,190 --> 00:03:26,630 ce qui signifie que vous venez saisissez-les et vous ne les mettez pas en 0 et de 1. 81 00:03:26,630 --> 00:03:30,790 Vous fournissez la place juste alors que entrée au programme de quelqu'un d'autre, 82 00:03:30,790 --> 00:03:32,080 appelé un interprète. 83 00:03:32,080 --> 00:03:34,460 Et cette personne programme a été conçu 84 00:03:34,460 --> 00:03:38,280 de comprendre ce que chacun et chaque symbole en Python ou PHP 85 00:03:38,280 --> 00:03:42,650 ou rubis ou un nombre quelconque de d'autres langues moyens. 86 00:03:42,650 --> 00:03:44,760 >> Et si tous nous avons besoin est quelque chose comme ça. 87 00:03:44,760 --> 00:03:46,350 Donc, en fait, je vais passer à l'appareil 88 00:03:46,350 --> 00:03:48,100 ici, tout en toute ancienne fenêtre, et nous sommes 89 00:03:48,100 --> 00:03:52,580 aller de l'avant et ouvert un fichier appelé, dire bonjour. 90 00:03:52,580 --> 00:03:55,780 Maintenant déjà, je pourrais avoir sauvé ce même avec une extension de fichier, 91 00:03:55,780 --> 00:03:57,910 mais je vais faire quelque chose d'encore plus simple ici. 92 00:03:57,910 --> 00:04:02,450 Je vais aller de l'avant et commencer ce fichier avec la syntaxe cryptique. 93 00:04:02,450 --> 00:04:06,310 Ainsi, "l'utilisateur, bin, env, pour l'environnement, php ". 94 00:04:06,310 --> 00:04:10,670 >> Ceci est tout simplement une ligne de code qui est aller dire à mon système d'exploitation, 95 00:04:10,670 --> 00:04:13,730 aller trouver dans votre région environnement quel qu'il soit, 96 00:04:13,730 --> 00:04:18,149 où PHP est-- la interpreter-- et aller de l'avant et d'utiliser cette interprète 97 00:04:18,149 --> 00:04:20,589 d'interpréter le code suivant. 98 00:04:20,589 --> 00:04:22,760 Maintenant, ce genre est de une caractéristique laid de PHP. 99 00:04:22,760 --> 00:04:24,980 Mais dans cette langue, toute fois que vous écrivez du code PHP, 100 00:04:24,980 --> 00:04:29,200 vous avez besoin d'avoir un de ces laid balises PHP délimitant le début 101 00:04:29,200 --> 00:04:32,220 de votre code-- 00:04:37,430 >> Mais au-dessous ici, je peux maintenant faire quelque chose assez simple comme bonjour printf virgule, 103 00:04:37,430 --> 00:04:40,922 monde barre oblique inverse n proche citation, parenthèse fermante. 104 00:04:40,922 --> 00:04:42,630 Et puis juste pour faire bonne mesure, je vais 105 00:04:42,630 --> 00:04:45,380 à aller de l'avant et à proximité mon tag php ici 106 00:04:45,380 --> 00:04:47,390 de sorte que tout semble bien joli imprimé. 107 00:04:47,390 --> 00:04:50,780 >> Et dès que je clique sur Enregistrer, gedit est en fait assez intelligent 108 00:04:50,780 --> 00:04:54,620 d'examiner cette première ligne et réaliser, oh, vous écrivez du code PHP. 109 00:04:54,620 --> 00:04:56,710 Je voudrais souligner la syntaxe avec les couleurs 110 00:04:56,710 --> 00:04:58,690 ici de sorte qu'il se un peu plus. 111 00:04:58,690 --> 00:05:01,300 Mais maintenant, je vais aller jusqu'à ma fenêtre du terminal. 112 00:05:01,300 --> 00:05:02,340 Je vais un zoom avant. 113 00:05:02,340 --> 00:05:06,860 >> Ce programme a été appelé «bonjour», donc je vais faire slash dot bonjour, 114 00:05:06,860 --> 00:05:07,990 mais permission refusée. 115 00:05:07,990 --> 00:05:08,490 Et bash. 116 00:05:08,490 --> 00:05:10,610 En fait, nous avons entendu de cette Il ya une chose quelques semaines 117 00:05:10,610 --> 00:05:13,140 dans le contexte de Shellshock, un de ces bugs. 118 00:05:13,140 --> 00:05:16,240 >> Mais Permission denied nous avons vu avant, peut-être dans un contexte différent. 119 00:05:16,240 --> 00:05:19,060 Est-ce que quelqu'un se souvient comment vous pourriez réparer quelque chose 120 00:05:19,060 --> 00:05:22,100 où l'autorisation est refusée comme ça? 121 00:05:22,100 --> 00:05:23,490 Quelle est la commande, au moins? 122 00:05:23,490 --> 00:05:24,159 >> L'ÉLÈVE: chmod. 123 00:05:24,159 --> 00:05:26,700 DAVID J. Malan: Ouais, chmod, pour changer le mode d'un fichier. 124 00:05:26,700 --> 00:05:30,171 Et vous aurez d'autant plus l'habitude de la semaine prochaine avec un problème ultérieur 125 00:05:30,171 --> 00:05:30,670 fixer. 126 00:05:30,670 --> 00:05:33,211 Mais pour l'instant, je vais changer le mode de ne pas être lisible, 127 00:05:33,211 --> 00:05:36,650 mais de donner à chacun executeability privilèges, la capacité 128 00:05:36,650 --> 00:05:37,710 pour exécuter ce fichier. 129 00:05:37,710 --> 00:05:40,360 Et je vais assigner que le fichier bonjour. 130 00:05:40,360 --> 00:05:45,150 >> Si je le fais maintenant slash dot bonjour entrer, vous voir, en fait, mon programme, bonjour monde. 131 00:05:45,150 --> 00:05:48,760 Et ce que l'étape ai-je sauter clairement tout à fait? 132 00:05:48,760 --> 00:05:49,520 Compilation. 133 00:05:49,520 --> 00:05:51,680 Donc, je viens de rencontrer ce programme tout simplement. 134 00:05:51,680 --> 00:05:55,690 >> Et il se trouve que vous pouvez faire cela avec beaucoup de syntaxe proche du C. 135 00:05:55,690 --> 00:06:03,400 Laissez-moi aller pour le code d'aujourd'hui, que je mets dans mon répertoire de serveur virtuel 136 00:06:03,400 --> 00:06:05,250 ici, pour des raisons réelles nous y reviendrons. 137 00:06:05,250 --> 00:06:09,350 Et je vais aller dans, disons, les conditions 1. 138 00:06:09,350 --> 00:06:12,450 >> Et vous verrez ici, d'abord et avant tout, tout un tas de commentaires. 139 00:06:12,450 --> 00:06:15,240 Mais cela est en fait une re-création en PHP 140 00:06:15,240 --> 00:06:18,960 d'un programme que nous avons fait dans la semaine une des conditions dites 1.c 141 00:06:18,960 --> 00:06:20,690 où dans le but durée de ce programme 142 00:06:20,690 --> 00:06:22,950 est apparemment à poser l'utilisateur pour un nombre entier 143 00:06:22,950 --> 00:06:25,270 et puis faire un peu de moelleux analyse sur ce par quoi 144 00:06:25,270 --> 00:06:29,510 vous dites si elle est positive ou négatif ou égal à zéro. 145 00:06:29,510 --> 00:06:34,220 Et je soulève cette question parce que, sauf peut-être un petit détail, 146 00:06:34,220 --> 00:06:37,150 il est impossible de distinguer si loin de C. 147 00:06:37,150 --> 00:06:39,930 >> Quelle est la seule caractéristique que peut-être ici saute 148 00:06:39,930 --> 00:06:41,410 à vous comme un peu différent? 149 00:06:41,410 --> 00:06:42,160 Peut-être deux choses. 150 00:06:42,160 --> 00:06:42,660 Ouais? 151 00:06:42,660 --> 00:06:44,070 >> L'ÉLÈVE: Dollar signe n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. Malan: Ouais. 153 00:06:44,944 --> 00:06:46,210 Donc, signe de dollar n est présent. 154 00:06:46,210 --> 00:06:48,120 Et le symbole du dollar, que nous le verrons, vont 155 00:06:48,120 --> 00:06:51,460 être une solution au début d'une variable en PHP. 156 00:06:51,460 --> 00:06:54,250 Il est à la fois bon et bad-- bon dans qu'il est une sorte de manifeste ce qui est 157 00:06:54,250 --> 00:06:56,797 une variable, mauvaise en ce qu'elle est encore une autre chose à taper. 158 00:06:56,797 --> 00:06:58,630 Et il ya une autre chose que nous avons pas assez 159 00:06:58,630 --> 00:07:00,876 vu, au moins par cette orthographe. ouais? 160 00:07:00,876 --> 00:07:01,630 >> L'ÉLÈVE: Readline. 161 00:07:01,630 --> 00:07:02,671 >> DAVID J. Malan: Readline. 162 00:07:02,671 --> 00:07:06,550 Readline nous ne voyons pas, en soi, C, même si il existe quelque chose 163 00:07:06,550 --> 00:07:09,530 similaire, mais nous avons utilisé getString, ce qui est sa contrepartie. 164 00:07:09,530 --> 00:07:12,950 Donc, si je vais dans cette répertoire, qui se trouve être, 165 00:07:12,950 --> 00:07:18,030 comme je l'expliquerai dans un peu dans mon vhost répertoire et ma source est le répertoire 166 00:07:18,030 --> 00:07:22,730 et je vais de l'avant et faire slash dot conditions-- whoops-- point barre 167 00:07:22,730 --> 00:07:26,710 conditions 1, vous verrez, à nouveau, la même autorisation Issue-- refusée. 168 00:07:26,710 --> 00:07:33,610 >> Permettez-moi de zoom avant et chmod un plus x sur les conditions, les conditions de slash dot. 169 00:07:33,610 --> 00:07:35,222 Je voudrais un entier, se il vous plaît, 50. 170 00:07:35,222 --> 00:07:36,930 Et nous pourrions jouer ce jeu toute la journée. 171 00:07:36,930 --> 00:07:39,140 Il va se comporter exactement comme il l'a fait dans une semaine. 172 00:07:39,140 --> 00:07:42,860 >> OK donc pas si différent, sauf pas juste que peu léger de la syntaxe, 173 00:07:42,860 --> 00:07:45,490 mais au sommet, je nouveau eu cette ligne qui 174 00:07:45,490 --> 00:07:49,760 m'a permis de créer quelque chose qui ressemble à un programme en C appelé bonjour, 175 00:07:49,760 --> 00:07:51,150 conditions dites 1. 176 00:07:51,150 --> 00:07:54,520 Mais il est pas 0 et ceux Je exécuter directement. 177 00:07:54,520 --> 00:07:57,620 Il est plutôt l'exécution de cette interprète dont le nom 178 00:07:57,620 --> 00:07:59,440 se trouve être identique à la langue. 179 00:07:59,440 --> 00:08:04,970 Le programme est appelé PHP, et mon code dessous de la ligne un est transmis en elle. 180 00:08:04,970 --> 00:08:07,740 >> Nous pouvons faire un autre assez simple exemple rappelle quelque chose 181 00:08:07,740 --> 00:08:09,240 nous l'avons fait il ya quelques semaines. 182 00:08:09,240 --> 00:08:12,020 Encore une fois, ceci est une sorte de morceau arbitraire d'un code 183 00:08:12,020 --> 00:08:14,000 qui, apparemment, ne ce lorsque vous exécutez il? 184 00:08:14,000 --> 00:08:15,625 Qu'est-ce que cela va-imprimer, sans doute? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Donc, d'abord sur la ligne 16, il est va dire x est maintenant 2, probablement. 187 00:08:28,250 --> 00:08:30,920 % D est le même que i $ pour printf. 188 00:08:30,920 --> 00:08:33,460 Alors qu'il est au cube, point, point, point, à la ligne 17. 189 00:08:33,460 --> 00:08:36,299 Puis la ligne 18 apparaît pour appeler une fonction Cubed. 190 00:08:36,299 --> 00:08:37,600 Et où est Cubed défini? 191 00:08:37,600 --> 00:08:40,319 >> Eh bien, il ressemble à la ligne 25, de sorte que tout ce qui est pas différent. 192 00:08:40,319 --> 00:08:42,610 Je l'ai eu quelques commentaires ci-dessus , mais, pour la plupart, 193 00:08:42,610 --> 00:08:45,370 il est un assez simple portage ou la conversion 194 00:08:45,370 --> 00:08:48,470 à partir du programme de C à la version de PHP. 195 00:08:48,470 --> 00:08:52,670 Mais il ya maintenant un couple de différences que peut-être devrait sauter sur. 196 00:08:52,670 --> 00:08:56,100 Quoi d'autre est différent de la façon dont vous pourrait écrire ce même programme en C? 197 00:08:56,100 --> 00:08:57,900 >> L'ÉLÈVE: [inaudible]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. Malan: Il ya pas de prototype en haut. 199 00:09:00,070 --> 00:09:03,210 Donc PHP-- et franchement, une beaucoup de languages-- moderne 200 00:09:03,210 --> 00:09:06,920 sont beaucoup plus intelligents et plus utile que les compilateurs C à vous 201 00:09:06,920 --> 00:09:09,740 peut mettre la fonction ici, vous pouvez mettre une fonction ici-bas, 202 00:09:09,740 --> 00:09:12,740 et l'interprète va à vous faire la faveur de la lecture 203 00:09:12,740 --> 00:09:16,010 L'ensemble du dossier avant de décider qu'il n'y a pas une fonction. 204 00:09:16,010 --> 00:09:17,970 So Nice améliorations ans plus tard. 205 00:09:17,970 --> 00:09:22,126 Mais il ya aussi quelque chose autre différent ou absent ici. 206 00:09:22,126 --> 00:09:22,626 Ouais? 207 00:09:22,626 --> 00:09:25,084 >> L'ÉLÈVE: [inaudible]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. Malan: Nous ne devons pas déclarer les types de variables, 209 00:09:27,750 --> 00:09:31,780 alors nous verrons bientôt que il existe différents types en PHP, 210 00:09:31,780 --> 00:09:34,970 mais vous ne devez pas les spécifier, qui est aussi à la fois bon et mauvais. 211 00:09:34,970 --> 00:09:36,623 Et il ya une autre chose qui manquait. 212 00:09:36,623 --> 00:09:37,430 >> L'ÉLÈVE: Il n'y a pas de bibliothèques. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. Malan: Il n'y a pas de bibliothèques. 214 00:09:38,630 --> 00:09:39,350 OK, donc ce est agréable. 215 00:09:39,350 --> 00:09:40,540 Nous recevons beaucoup plus hors de la boîte. 216 00:09:40,540 --> 00:09:43,373 Donc, il ya effectivement beaucoup plus choses que je pensais étaient différentes. 217 00:09:43,373 --> 00:09:44,350 Que diriez-chemin dans le dos? 218 00:09:44,350 --> 00:09:46,032 Qu'est ce que ce est? 219 00:09:46,032 --> 00:09:46,740 Dites-le une fois de plus? 220 00:09:46,740 --> 00:09:47,960 >> L'ÉLÈVE: Pointeur. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. Malan: Pas de pointeurs. 222 00:09:49,270 --> 00:09:51,280 OK, au moins dans cet exemple, aucune. 223 00:09:51,280 --> 00:09:52,070 Voilà juste. 224 00:09:52,070 --> 00:09:55,090 Donc, il n'y a pas des pointeurs PHP en fait en général. 225 00:09:55,090 --> 00:09:58,730 Il ya ce qu'on appelle des références, mais nous ne serons pas passer trop de temps là-bas. 226 00:09:58,730 --> 00:09:59,520 Et quoi d'autre? 227 00:09:59,520 --> 00:10:00,185 >> L'ÉLÈVE: Main. 228 00:10:00,185 --> 00:10:01,060 DAVID J. Malan: Main. 229 00:10:01,060 --> 00:10:02,768 Donc, ce fut le biggie Je pensais. 230 00:10:02,768 --> 00:10:04,660 Remarquez qu'il n'y a aucun point d'entrée principal. 231 00:10:04,660 --> 00:10:06,525 Il vous suffit de commencer à écrire votre code. 232 00:10:06,525 --> 00:10:08,400 Et cela est effectivement va être avantageux 233 00:10:08,400 --> 00:10:10,560 lorsque nous passons momentanément à fait à l'aide 234 00:10:10,560 --> 00:10:13,980 basé sur le Web pour la même langue la programmation, pour lesquels nous 235 00:10:13,980 --> 00:10:16,580 ne veulent pas d'avoir un seul point d'entrée. 236 00:10:16,580 --> 00:10:19,980 Nous pourrions avoir un tas de URL, un tas de fichiers différents 237 00:10:19,980 --> 00:10:22,930 tout en prenant en entrée de l'utilisateur et produire une sortie. 238 00:10:22,930 --> 00:10:27,130 >> Mais voici la très décourageant exemple que je l'ai promis la dernière fois, 239 00:10:27,130 --> 00:10:30,130 à savoir dans ce dossier ici, les fautes d'orthographe. 240 00:10:30,130 --> 00:10:33,680 Donc, dans ce fichier Speller, qui nous ne sera pas passer trop de temps sur, il est 241 00:10:33,680 --> 00:10:37,870 essentiellement un porting-- P-O-R-T. Il est juste la parole donnée lorsque, par exemple, 242 00:10:37,870 --> 00:10:40,800 vous convertissez d'une langue généralement à l'autre manuellement. 243 00:10:40,800 --> 00:10:45,680 >> Ceci est un portage de PC version du correcteur orthographique de PSET 5. 244 00:10:45,680 --> 00:10:48,856 Et je essentiellement essayé de convertir ligne par ligne comme étroitement que possible. 245 00:10:48,856 --> 00:10:51,730 Donc, si vous aimez ce genre de chose, il est en fait une valeur à un moment donné 246 00:10:51,730 --> 00:10:54,229 les tirant à la fois côte à côté et voir ce qui est la même 247 00:10:54,229 --> 00:10:55,230 et ce qui est différent. 248 00:10:55,230 --> 00:10:57,510 Mais ils sont sacrément similaire. 249 00:10:57,510 --> 00:11:00,110 Si vous vous souvenez ce que Speller même ressemblait, 250 00:11:00,110 --> 00:11:02,110 même si vous ne l'avez pas avoir à modifier ce fichier, 251 00:11:02,110 --> 00:11:04,860 il est assez similaire structurellement avec juste un couple 252 00:11:04,860 --> 00:11:06,200 des changements ici et là. 253 00:11:06,200 --> 00:11:10,140 >> Donc, ceci est seulement pour dire qu'il est assez facile à convertir en orthographe 254 00:11:10,140 --> 00:11:12,000 de C à PHP. 255 00:11:12,000 --> 00:11:15,390 Mais dans le dictionnaire, il est quelque chose d'encore plus convaincant. 256 00:11:15,390 --> 00:11:19,270 Permettez-moi aller de l'avant et créer mon propre fichier dictionary.php. 257 00:11:19,270 --> 00:11:24,010 Ainsi légèrement différent en ce que nous l'appellerons .php au lieu de .c. 258 00:11:24,010 --> 00:11:26,980 Parce que cela est un fichier PHP, je do-- légèrement annoyingly-- ont 259 00:11:26,980 --> 00:11:30,132 pour démarrer le fichier avec une balise php comme ça. 260 00:11:30,132 --> 00:11:32,340 Et je vais aller de l'avant et définir quelques fonctions. 261 00:11:32,340 --> 00:11:35,770 Fonction appelée chèque, ce qui est va prendre en un mot comme avant. 262 00:11:35,770 --> 00:11:37,520 Mais de cet argument va avoir un dollar 263 00:11:37,520 --> 00:11:39,840 signer parce que nous sommes, encore une fois, en utilisant PHP. 264 00:11:39,840 --> 00:11:42,350 Une autre fonction de dictionary.c était charge 265 00:11:42,350 --> 00:11:47,120 et il a fallu au nom d'un dictionnaire, donc je vais prendre cette fonction prêt à aller. 266 00:11:47,120 --> 00:11:50,920 >> Un autre dans dictionary.c était quoi? 267 00:11:50,920 --> 00:11:54,580 Taille était l'une des plus belles que, à moins si vous avez gardé une variable autour. 268 00:11:54,580 --> 00:11:57,830 donc la taille vient de retourner une variable. 269 00:11:57,830 --> 00:11:59,090 Et puis il y avait déchargement. 270 00:11:59,090 --> 00:12:02,830 >> Il y avait donc ces quatre fonctions de problème mis 5 271 00:12:02,830 --> 00:12:06,770 que vous avez besoin pour mettre en œuvre avec une certaine structure ou des structures de données. 272 00:12:06,770 --> 00:12:10,170 Donc je l'ai promis que dans PHP, nous pouvons déclarer 273 00:12:10,170 --> 00:12:14,490 une table de hachage, par exemple, tout cela plus facilement. 274 00:12:14,490 --> 00:12:17,377 En fait, si je veux une table de hachage, Je vais aller comme ça 275 00:12:17,377 --> 00:12:18,460 et il ya ma table de hachage. 276 00:12:18,460 --> 00:12:21,555 Et qui est la note, décourageant, que nous nous sommes quittés sur la dernière fois. 277 00:12:21,555 --> 00:12:23,930 Et vous savez quoi, si je voulais une variable de taille, bien, 278 00:12:23,930 --> 00:12:25,867 celui-ci est pas tout si différent de C, 279 00:12:25,867 --> 00:12:27,450 mais je vais aller de l'avant et le faire. 280 00:12:27,450 --> 00:12:28,630 Et remarquez aucun type de données. 281 00:12:28,630 --> 00:12:31,180 Et je vais revenir plus tard et en fait ajouter quelques commentaires ici. 282 00:12:31,180 --> 00:12:32,480 Mais qu'en est-charge? 283 00:12:32,480 --> 00:12:35,780 >> Si le signe dollar dictionnaire est le nom de mon fichier 284 00:12:35,780 --> 00:12:39,600 et je veux vraiment charger mots dans ce tableau l'entreprise, 285 00:12:39,600 --> 00:12:42,360 Je peux réellement faire quelque chose d'assez simple. 286 00:12:42,360 --> 00:12:44,880 One-- et cela est minorly annoying-- en PHP, 287 00:12:44,880 --> 00:12:47,710 vous devez spécifier l'intérieur d'une fonction si vous 288 00:12:47,710 --> 00:12:51,060 vouloir accéder à certaines mondial variable qui est défini à l'extérieur. 289 00:12:51,060 --> 00:12:53,530 >> Mais qui est pas particulièrement intéressant en ce moment. 290 00:12:53,530 --> 00:12:57,920 Ce qui est plus intéressant est ce pour chaque construis que je l'ai mentionné la dernière fois. 291 00:12:57,920 --> 00:13:01,880 Et il se trouve que PHP dispose d'une fonction appelé fichier dont le but dans la vie 292 00:13:01,880 --> 00:13:05,550 est d'ouvrir un fichier et lire dans l'ensemble de ses lignes dans un tableau 293 00:13:05,550 --> 00:13:06,840 et de les remettre à dos. 294 00:13:06,840 --> 00:13:12,170 >> Ce qui veut dire que je peux faire si dictionnaire que maintenant effectivement quand je l'appelle fichier, 295 00:13:12,170 --> 00:13:15,472 cela va me restituer un tableau de mots du fichier. 296 00:13:15,472 --> 00:13:16,430 Il est pas si bon. 297 00:13:16,430 --> 00:13:20,130 Il va toujours y avoir une ligne des mots, quelque chose linéaire. 298 00:13:20,130 --> 00:13:23,880 Mais je peux aller de l'avant et itérer sur chacun de ces mots à l'aide 299 00:13:23,880 --> 00:13:25,710 que nous avons vu brièvement syntaxe dernière fois. 300 00:13:25,710 --> 00:13:27,940 Et vous le verrez plus dans le prochain PSET. 301 00:13:27,940 --> 00:13:32,070 >> Mais maintenant, je dois une itération de la boucle sur chaque mot dans le dictionnaire. 302 00:13:32,070 --> 00:13:36,100 Et à chaque itération, rappelle que je suis appelant le mot courant "mot". 303 00:13:36,100 --> 00:13:39,790 Et tout ça va prendre pour mettre un mot dans le dictionnaire est 304 00:13:39,790 --> 00:13:43,530 va être le mot conjecture «vrai». 305 00:13:43,530 --> 00:13:44,740 Voilà ma fonction d'insertion. 306 00:13:44,740 --> 00:13:46,661 Voilà ma fonction de charge pour mon dictionnaire. 307 00:13:46,661 --> 00:13:49,410 Maintenant, il est un peu de la triche parce que, vous savez quoi, il ya en fait 308 00:13:49,410 --> 00:13:52,920 barre oblique inverse n est à la fin des mots que je devrais probablement me débarrasser de, 309 00:13:52,920 --> 00:13:56,380 mais qui est pas un problème parce que PHP a une fonction appelée côtelette qui littéralement 310 00:13:56,380 --> 00:13:58,480 côtelettes hors d'un caractère tout à la fin. 311 00:13:58,480 --> 00:13:59,400 Donc, pas de problème. 312 00:13:59,400 --> 00:14:02,199 Nous avons pris les devants et fait raccourci pour que tout cela. 313 00:14:02,199 --> 00:14:05,240 Et maintenant, je devrais probablement suivre de taille, donc de laisser au moins faire this-- 314 00:14:05,240 --> 00:14:05,835 taille ++. 315 00:14:05,835 --> 00:14:07,339 Je peux le faire comme avant. 316 00:14:07,339 --> 00:14:10,380 Et puis ce va probablement fonctionne très bien, de sorte que de revenir vrai. 317 00:14:10,380 --> 00:14:10,930 Terminé. 318 00:14:10,930 --> 00:14:11,797 PSET 5. 319 00:14:11,797 --> 00:14:13,545 >> [Rires] 320 00:14:13,545 --> 00:14:14,420 >> DAVID J. Malan: OK. 321 00:14:14,420 --> 00:14:16,628 Nous allons le faire à nouveau avec la prochaine PSET, aussi. 322 00:14:16,628 --> 00:14:18,730 Alors que sur la taille? 323 00:14:18,730 --> 00:14:22,080 Eh bien, celui-ci est, espérons-sur que vous attendez la dernière fois, 324 00:14:22,080 --> 00:14:24,460 même si je dois faire cette chose stupide mondiale. 325 00:14:24,460 --> 00:14:26,610 Il est juste un artefact de La conception de la langue. 326 00:14:26,610 --> 00:14:28,450 >> Mais chèque est un peu plus intéressant. 327 00:14:28,450 --> 00:14:31,420 Donc, si je passais en dollar Signe verbal, je première 328 00:14:31,420 --> 00:14:34,060 veulent avoir accès à cette table variable globale. 329 00:14:34,060 --> 00:14:36,700 Et maintenant, si je veux vérifier si un mot est là, 330 00:14:36,700 --> 00:14:44,350 Je peux simplement dire si il est vrai que le suivant est fixé dans le tableau, 331 00:14:44,350 --> 00:14:49,957 alors allez-y et retour vrai; autre, retourner faux. 332 00:14:49,957 --> 00:14:51,180 Terminé. 333 00:14:51,180 --> 00:14:52,440 L'autre moitié de PSET 5. 334 00:14:52,440 --> 00:14:54,540 >> Très bien, alors encore une fois, je suis couper quelques virages. 335 00:14:54,540 --> 00:14:56,831 En toute justice, je devrais probablement passer quelques secondes 336 00:14:56,831 --> 00:14:58,300 sur cette mise en oeuvre. 337 00:14:58,300 --> 00:15:01,860 Et je ne devrais probablement pas se moquer de tout le heures vous mettre sur la PSET tellement. 338 00:15:01,860 --> 00:15:04,045 Donc strtolower est une fonction. 339 00:15:04,045 --> 00:15:06,670 Quelque chose existentialiste similaire en C, au moins pour les caractères, 340 00:15:06,670 --> 00:15:08,560 mais PHP monde a une version toute de chaîne. 341 00:15:08,560 --> 00:15:11,226 >> Cela va forcer tout en minuscules, que certains d'entre vous 342 00:15:11,226 --> 00:15:14,944 aurait pu le faire canoniser ce vous mettez dans votre dictionnaire. 343 00:15:14,944 --> 00:15:16,360 Et maintenant, vous pouvez le faire en C, aussi. 344 00:15:16,360 --> 00:15:17,780 Cela n'a rien à voir avec PHP. 345 00:15:17,780 --> 00:15:20,260 >> Mais chaque fois vous avez un état booléenne, 346 00:15:20,260 --> 00:15:22,680 comme quelque chose en ligne 10 y, qui est seulement 347 00:15:22,680 --> 00:15:27,145 va évaluer à vrai ou faux, et si votre autre clairement 348 00:15:27,145 --> 00:15:33,620 est de retour vrai ou faux, je ne pouvais simplement vraiment faire ce sexy 349 00:15:33,620 --> 00:15:38,360 et il suffit de faire quelque chose comme ça. 350 00:15:38,360 --> 00:15:40,500 Alors qu'il est ma fonction de contrôle. 351 00:15:40,500 --> 00:15:42,560 Droit, si l'opérateur booléen renvoie true ou une fausse, 352 00:15:42,560 --> 00:15:44,630 disons simplement revenir tout de suite. 353 00:15:44,630 --> 00:15:47,340 >> Et il ya quelques autres améliorations Je pourrais faire ici et là. 354 00:15:47,340 --> 00:15:51,380 Déchargement Load--, par la manière, ce qui est fait. 355 00:15:51,380 --> 00:15:52,850 Rien à faire. 356 00:15:52,850 --> 00:15:55,840 Etant donné que la totalité de la mémoire dans PHP et bien d'autres langues 357 00:15:55,840 --> 00:15:57,570 est en fait géré pour vous. 358 00:15:57,570 --> 00:16:00,330 Ainsi, alors que dans C, comme vous avez appris douloureusement, 359 00:16:00,330 --> 00:16:04,700 tout ce que vous malloc ou calloc ou realloc, vous devez vous libérer. 360 00:16:04,700 --> 00:16:08,770 Tout ce que vous fopen, vous devez fclose, afin que les ressources sont finalement libérés 361 00:16:08,770 --> 00:16:11,690 et des outils comme Valgrind ne le font pas préavis et ne se plaignent pas, 362 00:16:11,690 --> 00:16:13,570 qui est une bonne chose pour fonctionner sur eux. 363 00:16:13,570 --> 00:16:16,190 >> Mais sûrement, il doit être quelques captures, non? 364 00:16:16,190 --> 00:16:19,400 Sinon, nous sorte de perdu tout un tas de semaines. 365 00:16:19,400 --> 00:16:23,270 Donc, il ya un certain nombre de raisons pourquoi nous prenons ce genre de trajectoire, 366 00:16:23,270 --> 00:16:24,440 mais il ya un compromis. 367 00:16:24,440 --> 00:16:25,820 Droit, ce qui a été thématique. 368 00:16:25,820 --> 00:16:29,690 >> Donc, ce qui pourrait un compromis ici en mouvement, de C à PHP? 369 00:16:29,690 --> 00:16:33,250 On se sent comme tout gagner jusqu'ici autre que un peu de la laideur ici ou là. 370 00:16:33,250 --> 00:16:34,040 Ouais. 371 00:16:34,040 --> 00:16:34,700 Qu'est ce que ce est? 372 00:16:34,700 --> 00:16:36,064 >> L'ÉLÈVE: [Inaudible] mémoire. 373 00:16:36,064 --> 00:16:36,980 DAVID J. Malan: Vitesse. 374 00:16:36,980 --> 00:16:37,479 D'accord. 375 00:16:37,479 --> 00:16:40,720 Eh bien, ma vitesse était assez rapide. 376 00:16:40,720 --> 00:16:42,020 Droit? 377 00:16:42,020 --> 00:16:44,320 Mais la vitesse d'exécution du programme? 378 00:16:44,320 --> 00:16:45,580 OK, donc ce est un bon point. 379 00:16:45,580 --> 00:16:50,930 >> Alors que cela arriverait, je l'avance indicé ma solution à la fois de l'essayer, l'un 380 00:16:50,930 --> 00:16:53,510 Je devais le grand tableau était une solution à base d'essayage, 381 00:16:53,510 --> 00:16:55,510 et je dois que dans ce répertoire ici. 382 00:16:55,510 --> 00:16:58,510 Donc je dans un moment, je peux aller de l'avant et exécuter sur la King James Bible, 383 00:16:58,510 --> 00:16:59,657 en appuyant sur Entrée. 384 00:16:59,657 --> 00:17:01,990 Et ce, nous l'espérons correct mise en œuvre à la fin, 385 00:17:01,990 --> 00:17:05,109 me donne le temps au total de 0,38 secondes pour que 386 00:17:05,109 --> 00:17:07,270 un exemple un peu arbitraire. 387 00:17:07,270 --> 00:17:09,270 >> Et si je vais maintenant dans cette deuxième fenêtre de terminal 388 00:17:09,270 --> 00:17:14,569 là où je l'ouvris premier gedit, laisser moi aller dans la code-- d'aujourd'hui qui, encore une fois, 389 00:17:14,569 --> 00:17:19,650 est dans ce répertoire et ici-- laissez-moi aller de l'avant et lance Speller. 390 00:17:19,650 --> 00:17:23,470 Donc, juste pour être clair, ceci est la version de PHP. 391 00:17:23,470 --> 00:17:25,170 Je suis simplement en vous montrant le haut de celui-ci ici. 392 00:17:25,170 --> 00:17:32,020 >> Donc, si je fais correcteur orthographique de tilde CS50 PSET 5 textes, King James, entrez. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 Il est encore plus rapide que l'écriture en C, mais la durée totale 395 00:17:43,050 --> 00:17:47,650 est, avis, 0,93, alors que mon Mise en œuvre sur la base-C était de 0,38. 396 00:17:47,650 --> 00:17:49,110 Donc, il ya une différence non négligeable. 397 00:17:49,110 --> 00:17:51,100 >> Et cela est juste sur un seul fichier. 398 00:17:51,100 --> 00:17:53,480 Si vous deviez exécuter les deux programmes par opposition au grand tableau 399 00:17:53,480 --> 00:17:56,510 et avoir tout un tas d'entrées testé, ce serait sûrement ajouter. 400 00:17:56,510 --> 00:18:00,310 Et si nous avions encore de plus grands ensembles de données, Cela, aussi, pourrait ajouter jusqu'à autant plus. 401 00:18:00,310 --> 00:18:04,820 Alors oui, verser de prix de vitesse est effectivement le cas. 402 00:18:04,820 --> 00:18:05,470 Quoi d'autre? 403 00:18:05,470 --> 00:18:08,000 404 00:18:08,000 --> 00:18:08,860 Ouais? 405 00:18:08,860 --> 00:18:10,340 >> Étudiants: Le montant de l'utilisation de la RAM. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. Malan: Montant de l'utilisation de la RAM. 407 00:18:11,756 --> 00:18:15,380 Donc, je ne donne pas un seconde pensé en écrivant cette PHP 408 00:18:15,380 --> 00:18:17,300 la version de combien mémoire dont je me servais. 409 00:18:17,300 --> 00:18:22,080 Je suis complètement report que pour PHP lui-même et celui qui a écrit ce programme. 410 00:18:22,080 --> 00:18:24,500 Et que peut-être OK, mais si je fait vraiment 411 00:18:24,500 --> 00:18:28,420 soucier serrant autant la performance de mon programme ou sur mon site 412 00:18:28,420 --> 00:18:31,150 ou sur quel outil Je construis, peut-être 413 00:18:31,150 --> 00:18:33,310 PHP, en effet, ne sont pas la bonne langue. 414 00:18:33,310 --> 00:18:36,330 >> Et en fait, voilà pourquoi, pour Ainsi, un grand nombre servers-- Web 415 00:18:36,330 --> 00:18:38,980 Les programmes actuels que servir jusqu'à web content-- 416 00:18:38,980 --> 00:18:41,810 ne sont pas écrits en PHP ou en Python ou Ruby. 417 00:18:41,810 --> 00:18:44,630 Ils sont écrits, comme vous allez maintenant faire avec PSEt 6, 418 00:18:44,630 --> 00:18:48,120 en C de sorte que vous pouvez presser chaque bit de la performance de ce 419 00:18:48,120 --> 00:18:50,780 et vraiment exercer contrôle à grain fin sur ce qui est 420 00:18:50,780 --> 00:18:52,980 passe au-dessous de la capot et pas juste le prendre 421 00:18:52,980 --> 00:18:54,890 pour acquis certains plus Structure de données de niveau. 422 00:18:54,890 --> 00:18:58,071 >> Considérons, après tout, quiconque en PHP mis en œuvre 423 00:18:58,071 --> 00:19:00,070 cette notion d'un hachage table-- il est en fait plus 424 00:19:00,070 --> 00:19:04,260 correctement appelé un array-- associatif At-il une idée de ce genre 425 00:19:04,260 --> 00:19:07,090 des entrées que vous allez être mettre dans la structure? 426 00:19:07,090 --> 00:19:08,260 Alors, évidemment pas, non? 427 00:19:08,260 --> 00:19:10,340 Il est un outil générique dans la boîte à outils qui est 428 00:19:10,340 --> 00:19:13,430 fourni à tous ceux qui veulent de l'utiliser, et aussi sûrement il 429 00:19:13,430 --> 00:19:17,680 ne peut pas être optimisé en définitive exactement ce que vous voulez faire. 430 00:19:17,680 --> 00:19:21,180 >> Donc, le temps de développement de commerce offs-- pourrait diffèrent, les performances peuvent différer, 431 00:19:21,180 --> 00:19:23,120 complexité ou utilisation de la mémoire peuvent différer. 432 00:19:23,120 --> 00:19:24,820 Et si ce que vous trouverez de plus en plus est qu'il n'y a 433 00:19:24,820 --> 00:19:26,570 va être différent outils pour le commerce. 434 00:19:26,570 --> 00:19:31,160 Et en fait, pour une super-majorité de projets définitifs de personnes dans cette classe, 435 00:19:31,160 --> 00:19:34,360 croyez-le ou pas, C ne va pas être la bonne langue à utiliser. 436 00:19:34,360 --> 00:19:37,880 >> Et en fait, l'un des plats à emporter en fin de compte pour une classe comme ça 437 00:19:37,880 --> 00:19:40,510 est de vous faire réfléchir sur, bien, ce que vous devriez retirer 438 00:19:40,510 --> 00:19:42,710 le plateau quand vous voulez pour résoudre un problème. 439 00:19:42,710 --> 00:19:46,720 Et en effet, nous traverserons ce pont d'autant plus que nous regardons d'autres langues 440 00:19:46,720 --> 00:19:47,920 même au-delà aujourd'hui. 441 00:19:47,920 --> 00:19:50,530 >> Alors disons transition maintenant peut-être un contexte plus familier 442 00:19:50,530 --> 00:19:52,480 pour utiliser un langage comme PHP. 443 00:19:52,480 --> 00:19:56,720 Il est assez courant d'utiliser au la ligne de commande, l'écriture de scripts 444 00:19:56,720 --> 00:19:59,050 comme je l'ai fait, mais il est beaucoup, beaucoup plus commun. 445 00:19:59,050 --> 00:20:02,350 Et il a été conçu pour être utilisé dans la forme de fichiers qui se terminent généralement 446 00:20:02,350 --> 00:20:05,060 dans .php-- mais qui est pas un prerequisite-- 447 00:20:05,060 --> 00:20:07,990 qui se génèrent du contenu web. 448 00:20:07,990 --> 00:20:11,310 >> Alors laissez-moi aller de l'avant et d'ouvrir un peu Je exemples préparés à l'avance. 449 00:20:11,310 --> 00:20:15,100 Et ce sont en fait sorte de vrai histoires que l'une des premières choses 450 00:20:15,100 --> 00:20:18,200 Je me suis jamais fait après avoir terminé CS50 et peut-être, je pense, 451 00:20:18,200 --> 00:20:21,350 il ya des années de CS51 est mon colocataire et moi aidions 452 00:20:21,350 --> 00:20:24,320 pour exécuter le intra-muros de première année programme de sport, qui, à la fois, 453 00:20:24,320 --> 00:20:28,610 avait freshman enregistrement pour divers sport en remplissant une feuille de papier, 454 00:20:28,610 --> 00:20:31,800 comme on l'appelait, marche dans la cour de Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 et en le déposant dans certains La baisse de la porte de surveillant. 456 00:20:34,030 --> 00:20:37,210 Et puis il ou elle passerait par eux et puis nous fait manuellement par courriel 457 00:20:37,210 --> 00:20:39,140 que nous étions inscrits pour un peu de sport. 458 00:20:39,140 --> 00:20:41,166 >> Donc, clairement, une opportunité d'amélioration. 459 00:20:41,166 --> 00:20:44,040 Ces jours-ci, vous risquez de mettre à juste Google formes, mais dans la journée, 460 00:20:44,040 --> 00:20:46,914 nous avons eu à réellement atteindre en vue de: cette n'a pas atteindre même que longtemps ago-- 461 00:20:46,914 --> 00:20:49,410 pour une programmation langue qui n'a pas PHP. 462 00:20:49,410 --> 00:20:51,200 À l'époque, il était ce qu'on appelle Perl, 463 00:20:51,200 --> 00:20:52,890 qui est sorti de la mode depuis. 464 00:20:52,890 --> 00:20:54,160 Mais l'idée est la même. 465 00:20:54,160 --> 00:20:58,940 >> Et je me suis assis essentiellement à essayer au port va versions de Perl à PHP, 466 00:20:58,940 --> 00:21:03,710 mais en plein déni, ne pas donner toute pensée de l'esthétique pour l'instant. 467 00:21:03,710 --> 00:21:04,960 Voici donc une page Web. 468 00:21:04,960 --> 00:21:05,670 Ceci est un fichier. 469 00:21:05,670 --> 00:21:09,470 Si je zoome, son apparence appelé froshim0.php 470 00:21:09,470 --> 00:21:12,060 juste parce qu'elle est notre première Ainsi dans cette série. 471 00:21:12,060 --> 00:21:15,970 Et remarquez qu'il a ce qui semble comme une forme de HTML très laid, 472 00:21:15,970 --> 00:21:18,680 mais une forme est intéressant car elle permet 473 00:21:18,680 --> 00:21:21,910 moi d'apporter une contribution de l'utilisateur pour le navigateur. 474 00:21:21,910 --> 00:21:27,730 >> Maintenant, la dernière fois que nous avions un formulaire, qui ne nous soumettons notre paramètre de requête, 475 00:21:27,730 --> 00:21:30,450 le paramètre de file d'attente comme on l'appelait? 476 00:21:30,450 --> 00:21:31,330 Donc, pour Google, non? 477 00:21:31,330 --> 00:21:34,090 Nous sommes totalement botté sur l'idée de faire quelque chose avec cette entrée. 478 00:21:34,090 --> 00:21:36,160 >> Mais aujourd'hui, nous commençons à produire une sortie. 479 00:21:36,160 --> 00:21:39,420 Et le comportement que je vais voir est ici d'abord assez trivial. 480 00:21:39,420 --> 00:21:42,980 David, je vais cocher sexe ici, dire Matthews ici. 481 00:21:42,980 --> 00:21:43,800 Je ne vais pas être capitaine. 482 00:21:43,800 --> 00:21:45,410 Je vais cliquez sur Enregistrer. 483 00:21:45,410 --> 00:21:50,720 Et remarquez que l'URL a changé de registre-0.php, 484 00:21:50,720 --> 00:21:52,310 et puis il ya ce texte laid ici. 485 00:21:52,310 --> 00:21:54,460 Je ne songeait à la mise en forme de ce produit. 486 00:21:54,460 --> 00:21:59,900 >> Mais ce qui est intéressant est que trois valeurs ont été apparemment transmis à. 487 00:21:59,900 --> 00:22:02,960 Ceci est le genre de PHP équivalent à printf-- 488 00:22:02,960 --> 00:22:06,330 nous allons voir ce qu'il est vraiment appelé dans un bit-- qui se contente d'afficher 489 00:22:06,330 --> 00:22:08,300 ce que vous avez passé en elle. 490 00:22:08,300 --> 00:22:11,414 Donc, ce qui suggère que cette forme a au moins trois domaines à elle, 491 00:22:11,414 --> 00:22:12,580 et vous avez vu me les taper. 492 00:22:12,580 --> 00:22:15,739 L'un était mon nom, on était sexe, on était dortoir. 493 00:22:15,739 --> 00:22:18,780 Et le capitaine n'a même pas été envoyé le serveur parce que je ne le vérifie. 494 00:22:18,780 --> 00:22:22,150 >> Ceci pour dire apparemment, lorsque vous soumettez des choses sur le web, 495 00:22:22,150 --> 00:22:26,830 non seulement l'URL parfois change-- parfois ça ne marche pas. 496 00:22:26,830 --> 00:22:30,330 En fait, le nom de fichier a changé mais ce qui est absent de l'URL 497 00:22:30,330 --> 00:22:32,861 que nous avons vu la dernière fois avec Google. 498 00:22:32,861 --> 00:22:33,360 Ouais? 499 00:22:33,360 --> 00:22:34,380 >> L'ÉLÈVE: Aucune chaîne de requête 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. Malan: Il n'y a pas la chaîne de requête. 501 00:22:35,220 --> 00:22:37,270 Il n'y a pas d'interrogation quelque chose. 502 00:22:37,270 --> 00:22:40,050 Il n'y a pas d'interrogation q est égal à chats, comme nous l'avons fait la dernière fois. 503 00:22:40,050 --> 00:22:42,170 Et il n'y a certainement pas nom de point d'interrogation est égal à 504 00:22:42,170 --> 00:22:46,310 David ou dortoir est égal à Matthews, Alors où est ce que tout va? 505 00:22:46,310 --> 00:22:51,290 >> Eh bien, permettez-moi de revenir à gedit ici et ouvrir le premier de ces fichiers 506 00:22:51,290 --> 00:22:57,020 dans mon serveur virtuel, hôte local, publique répertoire ici et aller dans froshim0. 507 00:22:57,020 --> 00:23:02,060 Donc, il se trouve que presque tous de cette page est juste HTML. 508 00:23:02,060 --> 00:23:05,410 Et cela pourrait vous être inconnus, mais il sera bientôt plus avec PSET 6 509 00:23:05,410 --> 00:23:07,370 et PSET 7 et 8 PSET. 510 00:23:07,370 --> 00:23:09,160 Mais ceci est juste une page HTML. 511 00:23:09,160 --> 00:23:12,400 >> Et les choses intéressantes semble être ici. 512 00:23:12,400 --> 00:23:16,290 Une balise de formulaire dont l'attribut l'action a une valeur de registre 0. 513 00:23:16,290 --> 00:23:18,890 Voilà pourquoi lorsque je soumets cela, il va à ce fichier. 514 00:23:18,890 --> 00:23:20,620 Mais la méthode est différente poste de today--. 515 00:23:20,620 --> 00:23:23,120 Donc, il se trouve qu'il ya au moins deux méthodes utilisées sur le web 516 00:23:23,120 --> 00:23:24,911 pour envoyer des informations à partir du navigateur de serveur. 517 00:23:24,911 --> 00:23:25,980 Get met dans l'URL. 518 00:23:25,980 --> 00:23:27,950 Poste met ailleurs. 519 00:23:27,950 --> 00:23:30,570 Et quand et pourquoi pourriez-vous voulez vraiment un site Web 520 00:23:30,570 --> 00:23:34,110 à utiliser après puis la place de faire, juste intuitivement? 521 00:23:34,110 --> 00:23:37,080 Tout site Web. 522 00:23:37,080 --> 00:23:42,010 Quel type de données devraient être transmises seulement par inférence maintenant par la poste, par opposition 523 00:23:42,010 --> 00:23:45,184 pour obtenir, si nous avons vu les deux différences? 524 00:23:45,184 --> 00:23:46,350 L'ÉLÈVE: [Inaudible] sécuriser. 525 00:23:46,350 --> 00:23:47,790 DAVID J. Malan: Si vous voulez quelque chose d'être sécurisé. 526 00:23:47,790 --> 00:23:50,360 Ainsi, vous pouvez taper un mot de passe dans un site Web, une carte de crédit 527 00:23:50,360 --> 00:23:53,030 dans un site Web serait nature de ces sous-optimale 528 00:23:53,030 --> 00:23:56,220 si le navigateur a mis cette valeur à l'intérieur de l'URL. 529 00:23:56,220 --> 00:23:57,680 Pourquoi? 530 00:23:57,680 --> 00:24:00,059 Vous voyez, ce qui ne fonctionne pas semble être une grosse affaire, 531 00:24:00,059 --> 00:24:03,350 mais les chances sont que vous marchez assez fréquemment loin de votre ordinateur ou de l'utilisation ordinateur 532 00:24:03,350 --> 00:24:05,310 laboratoires, et si quelqu'un d'autre ou même d'un colocataire 533 00:24:05,310 --> 00:24:08,220 pourrait facilement monter et voir que l'information privée. 534 00:24:08,220 --> 00:24:10,220 Lorsque vous envoyez un e-mail via le web, vous avez probablement 535 00:24:10,220 --> 00:24:12,350 ne veulent pas que fin de données dans l'URL ainsi. 536 00:24:12,350 --> 00:24:15,266 Et donc il ya un certain nombre de raisons pourquoi nous pourrions le mettre ici. 537 00:24:15,266 --> 00:24:18,610 Et droit photos--, je ne peux même pas tout à fait imaginez comment vous vous prenez un graphique, 538 00:24:18,610 --> 00:24:21,480 comme un JPEG, et le mettre dans une URL. 539 00:24:21,480 --> 00:24:22,330 Vous pourriez le faire. 540 00:24:22,330 --> 00:24:25,840 Il ya des moyens de codage, mais il est tout simplement pas simple comme ça. 541 00:24:25,840 --> 00:24:29,030 >> Alors inscrivez-0 est en fait très décevante. 542 00:24:29,030 --> 00:24:31,610 Tout ce qu'il dit est littéralement ce. 543 00:24:31,610 --> 00:24:35,910 Elle imprime à l'intérieur de certaines Balises HTML suivantes. 544 00:24:35,910 --> 00:24:38,640 Je dois une balise PHP ici imbriquée dans une balise de pré. 545 00:24:38,640 --> 00:24:42,300 "Pre" signifie simplement texte pré-formaté, mono-espacées, comme une machine à écrire. 546 00:24:42,300 --> 00:24:44,836 >> Printr est une fonction récursive d'impression. 547 00:24:44,836 --> 00:24:46,710 Et puis il ya cette Ce qui est intéressant ici. 548 00:24:46,710 --> 00:24:48,835 Et nous reviendrons à cette car il ya d'autres, 549 00:24:48,835 --> 00:24:51,140 mais signe de dollar de soulignement poste semble être 550 00:24:51,140 --> 00:24:56,110 une variable en PHP dans lequel tout vous envoyez à partir du navigateur de serveur 551 00:24:56,110 --> 00:24:58,040 est stocké pour vous. 552 00:24:58,040 --> 00:25:00,930 Et nous allons voir comment obtenir à cette information avant longtemps. 553 00:25:00,930 --> 00:25:04,000 >> Mais d'abord, revenons à un exemple un peu différent. 554 00:25:04,000 --> 00:25:09,050 Entrant dans register-- ou plutôt, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 qui est un peu différent. 556 00:25:10,470 --> 00:25:12,670 Je pris un peu plus effort de mise en forme, 557 00:25:12,670 --> 00:25:14,370 même si elle est encore assez laid. 558 00:25:14,370 --> 00:25:16,990 Mais je vais aller de l'avant et tapez "David" maintenant. 559 00:25:16,990 --> 00:25:17,850 Homme. 560 00:25:17,850 --> 00:25:19,360 Nous allons vérifier "capitaine" cette fois. 561 00:25:19,360 --> 00:25:20,660 Nous ferons Matthews. 562 00:25:20,660 --> 00:25:22,430 Et enregistrer. 563 00:25:22,430 --> 00:25:24,110 >> Et cette fois, il est dit, hm, pas vraiment. 564 00:25:24,110 --> 00:25:26,180 Très bien, alors ce enregistre-1? 565 00:25:26,180 --> 00:25:30,509 Laissez-moi aller dans le registre ouvert 1 hm et--. 566 00:25:30,509 --> 00:25:32,300 Très bien, alors cela est intéressante, et ce 567 00:25:32,300 --> 00:25:34,880 est un tremplin vers l'entreprise programmes plus intéressants. 568 00:25:34,880 --> 00:25:38,970 >> Remarquez le haut de ce fichier a une PHP étiquette ainsi que quelques commentaires. 569 00:25:38,970 --> 00:25:42,590 Et ce sont, pour l'instant, une distraction donc on va plutôt se débarrasser de ces commentaires 570 00:25:42,590 --> 00:25:47,070 tout comme ils le sont dans C. Et je prétendent avec ce morceau de code avec un commentaire 571 00:25:47,070 --> 00:25:49,280 que ce code est la validation de la soumission. 572 00:25:49,280 --> 00:25:51,690 >> Eh bien, il se trouve que variables comme signe de dollar 573 00:25:51,690 --> 00:25:53,739 souligner poste sont appelé super-globales. 574 00:25:53,739 --> 00:25:55,530 Ils sont comme ces variables globales spéciales 575 00:25:55,530 --> 00:25:58,840 qui sont juste omni-actuellement disponibles dans votre programme. 576 00:25:58,840 --> 00:26:03,870 Et vous pouvez utiliser la notation crochet à l'index dans les pas en utilisant des numéros 577 00:26:03,870 --> 00:26:07,460 comme 0, 1, 2, 3, mais les mots réels. 578 00:26:07,460 --> 00:26:12,100 >> Ainsi, vous pouvez penser de signe dollar souligner poste comme une sorte de table de hachage 579 00:26:12,100 --> 00:26:15,920 que vous pourriez passer une clé dans une recherche mot entre crochets, 580 00:26:15,920 --> 00:26:19,370 et il va vous redonner la valeur que l'utilisateur a effectivement fourni. 581 00:26:19,370 --> 00:26:21,210 PHP dispose d'une fonction appelé vide qui vient 582 00:26:21,210 --> 00:26:23,720 dit oui ou non, cette variable est vide ou non. 583 00:26:23,720 --> 00:26:27,250 Nous avons ces doubles barres, qui signifie simplement ou, comme en C. 584 00:26:27,250 --> 00:26:31,740 >> Donc, en effet, cette ligne 4 est juste dire si l'utilisateur n'a pas donné de nom 585 00:26:31,740 --> 00:26:36,540 ou ne pas donner un genre ou n'a pas donner un dortoir, aller de l'avant et de rediriger le 586 00:26:36,540 --> 00:26:38,184 ou son via cette ligne ici. 587 00:26:38,184 --> 00:26:40,600 Donc, cela est un peu cryptique, mais cela signifie juste littéralement 588 00:26:40,600 --> 00:26:43,330 revenir à cet endroit, il plates l'utilisateur 589 00:26:43,330 --> 00:26:45,420 retour à l'endroit où il ou elle vient. 590 00:26:45,420 --> 00:26:47,880 Mais il est un peu inélégante dans que je codés en dur il. 591 00:26:47,880 --> 00:26:52,150 >> Mais que faire si cette situation se ne pas évaluer à vrai? 592 00:26:52,150 --> 00:26:55,790 Que faire si l'utilisateur ne m'a donné son ou son nom et son dortoir et le sexe? 593 00:26:55,790 --> 00:26:58,540 Que si la condition est pas va évaluer à vrai, 594 00:26:58,540 --> 00:27:00,650 si je ne frappe pas la sortie à la ligne 7. 595 00:27:00,650 --> 00:27:01,680 Donc ce qui se passe? 596 00:27:01,680 --> 00:27:03,880 Et ceci est ce qui est intéressant sur PHP. 597 00:27:03,880 --> 00:27:07,470 >> Vous pouvez déposer dans et hors de mode PHP, pour ainsi dire. 598 00:27:07,470 --> 00:27:10,985 Si vous voulez un peu de code à exécuter, vous pouvez ouvrir et fermer une balise PHP 599 00:27:10,985 --> 00:27:13,010 et mettre le code là comme je l'ai fait ici. 600 00:27:13,010 --> 00:27:16,810 Dès que vous fermez la balise PHP, le serveur 601 00:27:16,810 --> 00:27:19,407 va simplement cracher ce que vous y mettez. 602 00:27:19,407 --> 00:27:21,740 Et en effet, cela faisait partie de la conception originale de PHP, 603 00:27:21,740 --> 00:27:25,280 pour une meilleure et pour le pire, était-ce mélange des codes et balises 604 00:27:25,280 --> 00:27:25,920 langue. 605 00:27:25,920 --> 00:27:28,670 Et nous verrons que cette très dévolue rapidement dans un désordre. 606 00:27:28,670 --> 00:27:31,280 Et si nous ferons mieux que ce terme, mais seulement 607 00:27:31,280 --> 00:27:35,620 remarquer la facilité avec laquelle je suis effectivement en mesure d'exécuter une certaine logique. 608 00:27:35,620 --> 00:27:37,440 >> Mais encore un peu décevante. 609 00:27:37,440 --> 00:27:41,210 Ouvrons la version deux de Frosh SGI, qui 610 00:27:41,210 --> 00:27:44,270 apparemment soumet à register2.php. 611 00:27:44,270 --> 00:27:47,600 Donc, ce fichier va réellement à regarder presque la même. 612 00:27:47,600 --> 00:27:50,780 Je vais aller à Frosh MI 2. 613 00:27:50,780 --> 00:27:53,050 Mais dans Frosh IM 2, Voyons ce qui se passe. 614 00:27:53,050 --> 00:27:58,110 >> David, cliquez sur le bouton de la radio, comme il est appelé; Matthews, sans capitaine. 615 00:27:58,110 --> 00:27:59,230 Créer. 616 00:27:59,230 --> 00:28:00,130 Vous êtes inscrit. 617 00:28:00,130 --> 00:28:00,700 Pas vraiment. 618 00:28:00,700 --> 00:28:02,574 Oh, attends, nous venons de faire que par exemple, ne pas nous? 619 00:28:02,574 --> 00:28:04,520 Tout droit, veille. 620 00:28:04,520 --> 00:28:06,602 Nous allons faire les trois. 621 00:28:06,602 --> 00:28:08,560 Il est clair que quelque chose est sur arriver avec Gmail. 622 00:28:08,560 --> 00:28:09,600 Nous y arriverons. 623 00:28:09,600 --> 00:28:11,900 >> Donc Frosh IMS 3 ressemble à ceci. 624 00:28:11,900 --> 00:28:13,050 Pas différent. 625 00:28:13,050 --> 00:28:19,850 Mais quand je fais David, homme, Matthews, et enregistrer, cette troisième et dernière version 626 00:28:19,850 --> 00:28:22,230 revendications, tout simplement vous, sont des marques vraiment. 627 00:28:22,230 --> 00:28:23,560 Voilà en quelque sorte immatériel. 628 00:28:23,560 --> 00:28:25,600 Mais je prétends avec cette troisième et dernière version 629 00:28:25,600 --> 00:28:30,610 Je suis maintenant recréé exactement ce que mon colocataire et moi avons construit pour l'IMS Frosh 630 00:28:30,610 --> 00:28:31,731 il ya années de programme. 631 00:28:31,731 --> 00:28:32,480 Et il était simple. 632 00:28:32,480 --> 00:28:34,330 Il n'y avait aucune base de données, pas de feuille de calcul Excel. 633 00:28:34,330 --> 00:28:36,450 Mais plus important encore, il n'y avait plus de papier 634 00:28:36,450 --> 00:28:42,520 parce que ce que nous avons fait avec ce programme était effectivement d'envoyer le surveillant, qui 635 00:28:42,520 --> 00:28:44,530 recevait auparavant ces choses via des formulaires. 636 00:28:44,530 --> 00:28:48,890 >> Et apparemment, nous avons programmé ce dans de telle sorte que lorsque quelqu'un enregistre, 637 00:28:48,890 --> 00:28:52,470 Compte les courriels de John Harvard le proctor-- ou lui-même dans ce cas, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- avec la suite text-- "Cette personne juste enregistré." 639 00:28:55,960 --> 00:29:00,560 Nom est David, le capitaine est vide; sexe, mâle; et dortoir, Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Donc ce qui est arrivé? 641 00:29:01,560 --> 00:29:05,360 Eh bien, le fichier en question ici est apparemment register3.php. 642 00:29:05,360 --> 00:29:09,080 Et si je l'ouvre, vous verrez à la fois la puissance de ce type de code 643 00:29:09,080 --> 00:29:12,380 et aussi, franchement, l'insécurité d'un système comme le courrier électronique. 644 00:29:12,380 --> 00:29:16,290 Je viens effectivement prétendu soit John Harvard de la façon suivante. 645 00:29:16,290 --> 00:29:20,920 >> Je dois la balise php ouvert en haut, qui dit simplement voici un peu de code PHP. 646 00:29:20,920 --> 00:29:23,155 Ici-bas, il se révèle des bibliothèques dans PHP. 647 00:29:23,155 --> 00:29:26,410 Il ne suffit pas besoin de inclure des fichiers d'en-tête que beaucoup. 648 00:29:26,410 --> 00:29:28,900 Vous obtenez plus avec la évier de cuisine, pour ainsi dire. 649 00:29:28,900 --> 00:29:31,820 >> Mais cette fois, à la ligne 4, je fais vouloir bibliothèque spéciale appelée 650 00:29:31,820 --> 00:29:36,087 PHP Mailer, qui est quelque chose que vous peut installer gratuitement dans de nombreux systèmes. 651 00:29:36,087 --> 00:29:37,920 Ici-bas, je vais valider la soumission seulement 652 00:29:37,920 --> 00:29:40,540 en vérifiant que l'utilisateur ne donne moi un nom, un sexe, et un dortoir. 653 00:29:40,540 --> 00:29:44,130 Et si oui, allez-y et instancier un logiciel de messagerie. 654 00:29:44,130 --> 00:29:47,020 >> Vous pouvez penser à cela comme étant une ligne de code qui alloue seulement. 655 00:29:47,020 --> 00:29:48,950 Il est comme malloc, mais il est un peu plus sexy 656 00:29:48,950 --> 00:29:51,790 dans que vous mentionnez pas seulement malloc et un nombre générique. 657 00:29:51,790 --> 00:29:55,030 Vous dites me donner un de ceux-ci, me donner une nouvelle partie. 658 00:29:55,030 --> 00:29:57,950 >> Et si vous avez programmé dans Java ou C ++ ou d'autres langages, 659 00:29:57,950 --> 00:29:59,130 vous avez peut-être vu. 660 00:29:59,130 --> 00:30:01,840 Mais le court, ce, si inconnu, cette ligne 661 00:30:01,840 --> 00:30:05,410 met en signe de dollar courrier une structure spéciale appelée 662 00:30:05,410 --> 00:30:08,731 un objet qui a intégré fonctionnalité de messagerie. 663 00:30:08,731 --> 00:30:10,355 Et en effet, remarquer et syntaxe similaire. 664 00:30:10,355 --> 00:30:11,900 >> Cela ne veut pas un pointeur, en soi. 665 00:30:11,900 --> 00:30:13,990 PHP utilise simplement la même syntaxe. 666 00:30:13,990 --> 00:30:17,660 Cette ligne dit utilisation SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protocole, qui est que le Protocole utilisé pour envoyer du courrier. 668 00:30:20,900 --> 00:30:24,240 Ceci est la spécification utilisation Le serveur SMTP de Harvard, qui 669 00:30:24,240 --> 00:30:25,830 est quelque part ici sur le campus. 670 00:30:25,830 --> 00:30:28,480 >> Cela revient à dire que TCP le numéro de port à qui parler, 671 00:30:28,480 --> 00:30:31,650 et je viens de comprendre que par googler ou en demandant à l'assistance. 672 00:30:31,650 --> 00:30:34,640 Et puis parce que Harvard utilise une partie la sécurité du système sur le poste de Server-- 673 00:30:34,640 --> 00:30:37,060 à crypter au moins trafic entre vous et elle, 674 00:30:37,060 --> 00:30:41,380 même si tout le monde peut envoyer à it-- Je vais tourner sur le protocole TLS 675 00:30:41,380 --> 00:30:42,710 pour maintenir ce sécurisé. 676 00:30:42,710 --> 00:30:44,730 >> Mais ceci est où les choses obtenir un peu peur. 677 00:30:44,730 --> 00:30:47,970 Je peux juste arbitrairement dire que je suis jharvard, 678 00:30:47,970 --> 00:30:51,930 et je peux juste arbitrairement moi par courriel ici. 679 00:30:51,930 --> 00:30:55,650 Et puis je peux spécifier une sujet avec cette ligne ici. 680 00:30:55,650 --> 00:30:58,460 >> Et cela semble juste laid, mais il est juste un tas de concaténation. 681 00:30:58,460 --> 00:31:04,480 Avère que PHP a un symbole super utile, comme certaines langues, l'opérateur point, 682 00:31:04,480 --> 00:31:07,340 qui concatène juste littéralement chaîne après chaîne après chaîne, 683 00:31:07,340 --> 00:31:09,810 et vous ne devez pas malloc ou chiffre la longueur totale de la chaîne. 684 00:31:09,810 --> 00:31:10,820 Vous venez de le faire. 685 00:31:10,820 --> 00:31:15,220 Et en effet, parce que je suis la concaténation dans toutes ces choses avec ces points, 686 00:31:15,220 --> 00:31:18,330 Voilà pourquoi l'email je envoyé regardé comme il l'a fait. 687 00:31:18,330 --> 00:31:20,610 >> Et puis enfin ici, je suis l'envoi de courrier. 688 00:31:20,610 --> 00:31:22,580 Donc, si cela est faux, Je vais mourir, 689 00:31:22,580 --> 00:31:25,680 qui est une fonction qui imprime seulement à l'écran certains de message d'erreur. 690 00:31:25,680 --> 00:31:29,170 Mais il est, en fait, l'appel de la fonction d'envoi. 691 00:31:29,170 --> 00:31:31,780 Sinon, si tout cela échoue, il me redirige ici. 692 00:31:31,780 --> 00:31:34,050 >> Et pourquoi ai-je vois que Je suis inscrit vraiment? 693 00:31:34,050 --> 00:31:36,110 Eh bien, il est arrivé ici. 694 00:31:36,110 --> 00:31:38,170 Donc, je soulève cette question pour un couple de raisons. 695 00:31:38,170 --> 00:31:41,542 >> Un, cela est exactement comment si vous construisez certains sites pour un projet final 696 00:31:41,542 --> 00:31:44,000 ou pour le monde réel, il est comment vous envoyer des rappels par courriel 697 00:31:44,000 --> 00:31:45,924 à vos clients ou à vos abonnés. 698 00:31:45,924 --> 00:31:47,590 Voici comment vous envoyer des rappels de mot de passe. 699 00:31:47,590 --> 00:31:50,760 Voici comment vous envoyer des messages de personnes qu'ils ont une nouvelle Facebook 700 00:31:50,760 --> 00:31:52,990 message en attente ou quelque chose comme ça. 701 00:31:52,990 --> 00:31:55,010 >> Mais il parle aussi de le fait que ce pourrait 702 00:31:55,010 --> 00:31:58,160 ont été très bien à partir de Davin ou quelqu'un d'autre. 703 00:31:58,160 --> 00:32:00,567 Et je dis ce genre de avec un sourire parce que je suis 704 00:32:00,567 --> 00:32:03,400 tout à fait sûr de ce qui se passe à travers plusieurs de vos esprits à ce point. 705 00:32:03,400 --> 00:32:11,910 Mais ceci est l'un de ceux Faites ce que je dis, pas comme je fais genre de choses, 706 00:32:11,910 --> 00:32:14,480 car il est trivial de créer des messages électroniques de ce genre. 707 00:32:14,480 --> 00:32:16,480 Mais comme vous avez pu le voir ou lire dans le Crimson, 708 00:32:16,480 --> 00:32:18,271 de la fin il est également assez trivial pour les personnes 709 00:32:18,271 --> 00:32:20,050 de remonter à une origine. 710 00:32:20,050 --> 00:32:23,790 Et me demander un certain temps, peut-être CS50 à déjeuner, comment je première 711 00:32:23,790 --> 00:32:27,080 ont pris connaissance de très près presque à la carte ed nombreuses années 712 00:32:27,080 --> 00:32:30,890 il ya quand je découvris comment l'Internet a travaillé. 713 00:32:30,890 --> 00:32:36,940 Donc, en toute case-- légèrement après que le conseil d'ED a fait. 714 00:32:36,940 --> 00:32:42,300 >> Ainsi, dans tous les cas, il existe un tas ensemble de super-globales, 715 00:32:42,300 --> 00:32:45,960 comme on les appelle ici, dont l'un nous saw-- dollar signe de soulignement poste. 716 00:32:45,960 --> 00:32:49,530 Il ya un homologue appelé get, qui est là choses à partir d'un URL 717 00:32:49,530 --> 00:32:50,690 finit par aller. 718 00:32:50,690 --> 00:32:54,051 Et il ya tout un tas d'autres, séance too-- et le serveur et les cookies. 719 00:32:54,051 --> 00:32:55,800 Nous y reviendrons cookie d'un autre temps, 720 00:32:55,800 --> 00:33:01,340 mais la session est plutôt cool parce que le droit maintenant-- jusqu'à maintenant-- 721 00:33:01,340 --> 00:33:06,350 tout ce que nous avons fait avec un navigateur Web est une sorte de apatride, pour ainsi dire. 722 00:33:06,350 --> 00:33:10,060 Je peux cliquer autour, accès des fichiers sur le serveur, ce 723 00:33:10,060 --> 00:33:13,500 qui se passe sur l'écran, mais puis la connexion se ferme. 724 00:33:13,500 --> 00:33:17,450 L'Internet Explorer ou la Firefox icône arrête de tourner 725 00:33:17,450 --> 00:33:20,340 et vous voyez ce que cette page web contient. 726 00:33:20,340 --> 00:33:23,530 >> Donc HTTP est apatride dans ce une fois qu'il établit une connexion, 727 00:33:23,530 --> 00:33:25,050 obtient des données, ça y est. 728 00:33:25,050 --> 00:33:29,940 Pas plus de connexion, contrairement à Skype, contrairement à Facetime, contrairement GChat, qui 729 00:33:29,940 --> 00:33:32,180 maintient une constante connexion au serveur. 730 00:33:32,180 --> 00:33:34,650 Le web est fondamentalement déconnecté, si nous 731 00:33:34,650 --> 00:33:36,630 voir avant longtemps comment nous pouvons simuler choses 732 00:33:36,630 --> 00:33:39,300 comme Facebook chat et GChat, qui maintiennent la illusion-- 733 00:33:39,300 --> 00:33:41,680 ou fait faire maintenir une connexion constante à l'aide 734 00:33:41,680 --> 00:33:43,270 plus la technologie moderne. 735 00:33:43,270 --> 00:33:49,000 >> Mais si je vais à, dire, counter.php, ceci est un autre exemple simple, 736 00:33:49,000 --> 00:33:52,700 comme nous le verrons, que pense actuellement Je me suis rendu sur le site le temps zéro. 737 00:33:52,700 --> 00:33:56,790 Mais si je recharge simplement la page, il sait de toute façon je suis ici avant. 738 00:33:56,790 --> 00:33:58,840 Si je recharge encore, il sait que je suis ici avant. 739 00:33:58,840 --> 00:34:01,100 Et encore et encore et encore et encore. 740 00:34:01,100 --> 00:34:03,610 >> Il ya donc une certaine plus-plussing passe, mais avis 741 00:34:03,610 --> 00:34:07,090 la petite chose tourne toujours si brièvement dessus et puis se déconnecte, 742 00:34:07,090 --> 00:34:11,179 il est pas comme je dois une constante Connexion à mon appareil. 743 00:34:11,179 --> 00:34:16,929 Eh bien, si je vais dans counter.php, remarquez comment il est simple. 744 00:34:16,929 --> 00:34:19,080 Je donne d'abord cette spéciale fonction que nous allons bientôt 745 00:34:19,080 --> 00:34:21,513 commencer à prendre pour acquis appelé début de la session. 746 00:34:21,513 --> 00:34:22,179 Démarrer une session. 747 00:34:22,179 --> 00:34:25,095 >> Et une session est désormais juste va être un seau, comme un centre 748 00:34:25,095 --> 00:34:28,120 panier dans lequel vous pouvez mettre des valeurs et le type de confiance en tant que programmeur 749 00:34:28,120 --> 00:34:31,590 qu'ils vont être là quand que l'utilisateur vient back-- un second 750 00:34:31,590 --> 00:34:35,670 plus tard, une heure plus tard, même un an plus tard, tant qu'il ou elle ne disparaît pas 751 00:34:35,670 --> 00:34:37,602 leurs cookies, comme nous le verrons par la suite voir. 752 00:34:37,602 --> 00:34:39,310 Et maintenant, je viens une condition if ici. 753 00:34:39,310 --> 00:34:44,679 Donc, si la clé suivante, appelé compteur, est fixé à l'intérieur 754 00:34:44,679 --> 00:34:49,210 de ce super global-- ce hachage table, si vous will-- appelé session, 755 00:34:49,210 --> 00:34:53,350 alors allez-y et prenez la valeur de la réflexion session-- 756 00:34:53,350 --> 00:34:55,250 de ce qu'un centre cart-- et stocker 757 00:34:55,250 --> 00:34:57,680 dans une variable temporaire appelée compteur. 758 00:34:57,680 --> 00:35:02,240 >> Sinon, si cette valeur était contre pas définie dans le soi-disant panier, 759 00:35:02,240 --> 00:35:04,430 juste initialiser à 0. 760 00:35:04,430 --> 00:35:09,830 Enfin, ici, aller et remettre dans les caddies ou la session 761 00:35:09,830 --> 00:35:13,000 la valeur du compteur 1. 762 00:35:13,000 --> 00:35:16,730 Donc, il se trouve que ce ici-- contenant spécial 763 00:35:16,730 --> 00:35:20,355 qui, encore une fois, est un de ces associés tableaux, un tableau que vous pouvez indexer 764 00:35:20,355 --> 00:35:25,010 en mots au lieu de numbers-- persiste même après que l'utilisateur va. 765 00:35:25,010 --> 00:35:26,510 Encore une fois, je vais revenir à la page maintenant. 766 00:35:26,510 --> 00:35:28,400 Ça a été une minute ou deux. 767 00:35:28,400 --> 00:35:31,300 Mais il rappelle que je l'ai été ici 19 fois avant. 768 00:35:31,300 --> 00:35:32,740 Ceci est mon 20ème visite. 769 00:35:32,740 --> 00:35:36,560 >> Et si cela va être la clé de mise en œuvre de tout site Web qui se souvient 770 00:35:36,560 --> 00:35:40,640 que vous êtes connecté, que vous mettez quelque chose littérale dans votre panier 771 00:35:40,640 --> 00:35:43,902 à acheter ou que vous avez des nombre de messages en attente. 772 00:35:43,902 --> 00:35:45,610 Chaque fois que vous voulez souvenir de l'information, 773 00:35:45,610 --> 00:35:48,130 nous verrons que PHP, comme plusieurs autres langues, 774 00:35:48,130 --> 00:35:53,640 nous donne cette illusion de l'Etat même si, comme vous le verrez dans PSET 6, 775 00:35:53,640 --> 00:35:57,642 comme vous êtes des requêtes HTTP du client au serveur, ça y est. 776 00:35:57,642 --> 00:35:59,850 Une fois que vous obtenez en retour que réponse, il n'y a rien de plus 777 00:35:59,850 --> 00:36:01,790 revenir à partir du serveur par défaut. 778 00:36:01,790 --> 00:36:03,820 Mais nous allons voir comment contourner cela. 779 00:36:03,820 --> 00:36:07,430 >> Eh bien maintenant, nous allons essayer de nettoyer cette place un peu. 780 00:36:07,430 --> 00:36:09,470 Nous avons vu quelques-uns différents exemples là-bas. 781 00:36:09,470 --> 00:36:12,250 Oh, et en passant, pour ceux familiers ou non, 782 00:36:12,250 --> 00:36:14,230 la raison pour laquelle la Exemple Frosh GI a 783 00:36:14,230 --> 00:36:18,060 de regarder vraiment laid à bien slightly--, 784 00:36:18,060 --> 00:36:23,160 ugly-- encore légèrement moins laid mais toujours laid 785 00:36:23,160 --> 00:36:25,230 En effet, si nous regardons le code source ici, 786 00:36:25,230 --> 00:36:28,240 il se trouve que je dois cette tout en haut du fichier. 787 00:36:28,240 --> 00:36:32,570 >> Avère que bootstrap est l'un des nombreux bibliothèques librement disponibles là-bas 788 00:36:32,570 --> 00:36:37,140 qui existe pas pour les langages de programmation toujours, mais pour CSS ou JavaScript pour 789 00:36:37,140 --> 00:36:39,190 ou HTML ou un certain nombre de langues. 790 00:36:39,190 --> 00:36:42,160 >> Et ces gens ici-- l'origine est sorti 791 00:36:42,160 --> 00:36:44,730 de Twitter-- juste avoir tout un tas de styles. 792 00:36:44,730 --> 00:36:47,360 Il est un volumineux dossier ici que quelqu'un a écrit, 793 00:36:47,360 --> 00:36:51,020 ou de quelqu'un a écrit, au fil du temps que précise des couleurs et la mise en forme 794 00:36:51,020 --> 00:36:53,740 et ainsi de suite pour que je puisse genre de emprunter leur syntaxe 795 00:36:53,740 --> 00:36:56,157 et ne pas avoir à comprendre comment poser ma forme. 796 00:36:56,157 --> 00:36:57,990 Ceci est également minifiés de sorte que l'ordinateur peut 797 00:36:57,990 --> 00:37:00,560 le comprendre, mais pas nécessairement un humain. 798 00:37:00,560 --> 00:37:03,050 Voilà donc pourquoi la juste stylisation il a changé. 799 00:37:03,050 --> 00:37:05,450 >> Mais faisons maintenant mieux en termes de conception, 800 00:37:05,450 --> 00:37:07,490 parce que si nous restons en bas cette route trop longtemps, 801 00:37:07,490 --> 00:37:11,290 notre code va déraper et Messier. 802 00:37:11,290 --> 00:37:13,040 Donc, nous allons mettre l'accent sur ces exemples ici. 803 00:37:13,040 --> 00:37:15,090 La dernière pour aujourd'hui. 804 00:37:15,090 --> 00:37:18,720 >> Voici donc un super simple la version 1.0 du site Web de CS50. 805 00:37:18,720 --> 00:37:21,250 Il a seulement des liens vers des conférences et des syllabus, 806 00:37:21,250 --> 00:37:25,490 et il utilise cette liste non ordonnée tag-- l'étiquette UL que nous avons utilisé la dernière fois. 807 00:37:25,490 --> 00:37:28,800 Et si, en fait, si je ouvrir source de la page, 808 00:37:28,800 --> 00:37:31,710 vous verrez que cela est vraiment, vraiment HTML simple. 809 00:37:31,710 --> 00:37:35,460 Et en fait, même si cela est un fichier PHP sous le capot, 810 00:37:35,460 --> 00:37:38,620 il est toujours juste cracher uniquement HTML pour l'instant. 811 00:37:38,620 --> 00:37:41,312 >> Donc, si je clique sur Conférences, nous voyons cela se produise. 812 00:37:41,312 --> 00:37:43,020 Et si je clique sur semaine zéro, nous voyons cela. 813 00:37:43,020 --> 00:37:44,920 Et si je clique sur Mercredi, nous voyons cela. 814 00:37:44,920 --> 00:37:47,900 Et ce fut apparemment le PDF les diapositives de ce jour-là. 815 00:37:47,900 --> 00:37:52,020 Tout ce que je l'ai fait avec un lien est balise d'ancrage à cette adresse ici. 816 00:37:52,020 --> 00:37:55,400 >> Donc, ceci est seulement pour dire cela est une jolie version simple du site Web de CS50. 817 00:37:55,400 --> 00:37:56,790 Voyons comment il est mis en œuvre. 818 00:37:56,790 --> 00:38:01,240 Si je vais dans le répertoire de mvc0, nous verrons quelques fichiers. 819 00:38:01,240 --> 00:38:03,250 L'un est un fichier README, si une partie de ce qui est trop rapide, 820 00:38:03,250 --> 00:38:05,166 il vous suffit de fouiller un peu partout plus tranquillement plus tard. 821 00:38:05,166 --> 00:38:07,930 Et remarquez ici est un fichier index.php. 822 00:38:07,930 --> 00:38:09,960 Il se trouve que si vous-même, l'être humain, 823 00:38:09,960 --> 00:38:14,460 ne spécifiez pas un nom définitif en une adresse URL, le serveur Web habituellement 824 00:38:14,460 --> 00:38:17,010 déduit un nom par défaut pour vous. 825 00:38:17,010 --> 00:38:20,060 Un indice du point quelque chose est généralement la valeur par défaut. 826 00:38:20,060 --> 00:38:23,010 >> Voilà pourquoi il ya un instant quand je me suis rendu cette URL ici, 827 00:38:23,010 --> 00:38:26,750 aucun nom de fichier, pas de fichier extension, aucune période dans l'URL. 828 00:38:26,750 --> 00:38:29,710 Il savait juste comme par magie à chercher index.php. 829 00:38:29,710 --> 00:38:30,870 Il est juste une convention. 830 00:38:30,870 --> 00:38:32,360 L'on pourrait appeler quelque chose. 831 00:38:32,360 --> 00:38:35,110 >> Donc, si je vais maintenant en index.php, vous verrez 832 00:38:35,110 --> 00:38:37,100 que, indeed-- nous allons se débarrasser des commentaires 833 00:38:37,100 --> 00:38:39,500 ici parce qu'il ya vraiment rien d'intéressant à it-- 834 00:38:39,500 --> 00:38:41,579 cela est juste codé en dur HTML. 835 00:38:41,579 --> 00:38:43,370 Voilà donc cohérent, si, avec ma demande 836 00:38:43,370 --> 00:38:45,230 que vous pouvez les mélanger HTML et PHP. 837 00:38:45,230 --> 00:38:48,060 Il n'y a pas réelle la logique de programmation ici. 838 00:38:48,060 --> 00:38:51,030 >> Et les autres fichiers sont assez beaucoup comme sans intérêt. 839 00:38:51,030 --> 00:38:56,240 Il est juste une semaine codé en dur ici pour une semaine et la semaine un m w, 840 00:38:56,240 --> 00:38:57,510 le lundi et le mercredi. 841 00:38:57,510 --> 00:39:01,890 Et puis si je ouvre la semaine zéro, remarque qu'il est presque identique. 842 00:39:01,890 --> 00:39:03,320 >> Et qui est une sorte de clé à emporter. 843 00:39:03,320 --> 00:39:06,180 Remarquez à quel point cela est redondant. 844 00:39:06,180 --> 00:39:10,710 Ces fichiers changent à peine, et pourtant je tiré un de ces copier / coller des emplois 845 00:39:10,710 --> 00:39:13,420 où je pris un file-- probablement en semaine zero-- copié 846 00:39:13,420 --> 00:39:16,320 quand la semaine est venu autour, et tordu quelques valeurs. 847 00:39:16,320 --> 00:39:18,590 Nous devrions probablement en mesure à faire mieux que cela. 848 00:39:18,590 --> 00:39:21,800 >> Donc, revenons à MVC et aller à la version d'un. 849 00:39:21,800 --> 00:39:24,810 Et notez que je dois une quelques fichiers, parce que ce 850 00:39:24,810 --> 00:39:29,870 était commune à tous ces fichiers juste un ago-- instant si je reviens à la version 0, 851 00:39:29,870 --> 00:39:32,600 Revenons en indice, et juste postulate-- 852 00:39:32,600 --> 00:39:36,090 une fois je me débarrasser de la comments-- quelle partie de cette page 853 00:39:36,090 --> 00:39:40,072 est sans doute dans chacun de mes fichiers? 854 00:39:40,072 --> 00:39:40,780 Il suffit d'appeler le. 855 00:39:40,780 --> 00:39:44,620 Les lignes sont dupliquées probablement l'ensemble de ces pages? 856 00:39:44,620 --> 00:39:45,120 Ouais? 857 00:39:45,120 --> 00:39:46,110 >> L'ÉLÈVE: [inaudible]. 858 00:39:46,110 --> 00:39:47,660 >> DAVID J. Malan: 1 à 9. 859 00:39:47,660 --> 00:39:48,720 Oui, absolument. 860 00:39:48,720 --> 00:39:52,080 1 à 9, à l'exception peut-être 8 change un peu parce que CS50 861 00:39:52,080 --> 00:39:54,650 devient conférences ou semaine zéro ou quelque chose. 862 00:39:54,650 --> 00:39:55,970 Mais presque identique. 863 00:39:55,970 --> 00:39:58,657 Donc, tout ça est juste sorte de copié-collé. 864 00:39:58,657 --> 00:40:00,490 Et il ya un couple autres lignes je peux penser 865 00:40:00,490 --> 00:40:05,000 de qui sont probablement identique dans tous les fichiers. 866 00:40:05,000 --> 00:40:06,315 >> ÉTUDIANT: 12 et 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. Malan: Ouais. 868 00:40:07,190 --> 00:40:11,220 Bien sûr, 12, 13, et 14 probablement, juste parce que les choses intéressantes 869 00:40:11,220 --> 00:40:15,460 qui se passe sur les lignes 11 et 10, il semblerait. 870 00:40:15,460 --> 00:40:18,350 Alors regardons à la version 1, qui cherche à améliorer sur ce point. 871 00:40:18,350 --> 00:40:24,020 Dans la version 1 de cette example-- MVC nous allons expliquer ce que signifie MVC dans un moment-- 872 00:40:24,020 --> 00:40:27,420 si je vais dans l'indice, il sorte de semble un peu confus maintenant. 873 00:40:27,420 --> 00:40:28,880 Il est pas tout à fait aussi simple qu'avant. 874 00:40:28,880 --> 00:40:30,906 >> Mais une fois que vous commencez à lire attentivement, il est 875 00:40:30,906 --> 00:40:32,530 assez simple ce qu'il fait. 876 00:40:32,530 --> 00:40:34,397 Apparemment, la ligne 1 et ligne 8 ont remplacé 877 00:40:34,397 --> 00:40:37,230 tous les trucs que vous identified-- juste mais juste pour faire bonne mesure, 878 00:40:37,230 --> 00:40:41,900 Je quittai les AMT là juste au cas où certains jours ne sont pas une liste de choses. 879 00:40:41,900 --> 00:40:47,860 Et nécessitent donc est un peu comme livre inclure dans C. Il copie et colle 880 00:40:47,860 --> 00:40:50,470 le contenu efficacement ici dans ce fichier. 881 00:40:50,470 --> 00:40:53,650 >> Ainsi, dans header.php, comme vous peut déduire de son nom, 882 00:40:53,650 --> 00:40:55,330 va être l'en-tête de la page. 883 00:40:55,330 --> 00:40:57,110 Il est une sorte de orpheline ici. 884 00:40:57,110 --> 00:41:01,820 Il a seulement le haut de, mais il n'y a pas plus de contenu ci-dessous. 885 00:41:01,820 --> 00:41:05,070 >> Et si je regarde le pied en attendant, qui était l'autre fichier mentioned-- 886 00:41:05,070 --> 00:41:08,830 celui-ci est encore moins intéressant, mais encore une fois, il est courant de tout. 887 00:41:08,830 --> 00:41:10,250 Voilà donc le pied de page. 888 00:41:10,250 --> 00:41:11,300 Ceci est l'en-tête. 889 00:41:11,300 --> 00:41:13,950 Ceci est le fichier qui est changer, alors pourquoi ne pas 890 00:41:13,950 --> 00:41:18,140 essayer de tenir compte de la communauté avec ces deux lignes ici? 891 00:41:18,140 --> 00:41:20,090 >> Mais nous pouvons nettoyer cette un peu plus loin. 892 00:41:20,090 --> 00:41:23,260 Je vais aller de l'avant et ouvrir version à deux où 893 00:41:23,260 --> 00:41:27,106 nous verrons qu'il n'y a un nouveau fichier, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Nous allons voir ce qui est dans un moment. 895 00:41:28,610 --> 00:41:30,930 Allons à l'index, comme le le point d'entrée comme avant. 896 00:41:30,930 --> 00:41:35,230 >> Et maintenant je remarque exigeant helpers.php, pas d'en-tête ou pied de page. 897 00:41:35,230 --> 00:41:41,720 Mais des aides est une sorte de helpers.c et helpers.h de PSET 2 898 00:41:41,720 --> 00:41:46,150 ou PSET 3 il ya longtemps quand vous avez réellement ne chercher et de trouver pour que PSET, 899 00:41:46,150 --> 00:41:50,950 et vous aviez tous de votre code pour le tri et la recherche dans un fichier séparé. 900 00:41:50,950 --> 00:41:52,510 Voilà ce qui se passe ici. 901 00:41:52,510 --> 00:41:54,390 >> Et maintenant, la ligne 3 est un peu différent. 902 00:41:54,390 --> 00:41:55,920 Et il est juste une ligne. 903 00:41:55,920 --> 00:41:57,950 Pour rendre le tout encore plus clair, je ne pouvais 904 00:41:57,950 --> 00:42:01,820 ne ce soit stylistiquement cohérente avec tout ce que nous avons fait. 905 00:42:01,820 --> 00:42:04,130 Mais qui est pas vraiment changer la fonctionnalité. 906 00:42:04,130 --> 00:42:05,880 Il est juste une ligne de code réel. 907 00:42:05,880 --> 00:42:09,010 >> Apparemment, il ya une fonction quelque part appelé rendre tête, 908 00:42:09,010 --> 00:42:11,420 et ceci est où les choses devenir assez puissant. 909 00:42:11,420 --> 00:42:17,040 Notez que l'intérieur de ses parenthèses est ce autre pièce de la syntaxe? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 Il est probablement un peu difficile à dire, mais remarquer there's-- je vais mettre un peu de blanc 912 00:42:23,350 --> 00:42:24,300 espace. 913 00:42:24,300 --> 00:42:25,530 Il est entre crochets. 914 00:42:25,530 --> 00:42:29,700 >> Et entre crochets, nous avons vu il ya un peu dans le cadre de tableaux associatifs, 915 00:42:29,700 --> 00:42:31,580 qui sont, encore une fois, comme les tables de hachage. 916 00:42:31,580 --> 00:42:36,230 Et si vous pensez maintenant à C, la l'ordre des arguments dans une fonction 917 00:42:36,230 --> 00:42:37,570 doit toujours être la même. 918 00:42:37,570 --> 00:42:41,146 Vous devez vous rappeler que la commander est-- x, y, z ou z, y, X- 919 00:42:41,146 --> 00:42:44,020 et vous devez leur fournir toujours dans le même ordre ou les consulter 920 00:42:44,020 --> 00:42:45,100 si vous avez oublié. 921 00:42:45,100 --> 00:42:51,140 >> Mais ce qui semble être une façon intelligente de passer une valeur de clé arbitraire 922 00:42:51,140 --> 00:42:55,840 paires selon lesquelles un titre est le nom d'un argument dans ce cas 923 00:42:55,840 --> 00:42:58,334 et CS50 est sa valeur. 924 00:42:58,334 --> 00:43:00,250 Et le fait que je dois ces crochets 925 00:43:00,250 --> 00:43:02,560 signifie ici que je pouvais passer aussi dans quelque chose 926 00:43:02,560 --> 00:43:07,550 comme une semaine est égal à 0 ou 1 ou 2 ou 3. 927 00:43:07,550 --> 00:43:10,550 Nous avons donc paramétré cette fonction de manière à ce 928 00:43:10,550 --> 00:43:15,180 que cela peut prendre plusieurs entrées, mais pour l'instant il est juste l'un. 929 00:43:15,180 --> 00:43:20,060 >> Si je vais maintenant en helpers.php, remarqué ce qu'il fait. 930 00:43:20,060 --> 00:43:22,030 Ceci est un peu de nouvelles fonctionnalités, 931 00:43:22,030 --> 00:43:24,190 mais pour l'instant il suffit de prendre sur la foi que cela est 932 00:43:24,190 --> 00:43:26,570 la syntaxe avec laquelle vous définir une fonction en PHP. 933 00:43:26,570 --> 00:43:27,840 Vous dites littéralement fonction. 934 00:43:27,840 --> 00:43:30,090 Vous ne spécifiez pas un retour tapez, et cela correspond 935 00:43:30,090 --> 00:43:33,880 avec le détail des variables plus tôt où on n'a pas vraiment fortement de la frappe. 936 00:43:33,880 --> 00:43:35,650 >> Cela indique seulement que, par défaut, ce 937 00:43:35,650 --> 00:43:37,460 prend un associative tableau comme un argument. 938 00:43:37,460 --> 00:43:38,210 Et vous savez quoi? 939 00:43:38,210 --> 00:43:41,450 Si l'utilisateur ne passe pas une dans, prendre une valeur par défaut. 940 00:43:41,450 --> 00:43:44,680 >> Ceci est une fonction qui ne possède pas de C pour nous, ce qui est bien, parce que maintenant 941 00:43:44,680 --> 00:43:46,430 données, même si vous ne lui donnez pas quelque chose, 942 00:43:46,430 --> 00:43:49,300 va être un tableau mais un vide. 943 00:43:49,300 --> 00:43:51,860 Et en passant, extrait juste fait quelque chose de génial 944 00:43:51,860 --> 00:43:56,380 où il prend toutes les clés de cette tableau associatif, toutes les choses 945 00:43:56,380 --> 00:43:59,950 vous pourriez mettre entre crochets, et crée des variables sur les 946 00:43:59,950 --> 00:44:06,270 afin que nous puissions finalement avoir accès à eux dans footet.php et header.php. 947 00:44:06,270 --> 00:44:08,950 Voilà un peu abstrait, alors laissez-moi le signale. 948 00:44:08,950 --> 00:44:12,990 >> Dans index.php, remarque que je suis passant dans une paire de valeur de la clé de titre 949 00:44:12,990 --> 00:44:14,850 avec une valeur de CS50. 950 00:44:14,850 --> 00:44:18,660 Si je regarde maintenant helpers.php, remarquerez que RenderHeader 951 00:44:18,660 --> 00:44:23,870 est l'extraction de ces données que je suis de passage dans, et nécessitant alors header.php. 952 00:44:23,870 --> 00:44:27,970 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. 953 00:44:27,970 --> 00:44:31,720 >> Si je ouvre header.php, avis que je l'ai plus dur 954 00:44:31,720 --> 00:44:34,890 codé le mot CS50 dans ce fichier d'en-tête. 955 00:44:34,890 --> 00:44:39,310 Je l'ai mis ce vrai atrocement fonction nommée, HTML caractères spéciaux, 956 00:44:39,310 --> 00:44:40,170 là-dedans. 957 00:44:40,170 --> 00:44:41,640 Mais remarquez ce que je fais. 958 00:44:41,640 --> 00:44:44,240 Je dois HTML est ouvert. 959 00:44:44,240 --> 00:44:47,420 Je dois ensuite ouvert le crâne et le titre ouvert. 960 00:44:47,420 --> 00:44:52,380 >> Et puis à l'intérieur de son titre et ouvert balises de fermeture, je dois un peu de code PHP. 961 00:44:52,380 --> 00:44:56,670 Et cela est une belle mais de syntaxe, qui signifie simplement écho à. 962 00:44:56,670 --> 00:44:59,840 Il signifie littéralement this-- écho à la following-- 963 00:44:59,840 --> 00:45:01,910 mais cela est plus sexy à écrire. 964 00:45:01,910 --> 00:45:05,000 Echo sur le titre qui a été adoptée en. 965 00:45:05,000 --> 00:45:07,560 >> Mais que pensez-vous HTML caractère spécial est tout au sujet, 966 00:45:07,560 --> 00:45:10,590 surtout si vous avez une certaine expérience HTML avant? 967 00:45:10,590 --> 00:45:14,050 Quels sont les caractères pourrait être dangereux de passer à une page 968 00:45:14,050 --> 00:45:17,980 où vous êtes la génération dynamique la page Web avec ce code? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 Permettez-moi de passer à ce fichier, la version deux, et voir si je peux pas faire cela. 971 00:45:24,650 --> 00:45:26,210 >> Version deux est la suivante. 972 00:45:26,210 --> 00:45:28,510 Et tout remarquer est très bien, fonctionne bien. 973 00:45:28,510 --> 00:45:35,280 Mais suppose que je vais dans index.php et Je précisé que le titre de ma page 974 00:45:35,280 --> 00:45:36,630 est pas CS50. 975 00:45:36,630 --> 00:45:44,930 Il est alerte script de support ouvert Bonjour tout le monde, près apostrophe, 976 00:45:44,930 --> 00:45:49,740 fermeture de parenthèse, point-virgule, parenthèse ouverte, script slash. 977 00:45:49,740 --> 00:45:51,897 >> Script, comme nous allons finalement voir, est un tag 978 00:45:51,897 --> 00:45:54,480 que vous pouvez utiliser pour utiliser d'une autre langage de programmation appelé 979 00:45:54,480 --> 00:45:56,330 JavaScript à l'intérieur d'une page web. 980 00:45:56,330 --> 00:45:57,960 Et remarquez maintenant la logique ici. 981 00:45:57,960 --> 00:45:59,840 Voici une clé appelée titre. 982 00:45:59,840 --> 00:46:02,690 Voici sa valeur fou longtemps. 983 00:46:02,690 --> 00:46:07,840 >> Mais si je vais aux aides page- ou au contraire, la page d'en-tête, 984 00:46:07,840 --> 00:46:11,310 Je vais appeler cette fonction sur ce premier titre. 985 00:46:11,310 --> 00:46:15,250 Donc, si je recharge maintenant cette page, je voir ce qui a l'air ridicule, 986 00:46:15,250 --> 00:46:16,110 mais il est sûr. 987 00:46:16,110 --> 00:46:17,310 Il semble tout simplement stupide. 988 00:46:17,310 --> 00:46:20,320 >> Mais supposons que la place Je l'avais oublié. 989 00:46:20,320 --> 00:46:24,660 Et croyez-moi, un nombre non nul de vous oubliez de le faire 990 00:46:24,660 --> 00:46:27,790 et vous aurez un peu laborieux étudiant ou un ami à venir 991 00:46:27,790 --> 00:46:31,540 vous à la foire de CS50 ou anonyme la nuit de fouiller sur votre site 992 00:46:31,540 --> 00:46:35,300 et essentiellement injectant du code à votre insu sur votre site 993 00:46:35,300 --> 00:46:35,800 en quelque sorte. 994 00:46:35,800 --> 00:46:39,000 >> Parce que si je crache tout simplement à titre ici et titre 995 00:46:39,000 --> 00:46:44,330 there-- bien, si le titre littéralement ressemble à ceci et PHP 996 00:46:44,330 --> 00:46:47,660 comme un langage qui peut cracher sur un autre texte sur les langues, 997 00:46:47,660 --> 00:46:50,650 ce va littéralement de remplacer cette étiquette avec, 998 00:46:50,650 --> 00:46:53,010 bien sûr, ce que je mets ailleurs. 999 00:46:53,010 --> 00:46:57,640 >> Donc, si je vais maintenant ici et recharger après défaire les mécanismes de sécurité, 1000 00:46:57,640 --> 00:46:59,982 maintenant je dois Bonjour tout le monde ici. 1001 00:46:59,982 --> 00:47:02,690 Maintenant que ce pas tout ce que la taille d'un Deal, mais vous pourriez faire quelque chose 1002 00:47:02,690 --> 00:47:05,119 un peu plus malveillant ici, comme il est 1003 00:47:05,119 --> 00:47:08,410 autre tags-- comme nous le verrons, une fois que nous passons plus de temps dans JavaScript-- comme emplacement 1004 00:47:08,410 --> 00:47:14,910 point href obtient, entre guillemets, HTTP business.com, mais à l'opposé de ce que 1005 00:47:14,910 --> 00:47:15,950 de l'autre jour. 1006 00:47:15,950 --> 00:47:20,120 Et maintenant, vous pouvez induire une web Page d'aller effectivement immédiatement 1007 00:47:20,120 --> 00:47:21,190 à cette page web ici. 1008 00:47:21,190 --> 00:47:23,000 >> Et en fait, je ne veux pas même pour aller à business.com 1009 00:47:23,000 --> 00:47:24,749 parce que je ne veux pas à savoir ce qui est. 1010 00:47:24,749 --> 00:47:28,710 Mais cela, aussi, va déclencher le code à injecter dans cette page. 1011 00:47:28,710 --> 00:47:32,680 Donc, ceci est seulement pour dire que même si nous introduisons super tôt sur certains 1012 00:47:32,680 --> 00:47:36,800 des structures plus complexes, il est tout vers une fin de faire en sorte 1013 00:47:36,800 --> 00:47:39,320 que votre code est pas exploitable. 1014 00:47:39,320 --> 00:47:40,960 >> Alors maintenant, une troisième version ici. 1015 00:47:40,960 --> 00:47:42,470 Il se fait un peu amateur. 1016 00:47:42,470 --> 00:47:44,875 Je ne l'ai pas vraiment like-- le côté anal de moi 1017 00:47:44,875 --> 00:47:47,750 devenait un peu agacé par la fait que je l'avais une fonction appelée 1018 00:47:47,750 --> 00:47:51,940 RenderHeader et RenderFooter qui étaient presque identiques. 1019 00:47:51,940 --> 00:47:55,400 Donc je me suis dit, pourquoi pas Je paramétrer ces fonctions 1020 00:47:55,400 --> 00:47:59,180 en un seul appelé rendre, ont-il un second argument 1021 00:47:59,180 --> 00:48:04,420 comme le nom du modèle, la finale à render-- soit en-tête ou le pied? 1022 00:48:04,420 --> 00:48:07,160 Et puis éventuellement, si je veux à passer dans certaines paires clé-valeur 1023 00:48:07,160 --> 00:48:10,580 comme je le fais pour le titre de la tête mais pas pour le pied de page, 1024 00:48:10,580 --> 00:48:11,800 Je pourrais le faire. 1025 00:48:11,800 --> 00:48:16,510 >> Et maintenant si je vais dans helpers.php, il est un peu plus complexe. 1026 00:48:16,510 --> 00:48:19,670 Et je ferai signe mes mains à la détails, mais il est juste une fonction. 1027 00:48:19,670 --> 00:48:21,890 Voilà donc une étape vers une meilleure conception. 1028 00:48:21,890 --> 00:48:23,360 >> Nous pouvons prendre un peu plus loin. 1029 00:48:23,360 --> 00:48:28,890 Si je vais dans ma quatrième version de ce, remarquez maintenant 1030 00:48:28,890 --> 00:48:31,320 que je fais quelque chose encore plus de nature cryptique. 1031 00:48:31,320 --> 00:48:33,230 Et je sais que cela est une beaucoup d'absorber à la fois, 1032 00:48:33,230 --> 00:48:35,080 mais nous sommes juste un peu de nettoyage choses. 1033 00:48:35,080 --> 00:48:38,550 Maintenant, je vais mettre mes aides déposer dans un dossier appelé 1034 00:48:38,550 --> 00:48:41,190 durée comprend juste un arbitraire nommer où je veux mettre des choses 1035 00:48:41,190 --> 00:48:44,300 que je veux comprendre: et puis le reste de la présente est la même. 1036 00:48:44,300 --> 00:48:47,140 >> Mais si je regarde maintenant dans gedit, avis que je suis débarrassé 1037 00:48:47,140 --> 00:48:51,940 de tous ces autres fichiers et je l'ai les déplacés, par exemple, dans ici. 1038 00:48:51,940 --> 00:48:55,110 Et puis dans les modèles, Je dois voir ici, trop. 1039 00:48:55,110 --> 00:48:59,292 Et si tout cela est maintenant vers une étape d'utilisation d'un bien meilleur modèle de conception. 1040 00:48:59,292 --> 00:49:01,000 Et nous sommes très rapidement va éloigner 1041 00:49:01,000 --> 00:49:03,870 de la fonctionnalité par défaut de PHP, qui nous avons commencé ici avec, 1042 00:49:03,870 --> 00:49:07,655 où vous venez COMMINGLE PHP, et votre HTML, CSS et votre, 1043 00:49:07,655 --> 00:49:09,780 et vous venez de cracher et vous allez sur votre chemin. 1044 00:49:09,780 --> 00:49:11,404 Il ne va pas être très maintenable. 1045 00:49:11,404 --> 00:49:14,481 Tout comme en C, nous avons commencé à l'aide plusieurs fichiers et plusieurs fonctions 1046 00:49:14,481 --> 00:49:15,730 et affacturage choses cela. 1047 00:49:15,730 --> 00:49:16,688 Nous ferons la même chose ici. 1048 00:49:16,688 --> 00:49:19,970 Et de fait, dans la cinquième et dernière version ici, je l'ai fait une autre chose. 1049 00:49:19,970 --> 00:49:23,710 Vous pouvez même utiliser dot dot, qui, encore une fois, est tout simplement le répertoire parent. 1050 00:49:23,710 --> 00:49:28,260 Pour être encore plus soucieux de la sécurité, parce que si je regarde l'écoute 1051 00:49:28,260 --> 00:49:32,450 ici pour la cinquième et la version finale, un avis que je dois un répertoire appelé ici 1052 00:49:32,450 --> 00:49:35,180 publique, et ensuite sur la même niveau, pour ainsi dire, 1053 00:49:35,180 --> 00:49:38,490 Je dois comprend et modèles et puis ce fichier texte readme. 1054 00:49:38,490 --> 00:49:41,130 >> Et la raison pour laquelle je l'ai structuré il aime this-- et tant de web 1055 00:49:41,130 --> 00:49:44,330 hôtes, en particulier ces 5 $ par les mois ou les $ 10 par mois, 1056 00:49:44,330 --> 00:49:47,170 si vous avez déjà eu un de ces services-- ce que beaucoup d'entre eux ne 1057 00:49:47,170 --> 00:49:50,690 est qu'ils attendent juste de vider tous de vos fichiers dans un répertoire, 1058 00:49:50,690 --> 00:49:53,640 comme nous l'avons fait déjà avec ce premier exemple. 1059 00:49:53,640 --> 00:49:56,740 >> Mais dès que vous commencez à construire plus des sites sophistiqués qui stockent seulement 1060 00:49:56,740 --> 00:50:00,480 données que vous aimez et fichiers que vous soucier, l'organisation fait des choses 1061 00:50:00,480 --> 00:50:05,060 correctement et avec plus de sécurité conscience à l'esprit peut 1062 00:50:05,060 --> 00:50:07,927 nous commençons à défendre contre tous les amis 1063 00:50:07,927 --> 00:50:10,135 que vous avez dans ou en dehors de cette classe qui, 1064 00:50:10,135 --> 00:50:12,510 dès que vous commencez à faire programmes vous-même sur le web, 1065 00:50:12,510 --> 00:50:15,140 vont commencer à ramasser sur vous et sur eux. 1066 00:50:15,140 --> 00:50:17,420 >> Et si nous regardons en fin de compte à cette conception. 1067 00:50:17,420 --> 00:50:20,010 Ceci est juste une image qui représente ce qui suit. 1068 00:50:20,010 --> 00:50:22,897 Nous allons mettre toute notre la logique de programmation dans un ou plusieurs fichiers, 1069 00:50:22,897 --> 00:50:25,230 et nous allons commencer tout appelant les contrôleurs. 1070 00:50:25,230 --> 00:50:28,022 Il est où le cerveau de nos sites sont en réalité. 1071 00:50:28,022 --> 00:50:29,730 Ensuite, nous allons avoir des vues et points de vue 1072 00:50:29,730 --> 00:50:32,480 sont aussi simple que séparé files-- appelés modèles, souvent. 1073 00:50:32,480 --> 00:50:34,410 Ils ont juste le esthétique de ma page, 1074 00:50:34,410 --> 00:50:37,020 ce que je veux la page pour regarder like-- les couleurs et le tracé 1075 00:50:37,020 --> 00:50:38,870 et les positions de toutes les variables. 1076 00:50:38,870 --> 00:50:41,120 >> Et puis plus intéressant que nous finirons par arriver à 1077 00:50:41,120 --> 00:50:45,420 est le modèle qui va être juste le mot nous tape sur les autres technologies 1078 00:50:45,420 --> 00:50:47,771 que nous apportons dans le image, comme les bases de données réelles, 1079 00:50:47,771 --> 00:50:49,520 de sorte que lorsque vous voulez pour enregistrer des informations, 1080 00:50:49,520 --> 00:50:52,140 vous ne vous contentez pas d'envoyer un e-mail à votre surveillant ou à vous-même, 1081 00:50:52,140 --> 00:50:57,350 vous stockez en fait dans une base de données en utilisant une autre langue connue sous le nom SQL. 1082 00:50:57,350 --> 00:51:00,450 Et si nous laissons ici aujourd'hui et ramasser avec ce mercredi 1083 00:51:00,450 --> 00:51:02,990 et introduire ensuite des bases de données. 1084 00:51:02,990 --> 00:51:06,940 >> [Lecture de musique] 1085 00:51:06,940 --> 00:54:24,555