1 00:00:00,000 --> 00:00:03,920 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:03,920 --> 00:00:11,760 3 00:00:11,760 --> 00:00:13,800 >> DAVID J. MALAN: De acuerdo. 4 00:00:13,800 --> 00:00:15,640 Esto es CS50. 5 00:00:15,640 --> 00:00:17,620 Este es el comienzo de la semana ocho. 6 00:00:17,620 --> 00:00:22,440 Y se recordará que lo dejamos la última vez que mira un nuevo idioma 7 00:00:22,440 --> 00:00:23,240 por completo. 8 00:00:23,240 --> 00:00:25,905 De hecho, uno que es bastante ligero y ni siquiera es 9 00:00:25,905 --> 00:00:26,940 un lenguaje de programación. 10 00:00:26,940 --> 00:00:31,100 Es un lenguaje de marcado que nos permite realmente estructurar y hacer que las páginas web. 11 00:00:31,100 --> 00:00:33,350 Y cuando algo más en conjunción con esto-- 12 00:00:33,350 --> 00:00:35,670 o pronto lo sabrá, si no lo ha hecho. 13 00:00:35,670 --> 00:00:38,530 Vamos a utilizar en cascada Hojas de estilo o CSS, que 14 00:00:38,530 --> 00:00:40,971 es otro tipo de lenguaje con propiedades y valores 15 00:00:40,971 --> 00:00:43,220 eso va a dejarnos hacer cosas como cambiar el color 16 00:00:43,220 --> 00:00:46,010 y cambiar la posición y este tipo de ajustes. 17 00:00:46,010 --> 00:00:49,940 Pero hoy en día y en adelante, empezamos a centrarse en las lenguas más poderosas, 18 00:00:49,940 --> 00:00:52,810 lenguajes de programación como PHP reales. 19 00:00:52,810 --> 00:00:54,880 >> Así que PHP ha estado alrededor por algún tiempo. 20 00:00:54,880 --> 00:00:56,810 Y como se verá, se fue diseñado principalmente 21 00:00:56,810 --> 00:01:00,280 desde el principio para real utilizar en el desarrollo web 22 00:01:00,280 --> 00:01:02,360 y en realidad la generación de páginas web. 23 00:01:02,360 --> 00:01:04,849 Entonces, ¿qué tipo de características hace un idioma 24 00:01:04,849 --> 00:01:10,040 necesario con el fin de hacer web páginas de forma dinámica con él? 25 00:01:10,040 --> 00:01:14,760 >> En otras palabras, si desea generar contenido dynamically-- como Facebook de 26 00:01:14,760 --> 00:01:19,480 Suministro de noticias, que cambia constantemente, o mensajes instantáneos que aparecen de vez 27 00:01:19,480 --> 00:01:21,872 a tiempo-- como lo que es el pieza clave de la funcionalidad 28 00:01:21,872 --> 00:01:24,580 lo que necesitas en un lenguaje de programación que le permiten de forma dinámica 29 00:01:24,580 --> 00:01:28,070 imprimir nueva información a la pantalla? 30 00:01:28,070 --> 00:01:28,685 >> ESTUDIANTE: Código. 31 00:01:28,685 --> 00:01:29,560 DAVID J. MALAN: Código. 32 00:01:29,560 --> 00:01:30,440 Okay. 33 00:01:30,440 --> 00:01:31,995 Tomaremos eso. 34 00:01:31,995 --> 00:01:35,310 Un poco más preciso. 35 00:01:35,310 --> 00:01:37,639 Quiero decir, podríamos hacer esto con C, francamente. 36 00:01:37,639 --> 00:01:38,930 Sería un dolor en el cuello. 37 00:01:38,930 --> 00:01:41,045 Pero- es este compromiso? 38 00:01:41,045 --> 00:01:41,895 >> ESTUDIANTE: Sí. 39 00:01:41,895 --> 00:01:42,677 Las variables, tal vez? 40 00:01:42,677 --> 00:01:43,760 DAVID J. MALAN: Variables. 41 00:01:43,760 --> 00:01:44,160 Bueno, seguro. 42 00:01:44,160 --> 00:01:45,740 Las variables sin duda nos pueden ayudar. 43 00:01:45,740 --> 00:01:47,020 E incluso algo más simple. 44 00:01:47,020 --> 00:01:50,640 Lo usamos en la primera programa del primer día 45 00:01:50,640 --> 00:01:55,686 cuando en realidad nos dijo "hola mundo". 46 00:01:55,686 --> 00:01:56,570 >> ESTUDIANTE: Imprimir. 47 00:01:56,570 --> 00:01:57,778 >> DAVID J. MALAN: Imprimir, ¿verdad? 48 00:01:57,778 --> 00:02:01,050 Imprimir o printf en el mundo de C. Así que todo este tiempo, 49 00:02:01,050 --> 00:02:03,362 que hemos tenido en nuestra disposición un language-- C, 50 00:02:03,362 --> 00:02:05,570 en particular: e incluso Rasguño para el caso de que 51 00:02:05,570 --> 00:02:07,400 puede generar cadenas de texto. 52 00:02:07,400 --> 00:02:11,090 >> Bueno, si el HTML, como vimos la semana pasada, es sólo un montón de cadenas de texto 53 00:02:11,090 --> 00:02:14,692 aunque con soportes abiertos y cerrados soportes y algún tipo de rima 54 00:02:14,692 --> 00:02:16,650 y la razón detrás de ella, así entonces podríamos realmente 55 00:02:16,650 --> 00:02:20,440 comenzar a generar páginas web manualmente escribiendo a cabo en gedit 56 00:02:20,440 --> 00:02:23,870 o en Microsoft Word, para que matter-- sólo necesitamos un editor de texto. 57 00:02:23,870 --> 00:02:26,830 >> O podríamos escribir código, a su sugerencia 58 00:02:26,830 --> 00:02:30,435 antes, eso nos deja generar dinámicamente HTML, 59 00:02:30,435 --> 00:02:32,560 y eso es lo que vamos para empezar a hacer con PHP 60 00:02:32,560 --> 00:02:34,900 y, finalmente, incluso con una lenguaje llamado JavaScript 61 00:02:34,900 --> 00:02:37,910 es utilizar un idioma a generar otro. 62 00:02:37,910 --> 00:02:40,720 Y, de hecho, esto es lo que Facebook y muchos, muchos otros sitios 63 00:02:40,720 --> 00:02:44,530 hacer para realmente dinámicamente mostrar nueva información a usted. 64 00:02:44,530 --> 00:02:47,117 >> Así que vamos a empezar con un esto-- línea de mira críptico, pero uno 65 00:02:47,117 --> 00:02:48,450 eso es realmente muy poderoso. 66 00:02:48,450 --> 00:02:51,210 Hasta ahora, hemos estado utilizando C, que es un lenguaje compilado. 67 00:02:51,210 --> 00:02:55,050 Y sólo un recap-- rápida un compilado lenguaje tiene qué características? 68 00:02:55,050 --> 00:02:59,050 Obviamente, se necesita para compilar , pero ¿qué significa eso? 69 00:02:59,050 --> 00:03:00,505 ¿Sí? 70 00:03:00,505 --> 00:03:02,940 >> ESTUDIANTE: Tiene que ser ensamblado en código máquina. 71 00:03:02,940 --> 00:03:03,060 >> DAVID J. MALAN: OK. 72 00:03:03,060 --> 00:03:04,530 Necesita ser ensamblado en código máquina. 73 00:03:04,530 --> 00:03:07,340 Así que usted toma su código fuente, que es una especie de Inglés-como. 74 00:03:07,340 --> 00:03:09,270 Convierte eso a nivel más bajo algo, 75 00:03:09,270 --> 00:03:11,590 que se llama en última instancia objeto code-- de 0 y 1 de. 76 00:03:11,590 --> 00:03:14,830 Y son esos de 0 y 1 de ese una CPU, como los realizados por Intel, 77 00:03:14,830 --> 00:03:16,110 realmente entender. 78 00:03:16,110 --> 00:03:19,690 >> Ahora, PHP y Python y Ruby y JavaScript y racimos de otro 79 00:03:19,690 --> 00:03:23,190 lenguas no se compilan idiomas, pero interpretado lenguas, 80 00:03:23,190 --> 00:03:26,630 lo que significa que acaba de escribir y luego no convertirlos en 0 y 1 de la. 81 00:03:26,630 --> 00:03:30,790 En su lugar, sólo proporciona a continuación como entrada al programa de otra persona, 82 00:03:30,790 --> 00:03:32,080 llamado un intérprete. 83 00:03:32,080 --> 00:03:34,460 Y de esa persona programa ha sido diseñado 84 00:03:34,460 --> 00:03:38,280 para entender lo que cada uno y cada símbolo en Python o PHP 85 00:03:38,280 --> 00:03:42,650 o Ruby o cualquier número de otros idiomas significa. 86 00:03:42,650 --> 00:03:44,760 >> Y por lo que todo lo que necesitamos es algo como esto. 87 00:03:44,760 --> 00:03:46,350 Así que, de hecho, voy a ir hacia el aparato 88 00:03:46,350 --> 00:03:48,100 aquí, sólo a cualquier ventana de edad, y estamos 89 00:03:48,100 --> 00:03:52,580 va a seguir adelante y abierto un archivo llamado, por ejemplo, hola. 90 00:03:52,580 --> 00:03:55,780 Ahora anteriormente, podría haber salvado esto incluso con una extensión de archivo, 91 00:03:55,780 --> 00:03:57,910 pero yo voy a hacer algo aún más simple aquí. 92 00:03:57,910 --> 00:04:02,450 Voy a seguir adelante y comenzar este archivo con esta sintaxis críptica. 93 00:04:02,450 --> 00:04:06,310 Así que "el usuario, bin, env, para el medio ambiente, php. " 94 00:04:06,310 --> 00:04:10,670 >> Esto es simplemente una línea de código que es voy a decir mi sistema operativo, 95 00:04:10,670 --> 00:04:13,730 ir a buscar en su local, medio ambiente sea lo que sea, 96 00:04:13,730 --> 00:04:18,149 donde PHP es-- la interpreter-- y seguir adelante y utilizar ese intérprete 97 00:04:18,149 --> 00:04:20,589 para interpretar el código siguiente. 98 00:04:20,589 --> 00:04:22,760 Ahora, esto es una especie de una característica fea de PHP. 99 00:04:22,760 --> 00:04:24,980 Pero en este idioma, cualquier Cuando se escribe código PHP, 100 00:04:24,980 --> 00:04:29,200 es necesario tener uno de estos feos Etiquetas PHP que delimitan el inicio 101 00:04:29,200 --> 00:04:32,220 de su code-- 00:04:37,430 >> Pero por debajo de aquí, ahora puedo hacer algo muy simple, al igual que printf hola comas 103 00:04:37,430 --> 00:04:40,922 mundo barra invertida n cerca cita, paréntesis de cierre. 104 00:04:40,922 --> 00:04:42,630 Y a continuación, sólo por si acaso medida, voy 105 00:04:42,630 --> 00:04:45,380 seguir adelante y cerca mi etiqueta php aquí 106 00:04:45,380 --> 00:04:47,390 por lo que se ve todo muy bien bastante impresa. 107 00:04:47,390 --> 00:04:50,780 >> Y tan pronto como haga clic en Guardar, gedit es suficiente realmente inteligente 108 00:04:50,780 --> 00:04:54,620 mirar a esa primera línea y das cuenta, oh, estás escribiendo código PHP. 109 00:04:54,620 --> 00:04:56,710 Déjame resaltado de sintaxis con los colores 110 00:04:56,710 --> 00:04:58,690 aquí para que se destaca un poco más. 111 00:04:58,690 --> 00:05:01,300 Pero ahora me voy a ir hasta mi ventana de terminal. 112 00:05:01,300 --> 00:05:02,340 Voy a acercar. 113 00:05:02,340 --> 00:05:06,860 >> Este programa se llama "hola" así que voy a hacer barra de puntos hola, 114 00:05:06,860 --> 00:05:07,990 pero negó el permiso. 115 00:05:07,990 --> 00:05:08,490 Y bash. 116 00:05:08,490 --> 00:05:10,610 En realidad nos enteramos de que Hace cosa de un par de semanas 117 00:05:10,610 --> 00:05:13,140 en el contexto de Shellshock, uno de esos bichos. 118 00:05:13,140 --> 00:05:16,240 >> Pero Permiso denegado hemos visto antes, tal vez en un contexto diferente. 119 00:05:16,240 --> 00:05:19,060 ¿Alguien recuerda cómo usted puede arreglar algo 120 00:05:19,060 --> 00:05:22,100 donde el permiso es negado de esta manera? 121 00:05:22,100 --> 00:05:23,490 ¿Cuál es el comando, por lo menos? 122 00:05:23,490 --> 00:05:24,159 >> ESTUDIANTE: Chmod. 123 00:05:24,159 --> 00:05:26,700 DAVID J. MALAN: Sí, chmod, para cambiar el modo de un archivo. 124 00:05:26,700 --> 00:05:30,171 Y obtendrá aún más acostumbrado a esta semana que viene con un problema posterior 125 00:05:30,171 --> 00:05:30,670 establecer. 126 00:05:30,670 --> 00:05:33,211 Pero por ahora, me voy a cambiar el modo de no ser legible, 127 00:05:33,211 --> 00:05:36,650 sino para dar a cada uno executeability privilegios, la capacidad 128 00:05:36,650 --> 00:05:37,710 para ejecutar este archivo. 129 00:05:37,710 --> 00:05:40,360 Y yo voy a asignar que en el fichero de hola. 130 00:05:40,360 --> 00:05:45,150 >> Si ahora hago slash dot hola entrar, usted ver, de hecho, mi programa, hola mundo. 131 00:05:45,150 --> 00:05:48,760 ¿Y qué paso me hicieron saltar claramente en total? 132 00:05:48,760 --> 00:05:49,520 Compilación. 133 00:05:49,520 --> 00:05:51,680 Así que me encontré con este programa, sencillamente. 134 00:05:51,680 --> 00:05:55,690 >> Y resulta que usted puede hacer esto con una gran cantidad de sintaxis que recuerda a C. 135 00:05:55,690 --> 00:06:03,400 Déjame ir en el código de hoy, que he puesto en mi directorio vhost 136 00:06:03,400 --> 00:06:05,250 aquí, por razones reales vamos a volver a. 137 00:06:05,250 --> 00:06:09,350 Y yo voy a entrar, digamos, las condiciones 1. 138 00:06:09,350 --> 00:06:12,450 >> Y verás aquí, en primer lugar y ante todo, un montón de comentarios. 139 00:06:12,450 --> 00:06:15,240 Pero esto es en realidad una recreación en PHP 140 00:06:15,240 --> 00:06:18,960 de un programa que hicimos en la semana uno llamado condiciones 1.c 141 00:06:18,960 --> 00:06:20,690 donde el propósito en la vida de este programa 142 00:06:20,690 --> 00:06:22,950 es al parecer para pedir el usuario de un entero 143 00:06:22,950 --> 00:06:25,270 y luego hacer un poco esponjoso análisis en él mediante el cual 144 00:06:25,270 --> 00:06:29,510 usted dice si es positivo o negativo o igual a cero. 145 00:06:29,510 --> 00:06:34,220 Y Traigo esto a colación sólo porque, excepto tal vez un pequeño detalle, 146 00:06:34,220 --> 00:06:37,150 es indistinguible tan lejos de C. 147 00:06:37,150 --> 00:06:39,930 >> ¿Cuál es la una de las características aquí que tal vez salta 148 00:06:39,930 --> 00:06:41,410 a usted como un poco diferente? 149 00:06:41,410 --> 00:06:42,160 Tal vez dos cosas. 150 00:06:42,160 --> 00:06:42,660 ¿Sí? 151 00:06:42,660 --> 00:06:44,070 >> ESTUDIANTE: Muestra de dólar n? 152 00:06:44,070 --> 00:06:44,944 >> DAVID J. MALAN: Sí. 153 00:06:44,944 --> 00:06:46,210 Así signo de dólar n está presente. 154 00:06:46,210 --> 00:06:48,120 Y, como signos de dólar vamos a ver, se van 155 00:06:48,120 --> 00:06:51,460 ser una solución al principio de cualquier variable en PHP. 156 00:06:51,460 --> 00:06:54,250 Es a la vez buena y buena bad-- en que es una especie de lo que es obvio 157 00:06:54,250 --> 00:06:56,797 una variable, el mal en que se trata de otra cosa para escribir. 158 00:06:56,797 --> 00:06:58,630 Y hay otra cosa que no tenemos bastante 159 00:06:58,630 --> 00:07:00,876 visto, al menos por esta ortografía. sí? 160 00:07:00,876 --> 00:07:01,630 >> ESTUDIANTE: Readline. 161 00:07:01,630 --> 00:07:02,671 >> DAVID J. MALAN: Readline. 162 00:07:02,671 --> 00:07:06,550 Readline no vimos, de por sí, en C, a pesar de que existe algo 163 00:07:06,550 --> 00:07:09,530 similar, pero hemos utilizado getString, y esto es su contraparte. 164 00:07:09,530 --> 00:07:12,950 Así que si me voy en este directorio, que pasa a ser, 165 00:07:12,950 --> 00:07:18,030 como voy a explicar un poco en mi host virtual directorio y mi fuente de un directorio, 166 00:07:18,030 --> 00:07:22,730 y yo seguir adelante y hacer slash dot conditions-- slash dot whoops-- 167 00:07:22,730 --> 00:07:26,710 las condiciones 1, verás, una vez más, el mismo permiso Issue-- negó. 168 00:07:26,710 --> 00:07:33,610 >> Así que permítanme el zoom y hago chmod un plus x en las condiciones, las condiciones de la raya vertical de puntos. 169 00:07:33,610 --> 00:07:35,222 Me gustaría un número entero, por favor, 50. 170 00:07:35,222 --> 00:07:36,930 Y podríamos jugar este juego durante todo el día. 171 00:07:36,930 --> 00:07:39,140 Se va a comportarse exactamente como lo hizo en la semana uno. 172 00:07:39,140 --> 00:07:42,860 >> Aceptar lo que no tan diferente, excepto no sólo que poco ligera de sintaxis, 173 00:07:42,860 --> 00:07:45,490 pero en la parte superior, que de nuevo tenido esta línea que 174 00:07:45,490 --> 00:07:49,760 me permitió crear algo que parece un programa C llamado hola, 175 00:07:49,760 --> 00:07:51,150 llamadas condiciones 1. 176 00:07:51,150 --> 00:07:54,520 Pero no es de los 0 y Estoy ejecutando directamente. 177 00:07:54,520 --> 00:07:57,620 Está en lugar de ejecutar este intérprete cuyo nombre 178 00:07:57,620 --> 00:07:59,440 pasa a ser idéntica a la lengua. 179 00:07:59,440 --> 00:08:04,970 El programa se llama PHP, y mi código por debajo de la línea uno se pasa en ella. 180 00:08:04,970 --> 00:08:07,740 >> Podemos hacer otra bastante simple ejemplo una reminiscencia de algo 181 00:08:07,740 --> 00:08:09,240 lo hicimos hace semanas. 182 00:08:09,240 --> 00:08:12,020 De nuevo, esto es una especie de porción arbitraria de código 183 00:08:12,020 --> 00:08:14,000 que aparentemente hace lo que cuando lo ejecuta? 184 00:08:14,000 --> 00:08:15,625 ¿Qué es esto va a imprimir, es de suponer? 185 00:08:15,625 --> 00:08:23,540 186 00:08:23,540 --> 00:08:28,250 >> Así inicialmente en la línea 16, que es va a decir x es ahora 2, probablemente. 187 00:08:28,250 --> 00:08:30,920 % D es el mismo que $ i para printf. 188 00:08:30,920 --> 00:08:33,460 Así que a continuación se cubicar, punto, dot, dot, en la línea 17. 189 00:08:33,460 --> 00:08:36,299 Y entonces aparece la línea 18 para llamar a una función Cubed. 190 00:08:36,299 --> 00:08:37,600 ¿Y dónde se define Cubed? 191 00:08:37,600 --> 00:08:40,319 >> Bueno, parece que en la línea 25, así que no es tan diferente. 192 00:08:40,319 --> 00:08:42,610 Tengo algunos comentarios anteriores , pero en su mayor parte, 193 00:08:42,610 --> 00:08:45,370 que es un bastante sencillo portar o conversión 194 00:08:45,370 --> 00:08:48,470 desde el programa de C para la versión PHP. 195 00:08:48,470 --> 00:08:52,670 Pero ahora hay un par de diferencias que tal vez debería saltar fuera. 196 00:08:52,670 --> 00:08:56,100 ¿Qué otra cosa es diferente sobre cómo se podría escribir este mismo programa en C? 197 00:08:56,100 --> 00:08:57,900 >> ESTUDIANTE: [inaudible]. 198 00:08:57,900 --> 00:09:00,070 >> DAVID J. MALAN: No ningún prototipo hasta la parte superior. 199 00:09:00,070 --> 00:09:03,210 Así PHP-- y, francamente, un montón de Las Lenguas moderna 200 00:09:03,210 --> 00:09:06,920 son mucho más inteligente y más útil que los compiladores de C en que 201 00:09:06,920 --> 00:09:09,740 puede poner la función hasta aquí, usted puede poner una función aquí abajo, 202 00:09:09,740 --> 00:09:12,740 y el intérprete se va hacer el favor de la lectura 203 00:09:12,740 --> 00:09:16,010 todo el archivo antes de que decida que no existe alguna función. 204 00:09:16,010 --> 00:09:17,970 Tan agradable mejoras años posteriores. 205 00:09:17,970 --> 00:09:22,126 Pero también hay algo otra cosa diferente o ausente aquí. 206 00:09:22,126 --> 00:09:22,626 ¿Sí? 207 00:09:22,626 --> 00:09:25,084 >> ESTUDIANTE: [inaudible]. 208 00:09:25,084 --> 00:09:27,750 DAVID J. MALAN: Nosotros no tenemos que declarar los tipos de variables, 209 00:09:27,750 --> 00:09:31,780 así que ya veremos en poco tiempo que hay diferentes tipos en PHP, 210 00:09:31,780 --> 00:09:34,970 pero no es necesario especificarlos, que también es a la vez bueno y malo. 211 00:09:34,970 --> 00:09:36,623 Y hay otra cosa que falta. 212 00:09:36,623 --> 00:09:37,430 >> ESTUDIANTE: No hay bibliotecas. 213 00:09:37,430 --> 00:09:38,630 >> DAVID J. MALAN: No hay bibliotecas. 214 00:09:38,630 --> 00:09:39,350 OK, así que eso es bueno. 215 00:09:39,350 --> 00:09:40,540 Tenemos un montón más sacarlo de la caja. 216 00:09:40,540 --> 00:09:43,373 Así que no hay en realidad mucho más las cosas que pensé eran diferentes. 217 00:09:43,373 --> 00:09:44,350 ¿Qué tal manera en la espalda? 218 00:09:44,350 --> 00:09:46,032 Qué es eso? 219 00:09:46,032 --> 00:09:46,740 Dicen que una vez más? 220 00:09:46,740 --> 00:09:47,960 >> ESTUDIANTE: Puntero. 221 00:09:47,960 --> 00:09:49,270 >> DAVID J. MALAN: No hay punteros. 222 00:09:49,270 --> 00:09:51,280 Aceptar, por lo menos en este ejemplo, no. 223 00:09:51,280 --> 00:09:52,070 Eso es justo. 224 00:09:52,070 --> 00:09:55,090 Así que no son punteros en PHP realmente en general. 225 00:09:55,090 --> 00:09:58,730 Hay algo que se llama referencias, pero no vamos a pasar mucho tiempo allí. 226 00:09:58,730 --> 00:09:59,520 ¿Y qué más? 227 00:09:59,520 --> 00:10:00,185 >> ESTUDIANTE: Principal. 228 00:10:00,185 --> 00:10:01,060 DAVID J. MALAN: Principal. 229 00:10:01,060 --> 00:10:02,768 Así que esta era la gran cosa Yo estaba pensando. 230 00:10:02,768 --> 00:10:04,660 Nótese que no hay punto de entrada principal. 231 00:10:04,660 --> 00:10:06,525 Sólo tiene que empezar a escribir su código. 232 00:10:06,525 --> 00:10:08,400 Y esto es en realidad va a ser ventajoso 233 00:10:08,400 --> 00:10:10,560 cuando hacemos la transición momentáneamente para utilizar realmente 234 00:10:10,560 --> 00:10:13,980 este mismo lenguaje para la web basado- programación, para lo cual 235 00:10:13,980 --> 00:10:16,580 no quieren tener un solo punto de entrada. 236 00:10:16,580 --> 00:10:19,980 Podríamos querer tener un montón de URL, un montón de diferentes archivos 237 00:10:19,980 --> 00:10:22,930 todo teniendo en la entrada de usuario y la producción de salida. 238 00:10:22,930 --> 00:10:27,130 >> Pero aquí está el muy desalentador ejemplo que le prometí la última vez, 239 00:10:27,130 --> 00:10:30,130 es decir, en esta carpeta aquí, las faltas de ortografía. 240 00:10:30,130 --> 00:10:33,680 Así que en este archivo corrector ortográfico, que nos no pasar demasiado tiempo en adelante, no es 241 00:10:33,680 --> 00:10:37,870 esencialmente un porting-- P-O-R-T. Es sólo la palabra dada cuando, por ejemplo, 242 00:10:37,870 --> 00:10:40,800 a convertir de un idioma a otro manualmente por lo general. 243 00:10:40,800 --> 00:10:45,680 >> Esta es una de portabilidad de PC versión del corrector ortográfico de PSET 5. 244 00:10:45,680 --> 00:10:48,856 Y esencialmente traté de convertir línea por línea lo más cerca que pueda. 245 00:10:48,856 --> 00:10:51,730 Así que si te gusta este tipo de cosas, lo que realmente vale la pena en algún momento 246 00:10:51,730 --> 00:10:54,229 tirando de los dos uno al lado del lado y ver lo que es lo mismo 247 00:10:54,229 --> 00:10:55,230 y lo que es diferente. 248 00:10:55,230 --> 00:10:57,510 Pero son bastante maldito similar. 249 00:10:57,510 --> 00:11:00,110 Si te acuerdas de lo que corrector ortográfico incluso parecía, 250 00:11:00,110 --> 00:11:02,110 a pesar de que usted no lo hizo tendrá que cambiar este archivo, 251 00:11:02,110 --> 00:11:04,860 que es bastante parecido estructuralmente con sólo un par 252 00:11:04,860 --> 00:11:06,200 de los cambios aquí y allá. 253 00:11:06,200 --> 00:11:10,140 >> Así que esto es sólo para decir que es bastante sencillo para convertir speller 254 00:11:10,140 --> 00:11:12,000 de C a PHP. 255 00:11:12,000 --> 00:11:15,390 Pero en el diccionario, no hay algo aún más convincente. 256 00:11:15,390 --> 00:11:19,270 Déjenme seguir adelante y crear mi propio archivo dictionary.php. 257 00:11:19,270 --> 00:11:24,010 Así ligeramente diferente en que lo llamaremos .php en vez de .c. 258 00:11:24,010 --> 00:11:26,980 Debido a que este es un archivo PHP, yo hacer-- ligeramente annoyingly-- tiene 259 00:11:26,980 --> 00:11:30,132 para iniciar el archivo con una etiqueta php así. 260 00:11:30,132 --> 00:11:32,340 Y yo voy a seguir adelante y definir algunas funciones. 261 00:11:32,340 --> 00:11:35,770 Función llamada de verificación, que es va a tomar en una palabra como antes. 262 00:11:35,770 --> 00:11:37,520 Pero este argumento va a tener un dólar 263 00:11:37,520 --> 00:11:39,840 firmar porque estamos, de nuevo, usando PHP. 264 00:11:39,840 --> 00:11:42,350 Otra función de dictionary.c era carga 265 00:11:42,350 --> 00:11:47,120 y se tomó en el nombre de un diccionario, así que voy a conseguir que la función lista para ir. 266 00:11:47,120 --> 00:11:50,920 >> Otro en dictionary.c fue qué? 267 00:11:50,920 --> 00:11:54,580 Tamaño fue uno de los más bonitos, en menos si se mantenía en torno a alguna variable. 268 00:11:54,580 --> 00:11:57,830 tan sólo el tamaño tiene que devolver una variable. 269 00:11:57,830 --> 00:11:59,090 Y luego estaba descarga. 270 00:11:59,090 --> 00:12:02,830 >> Así que hubo estos cuatro funciones en problemas 5 271 00:12:02,830 --> 00:12:06,770 que usted necesita para poner en práctica con una estructura de datos o estructuras. 272 00:12:06,770 --> 00:12:10,170 Así que me prometí que en PHP, podemos declarar 273 00:12:10,170 --> 00:12:14,490 una tabla hash, por ejemplo, todo lo que más fácilmente. 274 00:12:14,490 --> 00:12:17,377 De hecho, si quiero una tabla hash, Yo sólo voy a ir de esa manera 275 00:12:17,377 --> 00:12:18,460 y ahí está mi tabla hash. 276 00:12:18,460 --> 00:12:21,555 Y esa es la nota, desalentador, que lo dejamos en el último tiempo. 277 00:12:21,555 --> 00:12:23,930 ¿Y sabes qué, si quería una variable de tamaño, así, 278 00:12:23,930 --> 00:12:25,867 éste no es todo tan diferente de C, 279 00:12:25,867 --> 00:12:27,450 pero yo voy a seguir adelante y hacer eso. 280 00:12:27,450 --> 00:12:28,630 Y note ningún tipo de datos. 281 00:12:28,630 --> 00:12:31,180 Y voy a volver más tarde y en realidad añadir algunos comentarios aquí. 282 00:12:31,180 --> 00:12:32,480 Pero ¿qué pasa con la carga? 283 00:12:32,480 --> 00:12:35,780 >> Si diccionario signo de dólar es el nombre de mi archivo 284 00:12:35,780 --> 00:12:39,600 y yo en realidad quiero cargar palabras en esta mesa ahora, 285 00:12:39,600 --> 00:12:42,360 De hecho, me puedo hacer algo bastante simple. 286 00:12:42,360 --> 00:12:44,880 Uno-- y esto es minorly annoying-- en PHP, 287 00:12:44,880 --> 00:12:47,710 se tiene que especificar en el interior de una función si 288 00:12:47,710 --> 00:12:51,060 quieren acceder a algunos mundial variable que está definida fuera. 289 00:12:51,060 --> 00:12:53,530 >> Pero eso no es todo interesante en este momento. 290 00:12:53,530 --> 00:12:57,920 Lo que es más interesante es esto para cada construyo que mencioné la última vez. 291 00:12:57,920 --> 00:13:01,880 Y resulta que PHP tiene una función llamado archivo cuyo propósito en la vida 292 00:13:01,880 --> 00:13:05,550 es abrir un archivo y leer en todas sus líneas en una matriz 293 00:13:05,550 --> 00:13:06,840 y la mano hacia atrás para. 294 00:13:06,840 --> 00:13:12,170 >> Lo que quiere decir que puedo hacer tan diccionario que ahora efectivamente cuando llamo archivo, 295 00:13:12,170 --> 00:13:15,472 esto me va a devolver una serie de palabras del archivo. 296 00:13:15,472 --> 00:13:16,430 No todo es tan bueno. 297 00:13:16,430 --> 00:13:20,130 Todavía va a ser una línea de palabras, algo lineal. 298 00:13:20,130 --> 00:13:23,880 Pero puedo seguir adelante y repetir sobre cada una de estas palabras utilizando 299 00:13:23,880 --> 00:13:25,710 que la sintaxis vimos brevemente la última vez. 300 00:13:25,710 --> 00:13:27,940 Y lo verás más en la próxima PSET. 301 00:13:27,940 --> 00:13:32,070 >> Pero ahora tengo una iteración de bucle sobre cada palabra en el diccionario. 302 00:13:32,070 --> 00:13:36,100 Y en cada iteración, recuerdo que soy llamando a la palabra actual "palabra." 303 00:13:36,100 --> 00:13:39,790 Y todo lo que se va a llevar a poner una palabra en el diccionario es 304 00:13:39,790 --> 00:13:43,530 va a ser adivinar la palabra "verdad". 305 00:13:43,530 --> 00:13:44,740 Esa es mi función de inserción. 306 00:13:44,740 --> 00:13:46,661 Esa es mi función de carga para mi diccionario. 307 00:13:46,661 --> 00:13:49,410 Ahora es un poco de una trampa, ya que, sabes qué, no hay en realidad 308 00:13:49,410 --> 00:13:52,920 n de barra invertida al final de las palabras que probablemente debería deshacerme de, 309 00:13:52,920 --> 00:13:56,380 pero eso no es un problema, ya que PHP tiene una chuleta que función llamada literalmente 310 00:13:56,380 --> 00:13:58,480 chuletas fuera un personaje en el final. 311 00:13:58,480 --> 00:13:59,400 Así que no hay problema. 312 00:13:59,400 --> 00:14:02,199 Hemos ido por delante y, de hecho abreviada que sólo esto. 313 00:14:02,199 --> 00:14:05,240 Y ahora probablemente debería llevar un registro de tamaño, por lo que vamos a hacer por lo menos esto-- 314 00:14:05,240 --> 00:14:05,835 tamaño ++. 315 00:14:05,835 --> 00:14:07,339 Yo puedo hacer eso como antes. 316 00:14:07,339 --> 00:14:10,380 Y entonces esto va probablemente a funcionar bien, por lo que regresemos cierto. 317 00:14:10,380 --> 00:14:10,930 Hecho. 318 00:14:10,930 --> 00:14:11,797 PSET 5. 319 00:14:11,797 --> 00:14:13,545 >> [Risas] 320 00:14:13,545 --> 00:14:14,420 >> DAVID J. MALAN: OK. 321 00:14:14,420 --> 00:14:16,628 Vamos a hacerlo de nuevo con el siguiente PSET, también. 322 00:14:16,628 --> 00:14:18,730 Así que ¿qué pasa con el tamaño? 323 00:14:18,730 --> 00:14:22,080 Bueno, éste es de esperar se trata como era de esperar la última vez, 324 00:14:22,080 --> 00:14:24,460 aunque tengo que hacer esta cosa estúpida mundial. 325 00:14:24,460 --> 00:14:26,610 Es sólo un artefacto de el diseño de la lengua. 326 00:14:26,610 --> 00:14:28,450 >> Pero cheque es un poco más interesante. 327 00:14:28,450 --> 00:14:31,420 Así que si pasaba en dólares signo denominativo, en primer lugar 328 00:14:31,420 --> 00:14:34,060 quieren tener acceso a esa mesa variable global. 329 00:14:34,060 --> 00:14:36,700 Y ahora si quiero comprobar si una palabra está ahí, 330 00:14:36,700 --> 00:14:44,350 Simplemente puedo decir si es cierto que la siguiente se encuentra en la tabla, 331 00:14:44,350 --> 00:14:49,957 a continuación, seguir adelante y de retorno verdadero; si no, regrese falso. 332 00:14:49,957 --> 00:14:51,180 Hecho. 333 00:14:51,180 --> 00:14:52,440 La otra mitad de PSET 5. 334 00:14:52,440 --> 00:14:54,540 >> Muy bien, así que de nuevo, estoy cortar algunas esquinas. 335 00:14:54,540 --> 00:14:56,831 Para ser justos, probablemente debería pasar unos segundos más 336 00:14:56,831 --> 00:14:58,300 en esta aplicación. 337 00:14:58,300 --> 00:15:01,860 Y yo probablemente no debería burlarse de todo el horas te ponen en el PSET tanto. 338 00:15:01,860 --> 00:15:04,045 Así strtolower es una función. 339 00:15:04,045 --> 00:15:06,670 Algo parecido existencialista en C, al menos por caracteres, 340 00:15:06,670 --> 00:15:08,560 pero PHP mundo tiene una versión cadena entera. 341 00:15:08,560 --> 00:15:11,226 >> Eso va a obligar a todo en minúsculas, que algunos de ustedes 342 00:15:11,226 --> 00:15:14,944 podría haber hecho a lo canonicalize que estaba poniendo en su diccionario. 343 00:15:14,944 --> 00:15:16,360 Y ahora usted puede hacer esto en C, también. 344 00:15:16,360 --> 00:15:17,780 Esto no tiene nada que ver con PHP. 345 00:15:17,780 --> 00:15:20,260 >> Pero cada vez que tiene una condición booleana, 346 00:15:20,260 --> 00:15:22,680 como algo en línea 10 allí, que es sólo 347 00:15:22,680 --> 00:15:27,145 va a evaluar a verdadero o falso, y si tu lo demás claramente 348 00:15:27,145 --> 00:15:33,620 regresa verdadero o falso, lo que pude simplemente realmente hacer esto más sexy 349 00:15:33,620 --> 00:15:38,360 y acaba de hacer algo como esto. 350 00:15:38,360 --> 00:15:40,500 Así que no es mi función de comprobación. 351 00:15:40,500 --> 00:15:42,560 Derecho, si el booleano devuelve un verdadero o un falso, 352 00:15:42,560 --> 00:15:44,630 vamos a regresar inmediatamente. 353 00:15:44,630 --> 00:15:47,340 >> Y hay algunos otros ajustes Yo podría hacer aquí y allá. 354 00:15:47,340 --> 00:15:51,380 Descarga Load--, por cierto, de que está hecho. 355 00:15:51,380 --> 00:15:52,850 No hay nada que hacer allí. 356 00:15:52,850 --> 00:15:55,840 Dado que toda la memoria en PHP y muchos otros idiomas 357 00:15:55,840 --> 00:15:57,570 se gestiona en realidad para usted. 358 00:15:57,570 --> 00:16:00,330 Así que mientras que en C, como que ha aprendido dolorosamente, 359 00:16:00,330 --> 00:16:04,700 cualquier cosa que malloc o calloc o realloc, tienes que liberarte. 360 00:16:04,700 --> 00:16:08,770 Cualquier cosa que usted fopen, tienes que fclose, de modo que los recursos se liberan en última instancia 361 00:16:08,770 --> 00:16:11,690 y herramientas como Valgrind no lo hacen darse cuenta y no se quejan, 362 00:16:11,690 --> 00:16:13,570 lo cual es una buena cosa para correr en ellos. 363 00:16:13,570 --> 00:16:16,190 >> Pero, sin duda, debe haber haber alguna captura, ¿verdad? 364 00:16:16,190 --> 00:16:19,400 De lo contrario, que tipo de desperdiciamos un montón de semanas. 365 00:16:19,400 --> 00:16:23,270 Así que hay una serie de razones razón por la que tomamos este tipo de trayectoria, 366 00:16:23,270 --> 00:16:24,440 pero hay un trade-off. 367 00:16:24,440 --> 00:16:25,820 Cierto, esto ha sido temática. 368 00:16:25,820 --> 00:16:29,690 >> Entonces, ¿qué podría un trade-off aquí en movimiento, de C a PHP? 369 00:16:29,690 --> 00:16:33,250 Se siente como todo a ganar hasta el momento que no sea un poco de la fealdad aquí o allí. 370 00:16:33,250 --> 00:16:34,040 Sí. 371 00:16:34,040 --> 00:16:34,700 Qué es eso? 372 00:16:34,700 --> 00:16:36,064 >> ESTUDIANTE: [inaudible] de memoria. 373 00:16:36,064 --> 00:16:36,980 DAVID J. MALAN: velocidad. 374 00:16:36,980 --> 00:16:37,479 Okay. 375 00:16:37,479 --> 00:16:40,720 Bueno, mi velocidad era bastante rápido. 376 00:16:40,720 --> 00:16:42,020 Derecha? 377 00:16:42,020 --> 00:16:44,320 Pero la velocidad de ejecución del programa? 378 00:16:44,320 --> 00:16:45,580 OK, así que eso es un punto justo. 379 00:16:45,580 --> 00:16:50,930 >> Así que ya que iba a pasar, yo de antemano con claves de hasta tanto mi solución intento, el uno 380 00:16:50,930 --> 00:16:53,510 Yo tenía en el gran tablero era una solución a base de intento, 381 00:16:53,510 --> 00:16:55,510 y yo tengo que en este directorio aquí. 382 00:16:55,510 --> 00:16:58,510 Así que en un momento, puedo seguir adelante y ejecutar esto en la Biblia King James, 383 00:16:58,510 --> 00:16:59,657 golpear Intro. 384 00:16:59,657 --> 00:17:01,990 Y esto es de esperar correcta aplicación al final, 385 00:17:01,990 --> 00:17:05,109 me da tiempo en total de 0,38 segundos para que 386 00:17:05,109 --> 00:17:07,270 un ejemplo un tanto arbitraria. 387 00:17:07,270 --> 00:17:09,270 >> Y si ahora entro en esta segunda ventana de terminal 388 00:17:09,270 --> 00:17:14,569 aquí donde por primera vez abrí gedit, y mucho me voy a code-- de hoy que, de nuevo, 389 00:17:14,569 --> 00:17:19,650 es en este directorio aquí-- y déjame ir adelante y corro ortografía. 390 00:17:19,650 --> 00:17:23,470 Así que para ser claros, esta es la versión de PHP. 391 00:17:23,470 --> 00:17:25,170 Sólo estoy mostrando la parte superior de aquí. 392 00:17:25,170 --> 00:17:32,020 >> Así que si lo hago corrector ortográfico de tilde CS50 PSET 5 textos, King James, entran. 393 00:17:32,020 --> 00:17:39,700 394 00:17:39,700 --> 00:17:43,050 Es aún más rápido que la escritura en C, pero el tiempo total 395 00:17:43,050 --> 00:17:47,650 es, aviso, 0,93, mientras que mi Aplicación basada en C fue 0,38. 396 00:17:47,650 --> 00:17:49,110 Así que es una diferencia no trivial. 397 00:17:49,110 --> 00:17:51,100 >> Y esto es sólo en un solo archivo. 398 00:17:51,100 --> 00:17:53,480 Si se va a ejecutar los dos programas contra el gran tablero 399 00:17:53,480 --> 00:17:56,510 y tienen un montón de entradas probado, este sería sin duda sumar. 400 00:17:56,510 --> 00:18:00,310 Y si tuviéramos conjuntos de datos aún más grandes, esto, también, podría sumar aún más. 401 00:18:00,310 --> 00:18:04,820 Así que sí, el pago de algún precio de velocidad es de hecho el caso. 402 00:18:04,820 --> 00:18:05,470 Qué otra cosa? 403 00:18:05,470 --> 00:18:08,000 404 00:18:08,000 --> 00:18:08,860 ¿Sí? 405 00:18:08,860 --> 00:18:10,340 >> ESTUDIANTE: Cantidad de uso de memoria RAM. 406 00:18:10,340 --> 00:18:11,756 >> DAVID J. MALAN: Cantidad de uso de memoria RAM. 407 00:18:11,756 --> 00:18:15,380 Así que no le di un segundo pensado al escribir este PHP 408 00:18:15,380 --> 00:18:17,300 versión en cuanto a cuánto la memoria que estaba usando. 409 00:18:17,300 --> 00:18:22,080 Estoy completamente aplazando que para PHP en sí y el que escribió ese programa. 410 00:18:22,080 --> 00:18:24,500 Y eso podría estar bien, pero si yo realmente realmente 411 00:18:24,500 --> 00:18:28,420 preocuparse por apretar tanto el rendimiento fuera de mi programa o fuera de mi sitio web 412 00:18:28,420 --> 00:18:31,150 o fuera de cualquier herramienta Estoy construyendo, tal vez 413 00:18:31,150 --> 00:18:33,310 PHP, de hecho, no es el lenguaje correcto. 414 00:18:33,310 --> 00:18:36,330 >> Y, de hecho, es por eso que, para ejemplo, muchos servers-- web 415 00:18:36,330 --> 00:18:38,980 los programas reales que servir hasta content-- web 416 00:18:38,980 --> 00:18:41,810 no están escritos en PHP o en Python o Ruby. 417 00:18:41,810 --> 00:18:44,630 Están escritos, al igual que usted ahora lo hace con juego de parámetros 6, 418 00:18:44,630 --> 00:18:48,120 en C para que pueda exprimir cada bit de rendimiento fuera de él 419 00:18:48,120 --> 00:18:50,780 y realmente ejercer el control de grano fino sobre lo que es 420 00:18:50,780 --> 00:18:52,980 pasando por debajo de la campana y no sólo lo toman 421 00:18:52,980 --> 00:18:54,890 por hecho algunos más alta estructura de datos de nivel. 422 00:18:54,890 --> 00:18:58,071 >> Considere la posibilidad de, después de todo, quien en PHP implementado 423 00:18:58,071 --> 00:19:00,070 esa noción de un hash table-- en realidad es más 424 00:19:00,070 --> 00:19:04,260 apropiadamente llamado array-- asociativo ¿Él o ella tiene alguna idea de qué tipo 425 00:19:04,260 --> 00:19:07,090 de los insumos que van a ser puesta en la estructura? 426 00:19:07,090 --> 00:19:08,260 Así que, obviamente, no es así, ¿verdad? 427 00:19:08,260 --> 00:19:10,340 Es una herramienta genérica en el conjunto de herramientas que está 428 00:19:10,340 --> 00:19:13,430 proporcionada a cualquier persona que quiera para usarlo, y por lo que seguramente se 429 00:19:13,430 --> 00:19:17,680 no puede ser optimizado en última instancia para exactamente lo que quieres hacer. 430 00:19:17,680 --> 00:19:21,180 >> Así que el tiempo de desarrollo del comercio podría offs-- difieren, el rendimiento puede ser diferente, 431 00:19:21,180 --> 00:19:23,120 complejidad o el uso de memoria pueden diferir. 432 00:19:23,120 --> 00:19:24,820 Y así lo que encontrará cada vez más es que hay 433 00:19:24,820 --> 00:19:26,570 va a ser diferente herramientas para el comercio. 434 00:19:26,570 --> 00:19:31,160 Y, de hecho, para una súper mayoría de proyectos finales de las personas de esta clase, 435 00:19:31,160 --> 00:19:34,360 lo creas o no, C no se va siendo la lengua derecho de usar. 436 00:19:34,360 --> 00:19:37,880 >> Y de hecho, uno de los comida para llevar en última instancia, para cualquier clase como esta 437 00:19:37,880 --> 00:19:40,510 es conseguir que piensas, bien, ¿qué debe lograr 438 00:19:40,510 --> 00:19:42,710 cuando la plataforma que desee para resolver algún problema. 439 00:19:42,710 --> 00:19:46,720 Y, de hecho, vamos a cruzar este puente aún más si nos fijamos en más idiomas 440 00:19:46,720 --> 00:19:47,920 incluso más allá de hoy. 441 00:19:47,920 --> 00:19:50,530 >> Así que la transición de dejar ahora a quizás un contexto más familiar 442 00:19:50,530 --> 00:19:52,480 para el uso de un lenguaje como PHP. 443 00:19:52,480 --> 00:19:56,720 Es algo común a utilizar por lo la línea de comandos, escribir guiones 444 00:19:56,720 --> 00:19:59,050 como yo lo hice, pero es mucho, mucho más común. 445 00:19:59,050 --> 00:20:02,350 Y que estaba destinado a ser utilizado en la forma de archivos que normalmente termina 446 00:20:02,350 --> 00:20:05,060 en .php-- pero eso es no un prerequisite-- 447 00:20:05,060 --> 00:20:07,990 que ellos mismos generan contenido web. 448 00:20:07,990 --> 00:20:11,310 >> Así que déjame ir adelante y abrir unos pocos ejemplos I preparados de antemano. 449 00:20:11,310 --> 00:20:15,100 Y estos son en realidad una especie de verdad historias en que una de las primeras cosas 450 00:20:15,100 --> 00:20:18,200 Lo que he hecho a mí mismo después de terminar CS50 y tal vez, creo, 451 00:20:18,200 --> 00:20:21,350 Hace años CS51 es mi compañero y yo estábamos ayudando 452 00:20:21,350 --> 00:20:24,320 para ejecutar el intramural de primer año programa de deportes, que, en el momento, 453 00:20:24,320 --> 00:20:28,610 había estudiante de primer año de registrarse para varios deportes rellenando una hoja de papel, 454 00:20:28,610 --> 00:20:31,800 como se le llamaba, caminando a través del patio a Wigglesworth, 455 00:20:31,800 --> 00:20:34,030 y soltándolo en algunos caída de la puerta del procurador. 456 00:20:34,030 --> 00:20:37,210 Y entonces él o ella iría a través de y luego en realidad envíenos un correo electrónico de forma manual 457 00:20:37,210 --> 00:20:39,140 que nos registramos para un poco de deporte. 458 00:20:39,140 --> 00:20:41,166 >> Así que, claramente, una oportunidad para la mejora. 459 00:20:41,166 --> 00:20:44,040 En estos días, es posible recurrir a solo Google Forms, pero de vuelta en el día, 460 00:20:44,040 --> 00:20:46,914 tuvimos que llegar a esta realidad, el fin de: No fue hasta llegar a ese largo ago-- 461 00:20:46,914 --> 00:20:49,410 para una programación idioma que no fue PHP. 462 00:20:49,410 --> 00:20:51,200 En ese momento, que era algo llamado Perl, 463 00:20:51,200 --> 00:20:52,890 que ha pasado de moda desde entonces. 464 00:20:52,890 --> 00:20:54,160 Pero la idea es la misma. 465 00:20:54,160 --> 00:20:58,940 >> Y esencialmente senté a tratar al puerto va versiones de Perl a PHP, 466 00:20:58,940 --> 00:21:03,710 pero en pleno descargo de responsabilidad, no dio cualquier pensamiento a la estética por el momento. 467 00:21:03,710 --> 00:21:04,960 Así que aquí está una página web. 468 00:21:04,960 --> 00:21:05,670 Este es un archivo. 469 00:21:05,670 --> 00:21:09,470 Si Zoom hacia dentro, su parecer llamado froshim0.php 470 00:21:09,470 --> 00:21:12,060 sólo porque es nuestro primer ejemplo de esta serie. 471 00:21:12,060 --> 00:21:15,970 Y darse cuenta de que tiene lo que parece ser un formulario HTML muy feo, 472 00:21:15,970 --> 00:21:18,680 pero es una forma interesante porque permite 473 00:21:18,680 --> 00:21:21,910 me proporciono la entrada del usuario en el navegador. 474 00:21:21,910 --> 00:21:27,730 >> Ahora la última vez cuando tuvimos un formulario, a quien nos sometemos nuestro parámetro de consulta, 475 00:21:27,730 --> 00:21:30,450 el parámetro de cola como se llamaba? 476 00:21:30,450 --> 00:21:31,330 Así que para Google, ¿no? 477 00:21:31,330 --> 00:21:34,090 Estamos totalmente despejó en la idea de hacer nada con esa entrada. 478 00:21:34,090 --> 00:21:36,160 >> Pero hoy, comenzamos la producción de salida. 479 00:21:36,160 --> 00:21:39,420 Y el comportamiento voy a ver aquí inicialmente es bastante trivial. 480 00:21:39,420 --> 00:21:42,980 David, voy a comprobar fuera de género aquí, decir Matthews aquí. 481 00:21:42,980 --> 00:21:43,800 No voy a ser capitán. 482 00:21:43,800 --> 00:21:45,410 Voy a haga clic en Registrar. 483 00:21:45,410 --> 00:21:50,720 Y darse cuenta de que la dirección URL tiene cambiado para registrar-0.php, 484 00:21:50,720 --> 00:21:52,310 y luego está este texto feo aquí. 485 00:21:52,310 --> 00:21:54,460 Me dio ningún pensamiento a el formato de este. 486 00:21:54,460 --> 00:21:59,900 >> Pero lo que es interesante es que tres valores aparentemente se pasaron en. 487 00:21:59,900 --> 00:22:02,960 Esta es una especie de de PHP equivalente a printf-- 488 00:22:02,960 --> 00:22:06,330 vamos a ver lo que realmente llama en un bit-- que sólo imprime 489 00:22:06,330 --> 00:22:08,300 lo que ha pasado en ella. 490 00:22:08,300 --> 00:22:11,414 Así que esto sugiere que esa forma tenido al menos tres campos a la misma, 491 00:22:11,414 --> 00:22:12,580 y me viste los escribe en. 492 00:22:12,580 --> 00:22:15,739 Uno de ellos era mi nombre, una era género, uno era el dormitorio. 493 00:22:15,739 --> 00:22:18,780 Y el capitán ni siquiera son enviadas a el servidor debido a que no comprobarlo. 494 00:22:18,780 --> 00:22:22,150 >> Así que esto es para decir al parecer, al momento de enviar las cosas en la web, 495 00:22:22,150 --> 00:22:26,830 No sólo la URL veces change-- a veces no es así. 496 00:22:26,830 --> 00:22:30,330 De hecho, el nombre del archivo ha cambiado, pero lo que está ausente de la URL 497 00:22:30,330 --> 00:22:32,861 que vimos la última vez con Google. 498 00:22:32,861 --> 00:22:33,360 ¿Sí? 499 00:22:33,360 --> 00:22:34,380 >> ESTUDIANTE: Sin cadena de consulta 500 00:22:34,380 --> 00:22:35,220 >> DAVID J. MALAN: No hay cadena de consulta. 501 00:22:35,220 --> 00:22:37,270 No hay signo de interrogación algo. 502 00:22:37,270 --> 00:22:40,050 No hay signo de interrogación q es igual a los gatos, como lo hicimos la última vez. 503 00:22:40,050 --> 00:22:42,170 Y ciertamente no hay nombre de signo de interrogación es igual a 504 00:22:42,170 --> 00:22:46,310 David o dormitorio es igual a Matthews, Entonces, ¿dónde es que todos vamos? 505 00:22:46,310 --> 00:22:51,290 >> Bueno, déjame volver a gedit aquí y abrir el primero de esos archivos 506 00:22:51,290 --> 00:22:57,020 en mi host virtual, host local, público directorio de aquí y vete a froshim0. 507 00:22:57,020 --> 00:23:02,060 Así que resulta que casi todos de esta página es sólo HTML. 508 00:23:02,060 --> 00:23:05,410 Y esto podría ser desconocida para usted, pero pronto lo será más aún con PSET 6 509 00:23:05,410 --> 00:23:07,370 y PSET 7 y 8 PSET. 510 00:23:07,370 --> 00:23:09,160 Pero esto es sólo una página HTML. 511 00:23:09,160 --> 00:23:12,400 >> Y las cosas interesantes parece ser aquí. 512 00:23:12,400 --> 00:23:16,290 Una etiqueta de formulario cuyo atributo acción tiene un valor de registro 0. 513 00:23:16,290 --> 00:23:18,890 Es por eso que cuando me someto esto, que va a ese archivo. 514 00:23:18,890 --> 00:23:20,620 Pero el método es diferente puesto de hoy--. 515 00:23:20,620 --> 00:23:23,120 Así que resulta que hay al menos dos métodos utilizados en la web 516 00:23:23,120 --> 00:23:24,911 para enviar información desde el navegador al servidor. 517 00:23:24,911 --> 00:23:25,980 Get pone en la URL. 518 00:23:25,980 --> 00:23:27,950 Publicar la pone en otro lugar. 519 00:23:27,950 --> 00:23:30,570 Y cuándo y por qué podría usted realmente quiere un sitio web 520 00:23:30,570 --> 00:23:34,110 utilizar puesto entonces en vez de obtener, sólo intuitivamente? 521 00:23:34,110 --> 00:23:37,080 Cualquier sitio web. 522 00:23:37,080 --> 00:23:42,010 ¿Qué tipo de datos debe ser transmitida sólo por inferencia ahora por correo en lugar 523 00:23:42,010 --> 00:23:45,184 para conseguir, si hemos visto las dos diferencias? 524 00:23:45,184 --> 00:23:46,350 ESTUDIANTE: [inaudible] asegurar. 525 00:23:46,350 --> 00:23:47,790 DAVID J. MALAN: Si quieres algo que sea seguro. 526 00:23:47,790 --> 00:23:50,360 Así que puede que escriba una contraseña en un sitio web, una tarjeta de crédito 527 00:23:50,360 --> 00:23:53,030 en un sitio web lo haría tipo de estos subóptima 528 00:23:53,030 --> 00:23:56,220 si el navegador puesto que valor dentro de la URL. 529 00:23:56,220 --> 00:23:57,680 ¿Por qué? 530 00:23:57,680 --> 00:24:00,059 Lo ves, lo que no hace parecen ser una cosa muy importante, 531 00:24:00,059 --> 00:24:03,350 pero las probabilidades son que bastante frecuencia camina lejos de su equipo informático o uso 532 00:24:03,350 --> 00:24:05,310 laboratorios, y por lo que alguien otra cosa o incluso un compañero de piso 533 00:24:05,310 --> 00:24:08,220 podría fácilmente subir y ver que la información privada. 534 00:24:08,220 --> 00:24:10,220 Cuando se envía un correo electrónico a través de la web, es probable que 535 00:24:10,220 --> 00:24:12,350 no quiero ese final de datos en la URL también. 536 00:24:12,350 --> 00:24:15,266 Y por lo que hay una serie de razones por qué podríamos querer ponerlo aquí. 537 00:24:15,266 --> 00:24:18,610 Y justo photos--, no puedo incluso bastante imaginar lo que tomaría un gráfico, 538 00:24:18,610 --> 00:24:21,480 como un archivo JPEG, y lo puso en una dirección URL. 539 00:24:21,480 --> 00:24:22,330 Usted podría hacerlo. 540 00:24:22,330 --> 00:24:25,840 Hay maneras de que lo codifica, pero es no sencillo como eso. 541 00:24:25,840 --> 00:24:29,030 >> Así que el registro 0 es en realidad muy decepcionante. 542 00:24:29,030 --> 00:24:31,610 Todo lo que dice literalmente es esto. 543 00:24:31,610 --> 00:24:35,910 Se imprime en el interior de algunos HTML etiquetas lo siguiente. 544 00:24:35,910 --> 00:24:38,640 Tengo una etiqueta PHP aquí anidada dentro de una etiqueta pre. 545 00:24:38,640 --> 00:24:42,300 "Pre" sólo significa que el texto pre-formateado, mono-espaciadas, como una máquina de escribir. 546 00:24:42,300 --> 00:24:44,836 >> Printr es una función recursiva de impresión. 547 00:24:44,836 --> 00:24:46,710 Y luego está esto Lo interesante aquí. 548 00:24:46,710 --> 00:24:48,835 Y vamos a volver a este porque hay otros, 549 00:24:48,835 --> 00:24:51,140 pero el signo de dólar de subrayado puesto que parece ser 550 00:24:51,140 --> 00:24:56,110 una variable en PHP en el que cualquier cosa que envíe desde el navegador al servidor 551 00:24:56,110 --> 00:24:58,040 se almacena para usted. 552 00:24:58,040 --> 00:25:00,930 Y vamos a ver cómo conseguir a que la información en poco tiempo. 553 00:25:00,930 --> 00:25:04,000 >> Pero primero, vamos a volver a Un ejemplo ligeramente diferente. 554 00:25:04,000 --> 00:25:09,050 Al entrar en register-- o más bien, froshims1.php, 555 00:25:09,050 --> 00:25:10,470 que se ve un poco diferente. 556 00:25:10,470 --> 00:25:12,670 Tomé un poco más esfuerzo con el formato, 557 00:25:12,670 --> 00:25:14,370 a pesar de que aún así es bastante feo. 558 00:25:14,370 --> 00:25:16,990 Pero yo voy a seguir adelante y el tipo de "David" ahora. 559 00:25:16,990 --> 00:25:17,850 Masculino. 560 00:25:17,850 --> 00:25:19,360 Comprobaremos "capitán" esta vez. 561 00:25:19,360 --> 00:25:20,660 Haremos Matthews. 562 00:25:20,660 --> 00:25:22,430 Y registrar. 563 00:25:22,430 --> 00:25:24,110 >> Y esta vez, dice, hm, no realmente. 564 00:25:24,110 --> 00:25:26,180 Muy bien, así que lo del registro 1? 565 00:25:26,180 --> 00:25:30,509 Déjame ir en el registro abierto 1 hm y-. 566 00:25:30,509 --> 00:25:32,300 Muy bien, así que esto es interesante, y este 567 00:25:32,300 --> 00:25:34,880 es un paso hacia la ahora los programas más interesantes. 568 00:25:34,880 --> 00:25:38,970 >> Observe la parte superior de este archivo tiene un Etiqueta PHP, así como algunos comentarios. 569 00:25:38,970 --> 00:25:42,590 Y estos son, por ahora, una distracción así que vamos a deshacerse de esos comentarios 570 00:25:42,590 --> 00:25:47,070 justo como si estuvieran en C. Y afirman con este trozo de código con un comentario 571 00:25:47,070 --> 00:25:49,280 que este código es la validación de la presentación. 572 00:25:49,280 --> 00:25:51,690 >> Bueno, resulta que variables como el signo de dólar 573 00:25:51,690 --> 00:25:53,739 puesto de relieve son llamado súper globales. 574 00:25:53,739 --> 00:25:55,530 Son como estos variables globales especiales 575 00:25:55,530 --> 00:25:58,840 que son sólo omni-actualmente disponible dentro de su programa. 576 00:25:58,840 --> 00:26:03,870 Y usted puede utilizar la notación de corchetes al índice en ellos no usando números 577 00:26:03,870 --> 00:26:07,460 como 0, 1, 2, 3, pero las palabras reales. 578 00:26:07,460 --> 00:26:12,100 >> Así que usted puede pensar en el signo de dólar subrayar puesto como tipo de una tabla hash 579 00:26:12,100 --> 00:26:15,920 que usted podría pasar una llave en, una búsqueda palabra en el medio de los corchetes, 580 00:26:15,920 --> 00:26:19,370 y que va a darle la espalda al valor que proporciona realmente el usuario. 581 00:26:19,370 --> 00:26:21,210 PHP tiene una función llamado vacío que sólo 582 00:26:21,210 --> 00:26:23,720 dice sí o no, esta variable está vacía o no. 583 00:26:23,720 --> 00:26:27,250 Tenemos estas dobles barras, que sólo significa o, como en C. 584 00:26:27,250 --> 00:26:31,740 >> Así pues, en efecto, esta línea 4 es sólo diciendo que si el usuario no ha dado un nombre 585 00:26:31,740 --> 00:26:36,540 o no dar un género o no lo hizo dar un dormitorio, seguir adelante y le redirigirá 586 00:26:36,540 --> 00:26:38,184 o ella a través de esta línea aquí. 587 00:26:38,184 --> 00:26:40,600 Así que esto es un poco críptico, pero esto sólo significa literalmente 588 00:26:40,600 --> 00:26:43,330 volver a este lugar, por lo que el usuario punts 589 00:26:43,330 --> 00:26:45,420 de nuevo a donde él o ella venía. 590 00:26:45,420 --> 00:26:47,880 Pero es un poco poco elegante en que yo no modificable ella. 591 00:26:47,880 --> 00:26:52,150 >> Pero lo que si esta condición si no evalúa a cierto? 592 00:26:52,150 --> 00:26:55,790 ¿Qué pasa si el usuario me dio su o su nombre y residencia y el sexo? 593 00:26:55,790 --> 00:26:58,540 Que si la condición no es va a evaluar como true, 594 00:26:58,540 --> 00:27:00,650 así que no me golpeé la salida en la línea 7. 595 00:27:00,650 --> 00:27:01,680 Entonces, ¿qué sucede? 596 00:27:01,680 --> 00:27:03,880 Y esto es lo que hay interesante sobre PHP. 597 00:27:03,880 --> 00:27:07,470 >> Usted puede caer dentro y fuera de modo PHP, por así decirlo. 598 00:27:07,470 --> 00:27:10,985 Si quieres algo de código a ejecutar, puede abrir y cerrar una etiqueta PHP 599 00:27:10,985 --> 00:27:13,010 y poner el código allí como he hecho aquí. 600 00:27:13,010 --> 00:27:16,810 Tan pronto como se cierra la etiqueta PHP, el servidor 601 00:27:16,810 --> 00:27:19,407 sólo va a escupir lo que puso en su lugar. 602 00:27:19,407 --> 00:27:21,740 Y, de hecho, esto era parte de el diseño original de PHP, 603 00:27:21,740 --> 00:27:25,280 para bien o para mal, era esto commingling de código y marcado 604 00:27:25,280 --> 00:27:25,920 idioma. 605 00:27:25,920 --> 00:27:28,670 Y veremos que esta muy recae rápidamente en un lío. 606 00:27:28,670 --> 00:27:31,280 Y así lo haremos mejor que esta última instancia, pero sólo 607 00:27:31,280 --> 00:27:35,620 cuenta de la facilidad con la que estoy en realidad capaz de ejecutar alguna lógica. 608 00:27:35,620 --> 00:27:37,440 >> Pero sigue siendo un poco decepcionante. 609 00:27:37,440 --> 00:27:41,210 Vamos a abrir la versión dos de Frosh mensajes instantáneos, que 610 00:27:41,210 --> 00:27:44,270 al parecer, se somete a register2.php. 611 00:27:44,270 --> 00:27:47,600 Así que este archivo en realidad va para mirar casi el mismo. 612 00:27:47,600 --> 00:27:50,780 Voy a ir a Frosh mensajes instantáneos 2. 613 00:27:50,780 --> 00:27:53,050 Pero en Frosh IMs 2, vamos a ver qué pasa. 614 00:27:53,050 --> 00:27:58,110 >> David, haga clic en el botón de radio, como que se llama; Matthews, ningún capitán. 615 00:27:58,110 --> 00:27:59,230 Registrar. 616 00:27:59,230 --> 00:28:00,130 Usted está registrado. 617 00:28:00,130 --> 00:28:00,700 En realidad no. 618 00:28:00,700 --> 00:28:02,574 Oh, espera, que acabamos de hacer ese ejemplo, no lo hicimos nosotros? 619 00:28:02,574 --> 00:28:04,520 Muy bien, se destacan por. 620 00:28:04,520 --> 00:28:06,602 Vamos a hacer los tres. 621 00:28:06,602 --> 00:28:08,560 Es evidente que algo está a punto a pasar con Gmail. 622 00:28:08,560 --> 00:28:09,600 Vamos a llegar allí. 623 00:28:09,600 --> 00:28:11,900 >> Así Frosh mensajes instantáneos 3 se parece a esto. 624 00:28:11,900 --> 00:28:13,050 No es diferente. 625 00:28:13,050 --> 00:28:19,850 Pero cuando lo hago David, varón, Matthews, y inscribirse, esta tercera y última versión 626 00:28:19,850 --> 00:28:22,230 reclamaciones, simplemente, que están registrados realmente. 627 00:28:22,230 --> 00:28:23,560 En cierto modo es irrelevante. 628 00:28:23,560 --> 00:28:25,600 Pero yo pretendo con este tercera y última versión 629 00:28:25,600 --> 00:28:30,610 Ahora he recreado exactamente lo que mi compañero y yo construido para los mensajes instantáneos Frosh 630 00:28:30,610 --> 00:28:31,731 Hace años del programa. 631 00:28:31,731 --> 00:28:32,480 Y fue simple. 632 00:28:32,480 --> 00:28:34,330 No había ninguna base de datos, ninguna hoja de cálculo Excel. 633 00:28:34,330 --> 00:28:36,450 Pero lo más importante, no había más papel 634 00:28:36,450 --> 00:28:42,520 porque lo que hicimos con este programa fue a un correo electrónico en realidad el supervisor, quien 635 00:28:42,520 --> 00:28:44,530 recibía previamente estas cosas a través de las formas. 636 00:28:44,530 --> 00:28:48,890 >> Y al parecer hemos programado esta en de tal manera que cuando una persona se registra, 637 00:28:48,890 --> 00:28:52,470 Mensajes de correo electrónico de la cuenta de John Harvard el proctor-- o a sí mismo en este caso, 638 00:28:52,470 --> 00:28:55,960 John Harvard-- con la siguiente texto-- "Esta persona acaba de registrar." 639 00:28:55,960 --> 00:29:00,560 Nombre es David, el capitán está en blanco; género, masculino; y dormitorio, de Matthews. 640 00:29:00,560 --> 00:29:01,560 >> Entonces, ¿qué pasó allí? 641 00:29:01,560 --> 00:29:05,360 Bueno, el archivo en cuestión aquí es aparentemente register3.php. 642 00:29:05,360 --> 00:29:09,080 Y si abro esta, verás tanto el poder del código como este 643 00:29:09,080 --> 00:29:12,380 y también, francamente, la inseguridad de un sistema como el correo electrónico. 644 00:29:12,380 --> 00:29:16,290 He pretendido simplemente eficazmente a sea ​​John Harvard de la siguiente manera. 645 00:29:16,290 --> 00:29:20,920 >> Tengo la etiqueta php abierto encima de la tapa, que sólo dice aquí viene algo de código PHP. 646 00:29:20,920 --> 00:29:23,155 Aquí abajo, resulta que hay son las bibliotecas de PHP. 647 00:29:23,155 --> 00:29:26,410 Uno no necesita incluir archivos de cabecera como mucho. 648 00:29:26,410 --> 00:29:28,900 Usted obtiene más con el fregadero de la cocina, por así decirlo. 649 00:29:28,900 --> 00:29:31,820 >> Pero esta vez en la línea 4, que hago querer biblioteca especial llamado 650 00:29:31,820 --> 00:29:36,087 Mailer PHP, que es algo que puede instalar de forma gratuita en muchos sistemas. 651 00:29:36,087 --> 00:29:37,920 Aquí abajo estoy validando la presentación sólo 652 00:29:37,920 --> 00:29:40,540 comprobando dio el usuario mí un nombre, un género y un dormitorio. 653 00:29:40,540 --> 00:29:44,130 Y si es así, adelante, una instancia de un anuncio publicitario. 654 00:29:44,130 --> 00:29:47,020 >> Usted puede pensar en esto como un línea de código que sólo asigna. 655 00:29:47,020 --> 00:29:48,950 Es como malloc, pero que es un poco más sexy 656 00:29:48,950 --> 00:29:51,790 en que no se menciona sólo malloc y algunos número genérico. 657 00:29:51,790 --> 00:29:55,030 Usted dice que me dé uno de estos, dame un nuevo uno de estos. 658 00:29:55,030 --> 00:29:57,950 >> Y si usted ha programado en Java o C ++ u otros lenguajes, 659 00:29:57,950 --> 00:29:59,130 que podría haber visto esto. 660 00:29:59,130 --> 00:30:01,840 Sin embargo, el corto de él, si desconocido, esta línea 661 00:30:01,840 --> 00:30:05,410 pone en el correo signo de dólar una estructura especial llamada 662 00:30:05,410 --> 00:30:08,731 un objeto que se ha incorporado en funcionalidad de correo electrónico. 663 00:30:08,731 --> 00:30:10,355 Y, de hecho, cuenta y sintaxis similar. 664 00:30:10,355 --> 00:30:11,900 >> Esto no es un puntero, per se. 665 00:30:11,900 --> 00:30:13,990 PHP sólo utiliza la misma sintaxis. 666 00:30:13,990 --> 00:30:17,660 Esta línea está diciendo uso SMTP-- Simple Mail Transfer 667 00:30:17,660 --> 00:30:20,900 Protocolo, que es sólo el protocolo utilizado para enviar correo. 668 00:30:20,900 --> 00:30:24,240 Esta es la especificación de uso El servidor SMTP de Harvard, que 669 00:30:24,240 --> 00:30:25,830 es en algún lugar aquí en el campus. 670 00:30:25,830 --> 00:30:28,480 >> Esto está diciendo lo que TCP el número de puerto con quien hablar, 671 00:30:28,480 --> 00:30:31,650 y me imaginé que fuera por googlear o pidiendo la mesa de ayuda. 672 00:30:31,650 --> 00:30:34,640 Y luego porque Harvard utiliza algunos la seguridad del sistema en el server-- electrónico 673 00:30:34,640 --> 00:30:37,060 al menos para cifrar el tráfico entre usted y él, 674 00:30:37,060 --> 00:30:41,380 a pesar de que cualquier persona puede enviar a it-- Voy a encender el protocolo TLS 675 00:30:41,380 --> 00:30:42,710 para mantener este seguro. 676 00:30:42,710 --> 00:30:44,730 >> Pero aquí es donde las cosas conseguir un poco de miedo. 677 00:30:44,730 --> 00:30:47,970 Puedo sólo arbitrariamente decir que soy jharvard, 678 00:30:47,970 --> 00:30:51,930 y puedo sólo arbitrariamente un correo electrónico a mí mismo aquí. 679 00:30:51,930 --> 00:30:55,650 Y entonces puedo especificar un sujeto con esta línea aquí. 680 00:30:55,650 --> 00:30:58,460 >> Y esto sólo se ve feo, pero es sólo un montón de concatenación. 681 00:30:58,460 --> 00:31:04,480 Resulta que PHP tiene un símbolo muy útil, al igual que algunos idiomas, el operador punto, 682 00:31:04,480 --> 00:31:07,340 que concatena sólo, literalmente, cadena tras cadena tras cadena, 683 00:31:07,340 --> 00:31:09,810 y usted no tiene que malloc o figura la longitud total de la cadena. 684 00:31:09,810 --> 00:31:10,820 Usted acaba de hacerlo. 685 00:31:10,820 --> 00:31:15,220 Y, de hecho, porque estoy concatenando en todas estas cosas con estos puntos, 686 00:31:15,220 --> 00:31:18,330 es por eso que el correo electrónico que enviado miraban como lo hizo. 687 00:31:18,330 --> 00:31:20,610 >> Y luego, por último aquí, yo estoy enviando correo. 688 00:31:20,610 --> 00:31:22,580 Así que si esto es falso, Yo sólo voy a morir, 689 00:31:22,580 --> 00:31:25,680 que es una función que sólo impresiones a la pantalla de algún mensaje de error. 690 00:31:25,680 --> 00:31:29,170 Pero es, de hecho, llamando a la función de envío. 691 00:31:29,170 --> 00:31:31,780 De lo contrario, si todo esto falla, me vuelve a dirigir aquí. 692 00:31:31,780 --> 00:31:34,050 >> Y ¿por qué veo que Yo realmente estoy registrado? 693 00:31:34,050 --> 00:31:36,110 Bueno, sucedió aquí. 694 00:31:36,110 --> 00:31:38,170 Así que les traigo esto para un par de razones. 695 00:31:38,170 --> 00:31:41,542 >> Uno, este es exactamente como si construyes un sitio web para un proyecto final 696 00:31:41,542 --> 00:31:44,000 o para el mundo real, esto es la forma de enviar recordatorios por correo electrónico 697 00:31:44,000 --> 00:31:45,924 a sus clientes o sus suscriptores. 698 00:31:45,924 --> 00:31:47,590 Esta es la forma de enviar los recordatorios de contraseña. 699 00:31:47,590 --> 00:31:50,760 Esta es la forma de enviar mensajes de personas que tienen un nuevo Facebook 700 00:31:50,760 --> 00:31:52,990 mensaje pendiente o algo por el estilo. 701 00:31:52,990 --> 00:31:55,010 >> Pero también habla el hecho de que esto podría 702 00:31:55,010 --> 00:31:58,160 han sido muy bien desde Davin o cualquier otra persona. 703 00:31:58,160 --> 00:32:00,567 Y digo este tipo de con una sonrisa porque soy 704 00:32:00,567 --> 00:32:03,400 muy seguro de lo que está pasando a través de varios de sus mentes en este momento. 705 00:32:03,400 --> 00:32:11,910 Pero este es uno de los que lo hacen como yo digo, no lo que hago tipo de cosas, 706 00:32:11,910 --> 00:32:14,480 porque es trivial forjar correos electrónicos como este. 707 00:32:14,480 --> 00:32:16,480 Pero como usted pudo haber visto o leer en el carmesí, 708 00:32:16,480 --> 00:32:18,271 en los últimos tiempos es también bastante trivial para la gente 709 00:32:18,271 --> 00:32:20,050 para rastrear de nuevo a algún origen. 710 00:32:20,050 --> 00:32:23,790 Y me pregunte algún tiempo, tal vez en el almuerzo CS50, cómo yo primero 711 00:32:23,790 --> 00:32:27,080 se familiarizaron muy de cerca casi a la Junta ed muchos años 712 00:32:27,080 --> 00:32:30,890 hace cuando descubrí cómo funcionaba el internet. 713 00:32:30,890 --> 00:32:36,940 Así que en cualquier caso-- ligeramente después de que el consejo hizo ed. 714 00:32:36,940 --> 00:32:42,300 >> Así, en cualquier caso, hay una todo grupo de súper globales, 715 00:32:42,300 --> 00:32:45,960 como se les llama aquí, uno de los cuales nos saw-- puesto dólar signo de subrayado. 716 00:32:45,960 --> 00:32:49,530 Hay una contraparte llamada get, que es donde las cosas desde una URL 717 00:32:49,530 --> 00:32:50,690 termina yendo. 718 00:32:50,690 --> 00:32:54,051 Y hay un montón de otros, también-- sesión y el servidor y la galleta. 719 00:32:54,051 --> 00:32:55,800 Volveremos a la galleta en otro momento, 720 00:32:55,800 --> 00:33:01,340 pero la sesión es una especie de fresco porque justo ahora-- hasta ahora-- 721 00:33:01,340 --> 00:33:06,350 todo lo que he hecho con un navegador web es una especie de apátrida, por así decirlo. 722 00:33:06,350 --> 00:33:10,060 Puedo hacer clic en torno, el acceso archivos en el servidor, algo 723 00:33:10,060 --> 00:33:13,500 que sucede en la pantalla, pero a continuación, la conexión se cierra. 724 00:33:13,500 --> 00:33:17,450 El Internet Explorer o el Firefox icono deja de girar 725 00:33:17,450 --> 00:33:20,340 y que acaba de ver lo que que la página web contiene. 726 00:33:20,340 --> 00:33:23,530 >> Así que HTTP no tiene estado en que una vez que se hace una conexión, 727 00:33:23,530 --> 00:33:25,050 obtiene algunos datos, eso es todo. 728 00:33:25,050 --> 00:33:29,940 No hay más conexiones, a diferencia de Skype, a diferencia de Facetime, Gchat diferencia, que 729 00:33:29,940 --> 00:33:32,180 mantiene una constante conexión con el servidor. 730 00:33:32,180 --> 00:33:34,650 La web es fundamentalmente desconectado, a pesar de que va a 731 00:33:34,650 --> 00:33:36,630 ver en poco tiempo cómo podemos simular cosas 732 00:33:36,630 --> 00:33:39,300 como el chat de Facebook y Gchat, que mantienen la illusion-- 733 00:33:39,300 --> 00:33:41,680 o en realidad hacer mantener un constante conexión utilizando 734 00:33:41,680 --> 00:33:43,270 la tecnología más moderna. 735 00:33:43,270 --> 00:33:49,000 >> Pero si voy a, digamos, counter.php, este es otro ejemplo sencillo, 736 00:33:49,000 --> 00:33:52,700 como veremos, que piensa en la actualidad Visité el sitio el tiempo cero. 737 00:33:52,700 --> 00:33:56,790 Pero si simplemente recargar la página, de alguna manera sabe que estuve aquí antes. 738 00:33:56,790 --> 00:33:58,840 Si vuelvo a cargar de nuevo, sabe que estuve aquí antes. 739 00:33:58,840 --> 00:34:01,100 Y una y otra vez y otra vez y otra vez. 740 00:34:01,100 --> 00:34:03,610 >> Así que hay un poco más-plussing pasando, pero aviso 741 00:34:03,610 --> 00:34:07,090 la cosita gira siempre tan brevemente hasta la parte superior y luego se desconecta, 742 00:34:07,090 --> 00:34:11,179 por lo que no es como si tuviera una constante conexión a mi aparato. 743 00:34:11,179 --> 00:34:16,929 Bueno, si voy en counter.php, cuenta lo fácil que es. 744 00:34:16,929 --> 00:34:19,080 Yo llamo a esta primera especial función que vamos pronto 745 00:34:19,080 --> 00:34:21,513 empezar a tomar por sentado llamado inicio de la sesión. 746 00:34:21,513 --> 00:34:22,179 Iniciar una sesión. 747 00:34:22,179 --> 00:34:25,095 >> Y una sesión de ahora en adelante es sólo va a ser un cubo, como un carrito 748 00:34:25,095 --> 00:34:28,120 carrito en el que usted puede poner los valores y el tipo de confianza como programador 749 00:34:28,120 --> 00:34:31,590 que ellos van a estar aquí cuando ese usuario viene una segunda parte posterior-- 750 00:34:31,590 --> 00:34:35,670 más tarde, una hora más tarde, incluso un año más tarde, siempre y cuando él o ella no se borra 751 00:34:35,670 --> 00:34:37,602 sus galletas, como veremos con el tiempo vemos. 752 00:34:37,602 --> 00:34:39,310 Y ahora sólo tengo si una condición aquí. 753 00:34:39,310 --> 00:34:44,679 Así que si la clave siguiente, llamado contador, está situada en el interior 754 00:34:44,679 --> 00:34:49,210 de este super global-- este hash mesa, si Voluntad-- llamado período de sesiones, 755 00:34:49,210 --> 00:34:53,350 a continuación, seguir adelante y tomar la valor de la reflexión session-- 756 00:34:53,350 --> 00:34:55,250 en esto como un carrito cart-- y almacenarlo 757 00:34:55,250 --> 00:34:57,680 en una variable temporal llamada contador. 758 00:34:57,680 --> 00:35:02,240 >> De lo contrario, si ese valor era contador no se establece en la llamada cesta de la compra, 759 00:35:02,240 --> 00:35:04,430 sólo inicializar a 0. 760 00:35:04,430 --> 00:35:09,830 Por último, aquí abajo, ir y volver a poner en los carros de la compra o de la sesión 761 00:35:09,830 --> 00:35:13,000 el valor del contador 1. 762 00:35:13,000 --> 00:35:16,730 Así que resulta que esta aquí-- especial contenedor 763 00:35:16,730 --> 00:35:20,355 que, de nuevo, es uno de ellos asociado matrices, una matriz que usted puede indexar 764 00:35:20,355 --> 00:35:25,010 en palabras en lugar de numbers-- persiste incluso después de que el usuario se va. 765 00:35:25,010 --> 00:35:26,510 Una vez más, voy a ir de nuevo a la página ahora. 766 00:35:26,510 --> 00:35:28,400 Ha sido un minuto más o menos. 767 00:35:28,400 --> 00:35:31,300 Pero recuerda que yo tengo estado aquí 19 veces antes. 768 00:35:31,300 --> 00:35:32,740 Este es mi 20mo visita. 769 00:35:32,740 --> 00:35:36,560 >> Y por lo que este va a ser clave para la implementación de cualquier sitio web que recuerda 770 00:35:36,560 --> 00:35:40,640 que está conectado, que se pone algo literal en su carrito de compras 771 00:35:40,640 --> 00:35:43,902 para comprar o que tiene alguna número de mensajes en espera. 772 00:35:43,902 --> 00:35:45,610 Cada vez que desee recordar la información, 773 00:35:45,610 --> 00:35:48,130 veremos que PHP, como varios otros idiomas, 774 00:35:48,130 --> 00:35:53,640 nos provee de esta ilusión de estado a pesar de que, como se verá en PSET 6, 775 00:35:53,640 --> 00:35:57,642 como usted está haciendo peticiones HTTP desde el cliente al servidor, eso es todo. 776 00:35:57,642 --> 00:35:59,850 Una vez que llegue de nuevo que respuesta, no hay nada más 777 00:35:59,850 --> 00:36:01,790 regresando desde el servidor de forma predeterminada. 778 00:36:01,790 --> 00:36:03,820 Pero vamos a ver cómo trabajar alrededor de eso. 779 00:36:03,820 --> 00:36:07,430 >> Bueno, ahora, vamos a tratar de limpiar esto un poco. 780 00:36:07,430 --> 00:36:09,470 Hemos visto unos pocos diferentes ejemplos allí. 781 00:36:09,470 --> 00:36:12,250 Ah, y como un aparte, para los que están familiarizados o no familiar, 782 00:36:12,250 --> 00:36:14,230 la razón de que la Ejemplo Frosh mensajes instantáneos se fue 783 00:36:14,230 --> 00:36:18,060 de mirar realmente feo para slightly-- bien, 784 00:36:18,060 --> 00:36:23,160 todavía ugly-- a ligeramente menos feo aunque todavía feo 785 00:36:23,160 --> 00:36:25,230 es porque si miramos en el código fuente aquí, 786 00:36:25,230 --> 00:36:28,240 resulta que tengo este en la parte superior del archivo. 787 00:36:28,240 --> 00:36:32,570 >> Resulta que de arranque es uno de los muchos bibliotecas libremente disponibles por ahí 788 00:36:32,570 --> 00:36:37,140 que no existe para los lenguajes de programación siempre, pero para CSS o JavaScript 789 00:36:37,140 --> 00:36:39,190 o HTML o cualquier número de idiomas. 790 00:36:39,190 --> 00:36:42,160 >> Y estas personas aquí-- originalmente salió 791 00:36:42,160 --> 00:36:44,730 de Twitter-- sólo tienen un montón de estilos. 792 00:36:44,730 --> 00:36:47,360 Es un archivo masivo aquí que alguien escribió, 793 00:36:47,360 --> 00:36:51,020 o de alguien escribió, con el tiempo que especifica los colores y el formato 794 00:36:51,020 --> 00:36:53,740 y otras cosas para que yo pueda tipo de pedir prestado su sintaxis 795 00:36:53,740 --> 00:36:56,157 y no tener que averiguar cómo diseñar mi forma. 796 00:36:56,157 --> 00:36:57,990 Esto también se minified de manera que una computadora puede 797 00:36:57,990 --> 00:37:00,560 entenderlo pero no necesariamente un ser humano. 798 00:37:00,560 --> 00:37:03,050 Así que eso es sólo por eso que el estilización no cambió. 799 00:37:03,050 --> 00:37:05,450 >> Pero ahora vamos a hacer mejor en términos de diseño, 800 00:37:05,450 --> 00:37:07,490 porque si nos quedamos abajo este camino demasiado largo, 801 00:37:07,490 --> 00:37:11,290 nuestro código va a conseguir sucio y desordenado. 802 00:37:11,290 --> 00:37:13,040 Así que vamos a centrarnos en estos ejemplos aquí. 803 00:37:13,040 --> 00:37:15,090 La última por hoy. 804 00:37:15,090 --> 00:37:18,720 >> Así que aquí es un super sencillo la versión 1.0 de la página web del CS50. 805 00:37:18,720 --> 00:37:21,250 Sólo tiene enlaces a conferencias y programa de estudios, 806 00:37:21,250 --> 00:37:25,490 y se está utilizando esa lista desordenada tag-- la etiqueta de UL que se utilizó la última vez. 807 00:37:25,490 --> 00:37:28,800 Y si de hecho, si abrir View Page Source, 808 00:37:28,800 --> 00:37:31,710 verás que esto es muy, muy sencillo de HTML. 809 00:37:31,710 --> 00:37:35,460 Y de hecho, a pesar de que esto es un archivo PHP debajo de la capilla, 810 00:37:35,460 --> 00:37:38,620 Todavía es sólo escupir solamente HTML, por ahora. 811 00:37:38,620 --> 00:37:41,312 >> Así que si hago clic en conferencias, vemos que esto ocurra. 812 00:37:41,312 --> 00:37:43,020 Y si hago clic en la semana cero, vemos esto. 813 00:37:43,020 --> 00:37:44,920 Y si hago clic en Miércoles, vemos esto. 814 00:37:44,920 --> 00:37:47,900 Y esto al parecer fue el PDF de las diapositivas de ese día. 815 00:37:47,900 --> 00:37:52,020 Lo único que he hecho es enlace con un etiqueta de anclaje a esta URL aquí. 816 00:37:52,020 --> 00:37:55,400 >> Así que esto es sólo para decir que este es un bonito versión simple de la página web del CS50. 817 00:37:55,400 --> 00:37:56,790 Vamos a ver cómo se implementa. 818 00:37:56,790 --> 00:38:01,240 Si entro en el directorio mvc0, vamos a ver un par de archivos. 819 00:38:01,240 --> 00:38:03,250 Uno de ellos es un README, así que si algo de esto es demasiado rápido, 820 00:38:03,250 --> 00:38:05,166 que sólo puede hurgar más relajado después. 821 00:38:05,166 --> 00:38:07,930 Y fíjense en aquí es un archivo index.php. 822 00:38:07,930 --> 00:38:09,960 Resulta que si tú mismo, el ser humano, 823 00:38:09,960 --> 00:38:14,460 no especifique el nombre definitivo en una dirección URL, el servidor web por lo general 824 00:38:14,460 --> 00:38:17,010 infiere algún nombre por defecto para usted. 825 00:38:17,010 --> 00:38:20,060 Un punto índice algo generalmente es el valor predeterminado. 826 00:38:20,060 --> 00:38:23,010 >> Así que por eso hace un momento cuando visité este URL aquí, 827 00:38:23,010 --> 00:38:26,750 ningún nombre de archivo, no hay ningún archivo extensión, ningún período en la dirección URL. 828 00:38:26,750 --> 00:38:29,710 Sólo sabía de alguna manera mágica buscar index.php. 829 00:38:29,710 --> 00:38:30,870 Es sólo una convención. 830 00:38:30,870 --> 00:38:32,360 Podría ser llamado cualquier cosa. 831 00:38:32,360 --> 00:38:35,110 >> Así que si ahora me voy a index.php, verás 832 00:38:35,110 --> 00:38:37,100 que, indeed-- vamos deshacerse de los comentarios 833 00:38:37,100 --> 00:38:39,500 aquí porque no hay realmente nada interesante que it-- 834 00:38:39,500 --> 00:38:41,579 esto es sólo modificable HTML. 835 00:38:41,579 --> 00:38:43,370 Así que eso es consistente, sin embargo, con mi reclamación 836 00:38:43,370 --> 00:38:45,230 que se pueden mezclar HTML y PHP. 837 00:38:45,230 --> 00:38:48,060 No hay real programación lógica aquí. 838 00:38:48,060 --> 00:38:51,030 >> Y los otros archivos son bastante mucho tan poco interesante. 839 00:38:51,030 --> 00:38:56,240 Es sólo una semana-codificado aquí para una semana m y una semana w, 840 00:38:56,240 --> 00:38:57,510 para el lunes y el miércoles. 841 00:38:57,510 --> 00:39:01,890 Y luego, si abro la semana cero, cuenta que es casi idéntica. 842 00:39:01,890 --> 00:39:03,320 >> Y eso es una especie de conclusión clave. 843 00:39:03,320 --> 00:39:06,180 Observe cómo esto es redundante. 844 00:39:06,180 --> 00:39:10,710 Estos archivos apenas cambian, y sin embargo yo tirado uno de estos puestos de trabajo de copia / pasta 845 00:39:10,710 --> 00:39:13,420 donde tomé una file-- presumiblemente en la semana que zero-- copiado 846 00:39:13,420 --> 00:39:16,320 cuando una semana llegó, y ajustado algunos valores. 847 00:39:16,320 --> 00:39:18,590 Probablemente deberíamos ser capaces de hacer mejor que esto. 848 00:39:18,590 --> 00:39:21,800 >> Así que vamos a volver hasta mvc y entrar en una versión. 849 00:39:21,800 --> 00:39:24,810 Y noto que tengo una algunos archivos, ya que lo que 850 00:39:24,810 --> 00:39:29,870 era común a todos esos archivos sólo una momento ago-- si vuelvo a la versión 0, 851 00:39:29,870 --> 00:39:32,600 vamos a ir de nuevo en el índice, y sólo postulate-- 852 00:39:32,600 --> 00:39:36,090 una vez que me deshago de la comments-- qué parte de esta página 853 00:39:36,090 --> 00:39:40,072 es de suponer en cada uno de mis archivos? 854 00:39:40,072 --> 00:39:40,780 Sólo tiene que llamar a cabo. 855 00:39:40,780 --> 00:39:44,620 ¿Qué se duplican líneas probablemente a través de todas estas páginas? 856 00:39:44,620 --> 00:39:45,120 ¿Sí? 857 00:39:45,120 --> 00:39:46,110 >> ESTUDIANTE: [inaudible]. 858 00:39:46,110 --> 00:39:47,660 >> DAVID J. MALAN: del 1 al 9. 859 00:39:47,660 --> 00:39:48,720 Sí, absolutamente. 860 00:39:48,720 --> 00:39:52,080 1 a 9, excepto tal vez 8 cambia un poco porque CS50 861 00:39:52,080 --> 00:39:54,650 se convierte en conferencias o semana cero o algo así. 862 00:39:54,650 --> 00:39:55,970 Pero casi idéntico. 863 00:39:55,970 --> 00:39:58,657 Así que todo esto es sólo tipo de copiado y pegado. 864 00:39:58,657 --> 00:40:00,490 Y hay un par otras líneas se me ocurre 865 00:40:00,490 --> 00:40:05,000 de que son probablemente idéntica a través de todos los archivos. 866 00:40:05,000 --> 00:40:06,315 >> ESTUDIANTE: 12 y 13. 867 00:40:06,315 --> 00:40:07,190 DAVID J. MALAN: Sí. 868 00:40:07,190 --> 00:40:11,220 Claro, 12, 13, y 14, probablemente, sólo porque las cosas interesantes 869 00:40:11,220 --> 00:40:15,460 que está sucediendo en las líneas 11 y 10, por lo que parece. 870 00:40:15,460 --> 00:40:18,350 Así que echemos un vistazo a la versión 1, que trata de mejorar esto. 871 00:40:18,350 --> 00:40:24,020 En la versión 1 de este ejemplo-- mvc vamos a explicar lo mvc medios en un moment-- 872 00:40:24,020 --> 00:40:27,420 si entro en índice, tipo de parece un poco confuso ahora. 873 00:40:27,420 --> 00:40:28,880 No es tan simple como antes. 874 00:40:28,880 --> 00:40:30,906 >> Pero una vez que comience a leer con cuidado, es 875 00:40:30,906 --> 00:40:32,530 bastante sencillo lo que está haciendo. 876 00:40:32,530 --> 00:40:34,397 Al parecer, la línea 1 y línea 8 han sustituido 877 00:40:34,397 --> 00:40:37,230 todas las cosas que simplemente identified-- aunque sólo por si acaso, 878 00:40:37,230 --> 00:40:41,900 Dejé las ULs allí por si acaso alguna días no tenían una lista de las cosas. 879 00:40:41,900 --> 00:40:47,860 Y así lo requieran es algo así como la libra incluir en C. Copia y pastas 880 00:40:47,860 --> 00:40:50,470 el contenido efectivamente aquí en este archivo. 881 00:40:50,470 --> 00:40:53,650 >> Así que en header.php, como usted podría inferir de su nombre, 882 00:40:53,650 --> 00:40:55,330 va a ser la cabecera de la página. 883 00:40:55,330 --> 00:40:57,110 Es una especie de huérfano aquí. 884 00:40:57,110 --> 00:41:01,820 Sólo tiene la parte superior a la misma, pero no hay más contenido a continuación. 885 00:41:01,820 --> 00:41:05,070 >> Y si miro a pie de página por su parte, que era el otro archivo mentioned-- 886 00:41:05,070 --> 00:41:08,830 éste es mucho menos interesante, pero de nuevo, es común a todo. 887 00:41:08,830 --> 00:41:10,250 Así que este es el pie de página. 888 00:41:10,250 --> 00:41:11,300 Este es el encabezado. 889 00:41:11,300 --> 00:41:13,950 Este es el archivo que es cambiar, así que por qué no 890 00:41:13,950 --> 00:41:18,140 tratar de factorizar la comunalidad con estas dos líneas aquí? 891 00:41:18,140 --> 00:41:20,090 >> Pero podemos limpiar esta un poco más lejos. 892 00:41:20,090 --> 00:41:23,260 Voy a seguir adelante y abrir la versión dos, donde 893 00:41:23,260 --> 00:41:27,106 ya veremos que no hay un nuevo archivo, helpers.php. 894 00:41:27,106 --> 00:41:28,610 Vamos a ver lo que es eso en un momento. 895 00:41:28,610 --> 00:41:30,930 Vamos al índice, como el punto de entrada como antes. 896 00:41:30,930 --> 00:41:35,230 >> Y ahora noto que estoy requiriendo helpers.php, no la cabecera o pie de página. 897 00:41:35,230 --> 00:41:41,720 Pero los ayudantes es algo así como helpers.c y helpers.h de PSET 2 898 00:41:41,720 --> 00:41:46,150 o PSET 3 Hace mucho tiempo, cuando en realidad se hizo buscar y encontrar para que PSET, 899 00:41:46,150 --> 00:41:50,950 y que tenía todo el código para la clasificación y la búsqueda en un archivo separado. 900 00:41:50,950 --> 00:41:52,510 Eso es lo que está pasando aquí. 901 00:41:52,510 --> 00:41:54,390 >> Y ahora la línea 3 se ve un poco diferente. 902 00:41:54,390 --> 00:41:55,920 Y es sólo una línea. 903 00:41:55,920 --> 00:41:57,950 Para hacer esto aún más claro, yo podría simplemente 904 00:41:57,950 --> 00:42:01,820 Qué esto sea estilísticamente coherente con todo lo demás que hemos hecho. 905 00:42:01,820 --> 00:42:04,130 Pero eso no es realmente cambiar la funcionalidad. 906 00:42:04,130 --> 00:42:05,880 Es sólo una línea de código real. 907 00:42:05,880 --> 00:42:09,010 >> Al parecer, hay una función en algún lugar llamado render de cabecera, 908 00:42:09,010 --> 00:42:11,420 Y aquí es donde las cosas ser bastante potente. 909 00:42:11,420 --> 00:42:17,040 Tenga en cuenta que en el interior de sus paréntesis es lo que otra pieza de sintaxis? 910 00:42:17,040 --> 00:42:19,780 911 00:42:19,780 --> 00:42:23,350 Es probable que sea un poco difícil de decir, pero notar there's-- voy a poner un poco de blanco 912 00:42:23,350 --> 00:42:24,300 espacio. 913 00:42:24,300 --> 00:42:25,530 Hay corchetes. 914 00:42:25,530 --> 00:42:29,700 >> Y entre corchetes que vimos hace un poco en el contexto de matrices asociativas, 915 00:42:29,700 --> 00:42:31,580 que son, de nuevo, al igual que las tablas hash. 916 00:42:31,580 --> 00:42:36,230 Y si usted piensa ahora a C, la orden de argumentos en una función 917 00:42:36,230 --> 00:42:37,570 tiene que ser siempre el mismo. 918 00:42:37,570 --> 00:42:41,146 Hay que recordar lo que el ordenar x es--, y, z o z, y, x-- 919 00:42:41,146 --> 00:42:44,020 y usted tiene que proporcionar siempre los en el mismo orden o mirar hacia arriba 920 00:42:44,020 --> 00:42:45,100 si se le ha olvidado. 921 00:42:45,100 --> 00:42:51,140 >> Pero esto parece ser una forma inteligente pasando de un valor clave arbitraria 922 00:42:51,140 --> 00:42:55,840 pares por lo que el título es el nombre de un argumento en este caso 923 00:42:55,840 --> 00:42:58,334 y CS50 es su valor. 924 00:42:58,334 --> 00:43:00,250 Y el hecho de que tengo estos corchetes 925 00:43:00,250 --> 00:43:02,560 aquí significa que pude también pasar en algo 926 00:43:02,560 --> 00:43:07,550 como una semana es 1 o 0 o 2 o 3. 927 00:43:07,550 --> 00:43:10,550 Para ello hemos parametrizamos esta función de una manera tal 928 00:43:10,550 --> 00:43:15,180 que puede tomar múltiples entradas, pero por ahora es sólo el uno. 929 00:43:15,180 --> 00:43:20,060 >> Si ahora voy a helpers.php, observe lo que está haciendo. 930 00:43:20,060 --> 00:43:22,030 Esto es un poco de nueva funcionalidad, 931 00:43:22,030 --> 00:43:24,190 pero por ahora sólo tomar en la fe de que esto es 932 00:43:24,190 --> 00:43:26,570 la sintaxis con la que definir una función en PHP. 933 00:43:26,570 --> 00:43:27,840 Usted, literalmente, dice la función. 934 00:43:27,840 --> 00:43:30,090 No se especifica un retorno escriba, y eso es consistente 935 00:43:30,090 --> 00:43:33,880 con el detalle de la variable anterior donde usted realmente no escribe fuertemente. 936 00:43:33,880 --> 00:43:35,650 >> Esto sólo especifica que, por defecto, esta 937 00:43:35,650 --> 00:43:37,460 toma un asociativa matriz como un argumento. 938 00:43:37,460 --> 00:43:38,210 ¿Y sabes qué? 939 00:43:38,210 --> 00:43:41,450 Si el usuario no pasa uno en, asumirá un valor por defecto. 940 00:43:41,450 --> 00:43:44,680 >> Esta es una característica que C no tiene para nosotros, lo cual es bueno, porque ahora 941 00:43:44,680 --> 00:43:46,430 datos, incluso si no le dan nada, 942 00:43:46,430 --> 00:43:49,300 va a ser un matriz, pero uno vacío. 943 00:43:49,300 --> 00:43:51,860 Y como un aparte, extracto apenas hace algo cobarde 944 00:43:51,860 --> 00:43:56,380 donde toma todas las claves de este matriz asociativa, todas las cosas 945 00:43:56,380 --> 00:43:59,950 se puede poner entre corchetes, y crea las variables de ellos 946 00:43:59,950 --> 00:44:06,270 por lo que en última instancia, podemos tener acceso a ellos en footet.php y header.php. 947 00:44:06,270 --> 00:44:08,950 Eso es un poco abstracto, así que permítanme señalar esto. 948 00:44:08,950 --> 00:44:12,990 >> En index.php, noto que estoy que pasa en un par de valores clave del título 949 00:44:12,990 --> 00:44:14,850 con un valor de CS50. 950 00:44:14,850 --> 00:44:18,660 Si ahora miro helpers.php, notar que RenderHeader 951 00:44:18,660 --> 00:44:23,870 se extrae que los datos que estoy pasando en, y luego requerir header.php. 952 00:44:23,870 --> 00:44:27,970 Lo que he hecho es una especie de un pobre hombre de aplicación ahora de la siguiente. 953 00:44:27,970 --> 00:44:31,720 >> Si abro header.php, Tenga en cuenta que yo ya no tengo duro 954 00:44:31,720 --> 00:44:34,890 codificada la palabra CS50 en este archivo de cabecera. 955 00:44:34,890 --> 00:44:39,310 He puesto este reconocidamente atrozmente función con nombre, HTML caracteres especiales, 956 00:44:39,310 --> 00:44:40,170 en ese país. 957 00:44:40,170 --> 00:44:41,640 Pero noto lo que he hecho. 958 00:44:41,640 --> 00:44:44,240 Tengo HTML abierto. 959 00:44:44,240 --> 00:44:47,420 Entonces tengo la cabeza abierta y el título abierto. 960 00:44:47,420 --> 00:44:52,380 >> Y luego en el interior de del título abierto y cerrar etiquetas, tengo un poco de código PHP. 961 00:44:52,380 --> 00:44:56,670 Y este es un bonito pero de sintaxis, que sólo significa echo fuera. 962 00:44:56,670 --> 00:44:59,840 Significa literalmente esto-- eco de la following-- 963 00:44:59,840 --> 00:45:01,910 pero esto es más atractivo para escribir. 964 00:45:01,910 --> 00:45:05,000 Echo a cabo el título que ha sido aprobada en. 965 00:45:05,000 --> 00:45:07,560 >> Pero ¿qué te parece HTML Char especial se trata, 966 00:45:07,560 --> 00:45:10,590 especialmente si usted tiene alguna experiencia previa en HTML? 967 00:45:10,590 --> 00:45:14,050 ¿Cuál podría ser caracteres peligroso para pasar a una página 968 00:45:14,050 --> 00:45:17,980 donde se está generando dinámicamente la página web con un código como este? 969 00:45:17,980 --> 00:45:21,370 970 00:45:21,370 --> 00:45:24,650 Déjame ir a este archivo, versión dos, y ver si no puedo inducir esto. 971 00:45:24,650 --> 00:45:26,210 >> Versión dos es esto. 972 00:45:26,210 --> 00:45:28,510 Y cuenta todo está muy bien, trabajando bien. 973 00:45:28,510 --> 00:45:35,280 Pero supongo que voy a index.php y He especificado que el título de mi página 974 00:45:35,280 --> 00:45:36,630 no es CS50. 975 00:45:36,630 --> 00:45:44,930 Es alerta guión soporte abierto hola mundo, comilla simple cierre, 976 00:45:44,930 --> 00:45:49,740 paréntesis de cierre, punto y coma, soporte abierto, guión barra. 977 00:45:49,740 --> 00:45:51,897 >> Guión, como veremos finalmente ver, es una etiqueta 978 00:45:51,897 --> 00:45:54,480 que se puede utilizar con el uso de otro lenguaje de programación llamado 979 00:45:54,480 --> 00:45:56,330 JavaScript dentro de una página web. 980 00:45:56,330 --> 00:45:57,960 Y ahora cuenta de la lógica aquí. 981 00:45:57,960 --> 00:45:59,840 He aquí una clave llamada título. 982 00:45:59,840 --> 00:46:02,690 Aquí es su valor a largo loco ahora. 983 00:46:02,690 --> 00:46:07,840 >> Pero si voy a los ayudantes página- o más bien, la página de cabecera, 984 00:46:07,840 --> 00:46:11,310 Voy a llamar a esta función en ese título por primera vez. 985 00:46:11,310 --> 00:46:15,250 Así que si ahora vuelvo a cargar esta página, ver esto, que parece ridículo, 986 00:46:15,250 --> 00:46:16,110 pero es seguro. 987 00:46:16,110 --> 00:46:17,310 Sólo se ve estúpido. 988 00:46:17,310 --> 00:46:20,320 >> Pero supongamos que en lugar Me había olvidado de esto. 989 00:46:20,320 --> 00:46:24,660 Y recuerda mis palabras, un número distinto de cero de que usted se olvide de hacer esto 990 00:46:24,660 --> 00:46:27,790 y obtendrá algunos industriosos estudiante o amigo que sube 991 00:46:27,790 --> 00:46:31,540 para que en la feria CS50 o anónimamente en la noche hurgando en su página web 992 00:46:31,540 --> 00:46:35,300 y, esencialmente, la inyección de código sin el conocimiento de que en su sitio 993 00:46:35,300 --> 00:46:35,800 de alguna manera. 994 00:46:35,800 --> 00:46:39,000 >> Porque si yo simplemente escupir a título aquí y título 995 00:46:39,000 --> 00:46:44,330 allí-- bien, si el título literalmente se parece a esto y PHP 996 00:46:44,330 --> 00:46:47,660 como un lenguaje que puede escupir a cabo otro texto lenguas, 997 00:46:47,660 --> 00:46:50,650 esto es, literalmente, va para reemplazar esta etiqueta con, 998 00:46:50,650 --> 00:46:53,010 por supuesto, lo que he puesto en otro lugar. 999 00:46:53,010 --> 00:46:57,640 >> Así que si yo ahora voy aquí y volver a cargar después deshacer los mecanismos de seguridad, 1000 00:46:57,640 --> 00:46:59,982 Ahora tengo hola mundo aquí. 1001 00:46:59,982 --> 00:47:02,690 Ahora eso no es todo tan grande de un acuerdo, pero se podría hacer algo 1002 00:47:02,690 --> 00:47:05,119 un poco más malicioso aquí, como si hubiera 1003 00:47:05,119 --> 00:47:08,410 otra tags-- como veremos, una vez que pasamos más tiempo en JavaScript-- como ubicación 1004 00:47:08,410 --> 00:47:14,910 punto href consigue, cita, fin de la cita, HTTP business.com, pero lo contrario de que 1005 00:47:14,910 --> 00:47:15,950 desde el otro día. 1006 00:47:15,950 --> 00:47:20,120 Y ahora usted puede inducir una web página para ir en realidad inmediatamente 1007 00:47:20,120 --> 00:47:21,190 a esta página web aquí. 1008 00:47:21,190 --> 00:47:23,000 >> Y en realidad, no quiero para incluso ir a business.com 1009 00:47:23,000 --> 00:47:24,749 porque yo no quiero saber lo que es eso. 1010 00:47:24,749 --> 00:47:28,710 Pero esto, también, se disparará código para ser inyectada en esta página. 1011 00:47:28,710 --> 00:47:32,680 Así que esto es sólo para decir que a pesar de que estamos introduciendo súper temprano en algunos 1012 00:47:32,680 --> 00:47:36,800 de estas estructuras más complejas, es todo hacia un fin de asegurarse 1013 00:47:36,800 --> 00:47:39,320 que el código no es explotable. 1014 00:47:39,320 --> 00:47:40,960 >> Así que ahora una tercera versión aquí. 1015 00:47:40,960 --> 00:47:42,470 Se está haciendo un poco más de lujo. 1016 00:47:42,470 --> 00:47:44,875 Realmente no me como-- la parte anal de mí 1017 00:47:44,875 --> 00:47:47,750 estaba un poco molesto por la hecho de que una función que había llamado 1018 00:47:47,750 --> 00:47:51,940 RenderHeader y RenderFooter que eran casi idénticos. 1019 00:47:51,940 --> 00:47:55,400 Así que se me ocurrió, ¿por qué no lo hacen Yo parametrizar estas funciones 1020 00:47:55,400 --> 00:47:59,180 en una sola llamada render, haga que tomar un segundo argumento 1021 00:47:59,180 --> 00:48:04,420 como el nombre de la plantilla, a la final a render-- ya sea encabezado o pie de página? 1022 00:48:04,420 --> 00:48:07,160 Y a continuación, opcionalmente, si quiero para pasar en algunos pares de valores clave 1023 00:48:07,160 --> 00:48:10,580 como lo hago por el título de la cabecera, pero no para el pie de página, 1024 00:48:10,580 --> 00:48:11,800 Yo podría hacer eso. 1025 00:48:11,800 --> 00:48:16,510 >> Y ahora si me voy en helpers.php, que es un poco más complejo. 1026 00:48:16,510 --> 00:48:19,670 Y voy a agito mis manos en el detalles, pero es sólo una función. 1027 00:48:19,670 --> 00:48:21,890 Así que eso es un paso hacia un mejor diseño. 1028 00:48:21,890 --> 00:48:23,360 >> Podemos tomar un paso más allá. 1029 00:48:23,360 --> 00:48:28,890 Si me voy a mi cuarto versión de este, cuenta ahora 1030 00:48:28,890 --> 00:48:31,320 que estoy haciendo algo aún más tipo de críptico. 1031 00:48:31,320 --> 00:48:33,230 Y sé que esto es un mucho para absorber a la vez, 1032 00:48:33,230 --> 00:48:35,080 pero estamos sólo un poco de la limpieza de las cosas. 1033 00:48:35,080 --> 00:48:38,550 Ahora me estoy poniendo mis ayudantes presentar en una carpeta llamada 1034 00:48:38,550 --> 00:48:41,190 includes-- sólo una arbitraria nombrar a donde quiero poner cosas 1035 00:48:41,190 --> 00:48:44,300 que quiero figurar y después el resto de este es el mismo. 1036 00:48:44,300 --> 00:48:47,140 >> Pero si miro ahora en gedit, aviso de que me he librado 1037 00:48:47,140 --> 00:48:51,940 de todos los otros archivos y tengo ellos movido, por ejemplo, en aquí. 1038 00:48:51,940 --> 00:48:55,110 Y luego en las plantillas, Tengo esto, también. 1039 00:48:55,110 --> 00:48:59,292 Y así, todo esto es ahora hacia un paso de utilizar un patrón de diseño mucho mejor. 1040 00:48:59,292 --> 00:49:01,000 Y estamos muy rápidamente va a alejarse 1041 00:49:01,000 --> 00:49:03,870 de funcionalidad por defecto de PHP, que empezamos aquí con, 1042 00:49:03,870 --> 00:49:07,655 donde se acaba de mezcléis PHP, y el código HTML, CSS y su, 1043 00:49:07,655 --> 00:49:09,780 y que acaba de escupir hacia fuera y usted va sobre su camino. 1044 00:49:09,780 --> 00:49:11,404 No va a ser muy fácil de mantener. 1045 00:49:11,404 --> 00:49:14,481 Al igual que en C, que empezamos a utilizar varios archivos y múltiples funciones 1046 00:49:14,481 --> 00:49:15,730 y cosas de factoring eso. 1047 00:49:15,730 --> 00:49:16,688 Vamos a hacer lo mismo aquí. 1048 00:49:16,688 --> 00:49:19,970 Y de hecho, en la quinta y última versión aquí, lo hice otra cosa. 1049 00:49:19,970 --> 00:49:23,710 Usted puede incluso utilizar punto punto, que, de nuevo, es sólo el directorio padre. 1050 00:49:23,710 --> 00:49:28,260 Para ser aún más conscientes de la seguridad, porque si miro a la escucha 1051 00:49:28,260 --> 00:49:32,450 aquí por quinta y última versión, previo aviso que tengo un directorio llamado aquí 1052 00:49:32,450 --> 00:49:35,180 público, y luego en el mismo nivel, por así decirlo, 1053 00:49:35,180 --> 00:49:38,490 Tengo incluye y plantillas y luego ese archivo de texto Léame. 1054 00:49:38,490 --> 00:49:41,130 >> Y la razón por la que he estructurado Cómo es esto-- y tantos web 1055 00:49:41,130 --> 00:49:44,330 anfitriones, especialmente los $ 5 los meses o los 10 dólares al mes, 1056 00:49:44,330 --> 00:49:47,170 si alguna vez has tenido uno de estos services-- lo que muchos de ellos lo hacen 1057 00:49:47,170 --> 00:49:50,690 es que sólo esperan que volcar todo de tus archivos en un directorio, 1058 00:49:50,690 --> 00:49:53,640 como ya hicimos con este primer ejemplo. 1059 00:49:53,640 --> 00:49:56,740 >> Pero tan pronto como se inicia la construcción más sitios sofisticados que sólo almacenan 1060 00:49:56,740 --> 00:50:00,480 datos que se preocupan por usted y archivos preocuparse, en realidad la organización de las cosas 1061 00:50:00,480 --> 00:50:05,060 correctamente y con más seguridad conciencia en la mente puede 1062 00:50:05,060 --> 00:50:07,927 empezamos a defender contra todos los amigos 1063 00:50:07,927 --> 00:50:10,135 que usted tiene ya sea en o fuera de esta clase que, 1064 00:50:10,135 --> 00:50:12,510 tan pronto como usted comienza a hacer programas usted mismo en la web, 1065 00:50:12,510 --> 00:50:15,140 van a empezar a recoger sobre usted y sobre ellos. 1066 00:50:15,140 --> 00:50:17,420 >> Y así vamos a ver en última instancia, en este diseño. 1067 00:50:17,420 --> 00:50:20,010 Esto es sólo una imagen que representa lo siguiente. 1068 00:50:20,010 --> 00:50:22,897 Vamos a poner todo de nuestra lógica de programación en uno o más archivos, 1069 00:50:22,897 --> 00:50:25,230 y vamos a empezar justo llamando a los controladores. 1070 00:50:25,230 --> 00:50:28,022 Es donde los cerebros de nuestros sitios web son en realidad. 1071 00:50:28,022 --> 00:50:29,730 A continuación, vamos a tienen puntos de vista y opiniones 1072 00:50:29,730 --> 00:50:32,480 son tan simple como independiente files-- llamados plantillas, a menudo. 1073 00:50:32,480 --> 00:50:34,410 Sólo tienen la estética de mi página, 1074 00:50:34,410 --> 00:50:37,020 lo que quiero de la página para buscar como-- los colores y el diseño 1075 00:50:37,020 --> 00:50:38,870 y las posiciones de todas las variables. 1076 00:50:38,870 --> 00:50:41,120 >> Y luego más interesante que con el tiempo vamos a llegar a 1077 00:50:41,120 --> 00:50:45,420 es el modelo, que va a ser justo la palabra nos palmada en otras tecnologías 1078 00:50:45,420 --> 00:50:47,771 que traemos en el imagen, al igual que las bases de datos reales, 1079 00:50:47,771 --> 00:50:49,520 por lo que cuando se quiere para guardar la información, 1080 00:50:49,520 --> 00:50:52,140 usted no acaba de enviar un correo electrónico a su supervisor oa usted mismo, 1081 00:50:52,140 --> 00:50:57,350 en realidad se almacena en una base de datos utilizando otro lenguaje conocido como SQL. 1082 00:50:57,350 --> 00:51:00,450 Y así vamos a dejar aquí hoy y recoger con este miércoles 1083 00:51:00,450 --> 00:51:02,990 bases de datos e introducir a continuación. 1084 00:51:02,990 --> 00:51:06,940 >> [REPRODUCCIÓN DE MÚSICA] 1085 00:51:06,940 --> 00:54:24,555