Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Si quiere crear sitios web interactivos apoyados en bases de datos con la potente combinación de tecnologías de código abierto y estándares web, incluso sin tener conocimientos básicos de HTML, ha llegado al libro indicado. Gracias a esta guía práctica, abordará la programación web dinámica con la última versión de las principales herramientas del momento: PHP, MySQL, CSS, HTML5 y las bibliotecas clave de jQuery. Asimismo, aprenderá a utilizar estas tecnologías en su conjunto y accederá a valiosas prácticas de programación web. -Explorar MySQL desde la estructura de la base de datos hasta consultas complejas -Utilizar la extensión MySQLi, la interfaz MySQL mejorada de PHP -Crear páginas web dinámicas que se adaptan al usuario -Gestionar las cookies y las sesiones, y conservar un alto grado de seguridad -Mejorar el lenguaje JavaScript con las bibliotecas jQuery y jQuery Mobile -Utilizar las llamadas con AJAX para la comunicación en segundo plano entre el navegador y el servidor -Diseñar páginas web con las habilidades que adquirirá en CSS2 y CSS3 -Implementar las características de HTML5, incluidas la geolocalización, el audio, el vídeo y el elemento lienzo -Reformatear sus sitios web con aplicaciones web para móviles Al final del libro, descubrirá cómo unir todos los temas tratados para crear un sitio de redes sociales completamente funcional, adecuado para navegadores tanto de equipos de escritorio como de dispositivos móviles. Además, en la parte inferior de la primera página del libro encontrará el código de acceso que le permitirá acceder de forma gratuita a los contenidos adicionales en www.marcombo.info. Robin Nixon es periodista de las TI y especialista en las tecnologías presentadas en este libro. Ha trabajado y ha escrito sobre ordenadores desde 1980, es autor de cientos de artículos y libros sobre informática y ha desarrollado numerosos sitios web con herramientas de código abierto.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 1058
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Quinta edición original publicada en inglés por O’Reilly Media, Inc. con el título: Learning PHP,MySQL & JavaScript, 5th Edition © 2018 Robin Nixon
Título de la edición en español: Aprender PHP, MySQL y JavaScript
Quinta edición en español, año 2019
© 2019 MARCOMBO, S.A.
www.marcombo.com
Diseñador de portada: Karen Montgomery
Ilustrador: Rebecca Demarest
Traducción: Francisco Martínez Carreno
Correctora: Meritxell Peleato García
Directora de producción: M.a Rosa Castillo Hidalgo
«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».
ISBN: 978-84-267-2869-2
Producción del ebook: booqlab.com
Para Julie
Prefacio
1. Introducción al contenido dinámico de la web
HTTP y HTML: los conceptos básicos de Berners-Lee
Procedimiento de solicitud/respuesta
Ventajas de PHP, MySQL, JavaScript, CSS y HTML5
MariaDB: el clon de MySQL
Utilización de PHP
Utilización de MySQL
Utilización de JavaScript
Utilización de CSS
Y luego está HTML5
El servidor web Apache
Uso de dispositivos móviles
Sobre el software libre
Todo junto
Preguntas
2. Configuración de un servidor de desarrollo
¿Qué son WAMP, MAMP o LAMP?
Instalación de AMPPS en Windows
Prueba de la instalación
Acceso a la carpeta principal (Windows)
WAMP alternativos
Instalación de AMPPS en macOS
Acceso a la carpeta principal (macOS)
Instalación de LAMP en Linux
Trabajar de forma remota
Inicio de sesión
Utilización de FTP
Utilización del editor de programas
Utilización del EDI
Preguntas
3. Introducción a PHP
Inclusión de PHP en HTML
Ejemplos de este libro
Estructura de PHP
Utilización de comentarios
Sintaxis básica
Variables
Operadores
Asignación de valores a variables
Comandos de varias líneas
Tipificación de variables
Constantes
Constantes predefinidas
Diferencia entre los comandos echo y print
Funciones
Ámbito de aplicación de variables
Preguntas
4. Expresiones y control de flujo en PHP
Expresiones
¿TRUE o FALSE?
Literales y variables
Operadores
Prioridades de los operadores
Asociatividad
Operadores relacionales
Condicionales
La declaración if
La declaración else
La declaración elseif
La declaración switch
El operador ?
Bucles
Bucles while
Bucles do...while
Bucles for
Salida del bucle
Declaración continue
Conversión implícita y explícita
Enlaces dinámicos en PHP
Enlaces dinámicos en acción
Preguntas
5. Funciones y objetos en PHP
Funciones en PHP
Definición de función
Devolución de un valor
Devolución de una matriz
Paso de argumentos por referencia
Devolución en variables globales
Recapitulación sobre el ámbito de aplicación de las variables
Inclusión y requisición de archivos
La declaración include
Utilización de include_once
Utilización de require y require_once
Compatibilidad de las versiones PHP
Objetos en PHP
Terminología
Declaración de clases
Creación de objetos
Acceso a objetos
Clonación de objetos
Constructores
Destructores
Métodos de escritura
Declaración de propiedades
Declaración de constantes
Ámbito de las propiedades y de los métodos
Métodos estáticos
Propiedades estáticas
Herencia
Preguntas
6. Matrices en PHP
Introducción
Matrices indexadas numéricamente
Matrices asociativas
Asignación mediante la palabra clave array
Bucle foreach...as
Matrices de varias dimensiones
Uso de funciones en matrices
is_array
count
sort
shuffle
explode
extract
compact
reset
end
Preguntas
7. PHP práctico
Uso de printf
Ajustes de la precisión
Relleno de cadenas
Uso de sprintf
Funciones de fecha y hora
Constantes de fecha
Uso de la verificación de fecha
Manejo de archivos
Verificación de la existencia de un archivo
Creación de archivos
Lectura de archivos
Copia de archivos
Movimiento de archivos
Eliminación de archivos
Actualización de archivos
Bloqueo de archivos debido a accesos múltiples
Lectura de archivos completos
Carga de archivos
Llamadas al sistema
¿XHTML o HTML5?
Preguntas
8. Introducción a MySQL
Fundamentos de MySQL
Resumen de términos de bases de datos
Acceso a MySQL mediante la línea de comandos
Inicio de la interfaz de la línea de comandos
Uso de la interfaz de la línea de comandos
Comandos MySQL
Tipos de datos
Índices
Creación de un índice
Consulta de bases de datos MySQL
Unión de tablas
Uso de operadores lógicos
Funciones MySQL
Acceso a MySQL mediante phpMyAdmin
Preguntas
9. Dominio de MySQL
Diseño de bases de datos
Claves principales: las claves de las bases de datos relacionales
Normalización
Primera forma normal
Segunda forma normal
Tercera forma normal
Cuándo no utilizar la normalización
Relaciones
Uno a uno
Uno a muchos
Muchos a muchos
Bases de datos y anonimato
Transacciones
Motores de almacenamiento de transacciones
Uso de BEGIN
Uso de COMMIT
Uso de ROLLBACK
Uso de EXPLAIN
Copias de seguridad y restauración
Uso de mysqldump
Creación de archivos de copias de seguridad
Restauración del archivo de la copia de seguridad
Descarga de datos en formato CSV
Planificación de copias de seguridad
Preguntas
10. Acceso a MySQL mediante PHP
Consultas de la base de datos MySQL con PHP
El proceso
Creación del archivo de inicio de sesión
Conexión a la base de datos MySQL
Un ejemplo práctico
La matriz $_POST
Eliminación de un registro
Visualización del formulario
Consulta de la base de datos
Ejecución del programa
MySQL práctico
Creación de una tabla
Descripción de una tabla
Eliminación de una tabla
Adición de datos
Recuperación de datos
Actualización de datos
Borrado de datos
Uso de AUTO_INCREMENT
Realización de consultas adicionales
Prevención de intentos de piratería
Pasos que puedes seguir
Uso de marcadores de posición
Prevención de la inyección de HTML
Uso procedimental de mysqli
Preguntas
11. Gestión de formularios
Creación de formularios
Extracción de los datos enviados
Valores por defecto
Tipos de entradas
Desinfección de entradas
Programa de ejemplo
Mejoras en HTML5
Atributo autocomplete
Atributo autofocus
Atributo placeholder
Atributo required
Atributos de sustitución
Atributos width y height
Atributos min y max
Atributo step
Atributo form
Atributo list
Tipo de entrada color
Tipos de entradas number y range
Selectores de fecha y hora
Preguntas
12. Cookies, sesiones y autenticación
Uso de cookies en PHP
Configuración de cookies
Acceso a cookies
Eliminación de cookies
Autenticación HTTP
Almacenamiento de nombres de usuario y contraseñas
Programa de ejemplo
Uso de sesiones
Inicio de sesión
Finalización de sesión
Configuración del tiempo de espera
Seguridad de sesión
Preguntas
13. Exploración de JavaScript
Texto JavaScript y HTML
Uso de scripts en el encabezamiento de documentos
Navegadores antiguos y no estándar
Inclusión de archivos JavaScript
Depuración de errores en JavaScript
Uso de comentarios
Signos de punto y coma
Variables
Variables de cadena de caracteres
Variables numéricas
Matrices
Operadores
Operadores aritméticos
Operadores de asignación
Operadores de comparación
Operadores lógicos
Asignación creciente, decreciente y abreviada
Concatenación de cadenas
Caracteres de escape
Escritura de variables
Funciones
Variables globales
Variables locales
Modelo de objetos del documento
Otro uso del símbolo $
Uso del DOM
Sobre document.write
Uso de console.log
Uso de alert
Escritura en elementos
Uso de document.write
Preguntas
14. Expresiones y control de flujo en JavaScript
Expresiones
Literales y variables
Operadores
Prioridad de operadores
Asociatividad
Operadores relacionales
Declaración with
Uso de onerror
Uso de try...catch
Condicionales
Declaración if
Declaración else
Declaración switch
Operador ?
Bucles
Bucles while
Bucles do...while
Bucles for
Salida del bucle
Declaración continue
Conversión explícita
Preguntas
15. Funciones, objetos y matrices de JavaScript
Funciones JavaScript
Definición de función
Devolución de un valor
Devolución de una matriz
Objetos JavaScript
Declaración de clase
Creación de objetos
Acceso a objetos
La palabra clave prototype
Matrices JavaScript
Matrices numéricas
Matrices asociativas
Matrices de varias dimensiones
Métodos de uso de matrices
Preguntas
16. Validación de JavaScript y PHP y tratamiento de errores
Validación de la entrada de usuario con JavaScript
Documento validate.html (Parte 1)
Documento validate.html (Parte 2)
Expresiones regulares
Concordancia mediante metacaracteres
Concordancia de caracteres difusos
Agrupación mediante paréntesis
Clase de caracteres
Indicación del intervalo
Negación
Otros ejemplos más complicados
Resumen de metacaracteres
Modificadores generales
Uso de expresiones regulares en JavaScript
Uso de expresiones regulares en PHP
Nueva visualización del formulario después de la validación PHP
Preguntas
17. Uso de comunicaciones asíncronas
¿Qué es la comunicación asíncrona?
Uso de XMLHttpRequest
Tu primer programa asíncrono
Uso de GET en lugar de POST
Envío de solicitudes XML
Uso de frameworks para la comunicación asíncrona
Preguntas
18. Introducción a CSS
Importación de hojas de estilo
Importación de CSS desde HTML
Ajuste de estilo integrados
Uso de ID
Uso de clases
Uso del punto y coma
Reglas CSS
Asignaciones múltiples
Uso de comentarios
Tipos de estilos
Estilos por defecto
Estilos de usuario
Hoja de estilo externas
Estilos internos
Estilos en línea
Selectores CSS
Selector de tipo
Selector de descendiente
Selector de hijo
Selector de ID
Selector de clase
Selector de atributo
Selector universal
Selección por grupo
Cascada CSS
Creadores de hojas de estilo
Métodos de hojas de estilo
Selectores de hojas de estilo
Diferencia entre los elementos div y span
Medidas
Fuentes y tipografía
font-family
font-style
font-size
font-weight
Tratamiento de estilos de texto
Decoración
Espaciado
Alineación
Transformación
Sangrado
Colores CSS
Cadenas reducidas para determinar el color
Degradados
Elementos de posicionamiento
Posicionamiento absoluto
Posicionamiento relativo
Posicionamiento fijo
Pseudoclases
Reglas abreviadas
El modelo de caja y el diseño
Fijación de márgenes
Aplicación de bordes
Ajuste de relleno
Contenidos del objeto
Preguntas
19. CSS avanzado con CSS3
Selectores de atributos
Partes coincidentes de las cadenas
Propiedad box-sizing
Fondos CSS3
Propiedad background-clip
Propiedad background-origin
Propiedad background-size
Uso de auto Value
Múltiples fondos
Bordes CSS3
Propiedad border-color
Propiedad border-radius
Sombras de caja
Desbordamiento de elementos
Diseño en varias columnas
Colores y opacidad
Colores HSL
Colores HSLA
Colores RGB
Colores RGBA
Propiedad opacity
Efectos de texto
Propiedad text-shadow
Propiedad text-overflow
Propiedad word-wrap
Fuentes web
Fuentes de la web de Google
Transformaciones
Transformaciones 3D
Transiciones
Propiedades de las transiciones
Duración de las transiciones
Retardo en las transiciones
Tiempo de transición
Sintaxis abreviada
Preguntas
20. Acceso a CSS desde JavaScript
Revisión de la función getElementById
La función O
La función S
La función C
Inclusión de funciones
Acceso a las propiedades de CSS desde JavaScript
Algunas propiedades de uso frecuente
Otras propiedades
JavaScript en línea
Palabra clave this
Anexión de eventos a objetos en un script
Anexión a otros eventos
Adición de nuevos elementos
Eliminación de elementos
Alternativas para añadir y eliminar elementos
Uso de interrupciones
Uso de setTimeout
Cancelación del tiempo de espera
Uso de setInterval
Uso de interrupciones en animaciones
Preguntas
21. Introducción a jQuery
¿Por qué jQuery?
Inclusión de jQuery
Elección de la versión adecuada
Descarga
Uso de una red de entrega de contenido
Personalización de jQuery
Sintaxis de jQuery
Un sencillo ejemplo
Cómo evitar conflictos entre bibliotecas
Selectores
Método css
Selector de elemento
Selector de ID
Selector de clase
Combinación de selectores
Tratamiento de eventos
En espera de que el documento esté preparado
Funciones y propiedades de eventos
Eventos de enfoque y desenfoque
Palabra clave this
Eventos click y dblclick
Evento keypress
Programación amable
Evento mousemove
Otros eventos del ratón
Métodos alternativos del ratón
Evento submit
Efectos especiales
Ocultación y presentación
Método toggle
Desvanecimiento de entrada y salida
Elementos deslizantes hacia arriba y hacia abajo
Animaciones
Detención de animaciones
Tratamiento del DOM
Diferencia entre los métodos text y html
Métodos val y attr
Adición y eliminación de elementos
Aplicación dinámica de clases
Modificación de dimensiones
Métodos width y height
Métodos innerWidth e innerHeight
Métodos outerWidth y outerHeight
Atravesar el DOM
Elementos padre
Elementos hijo
Elementos hermanos
Selección de elementos anteriores y posteriores
Atravesar selecciones jQuery
Método is
Uso de jQuery sin selectores
Método $.each
Método $.map
Uso de la comunicación asíncrona
Uso del método POST
Uso del método GET
Complementos
Interfaz de usuario de jQuery
Otros complementos
Preguntas
22. Introducción a jQuery Mobile
Inclusión de jQuery Mobile
Primeros pasos
Páginas enlazadas
Enlace síncrono
Enlace en un documento de varias páginas
Transiciones de página
Botones de diseño
Gestión de listas
Filtrado de listas
Divisores de listas
¿Y ahora qué?
Preguntas
23. Introducción a HTML5
El lienzo
Geolocalización
Audio y vídeo
Formularios
Trabajadores de la web
Microdatos
Preguntas
24. El lienzo HTML5
Creación y acceso al lienzo
Función toDataURL
Especificación del tipo de imagen
Método fillRect
Método clearRect
Método strokeRect
Combinación de estos comandos
Método createLinearGradient
Método addColorStop detallado
Método createRadialGradient
Uso de patrones para el relleno
Escritura de texto en el lienzo
Método strokeText
Propiedad textBaseLine
Propiedad font
Propiedad textAlign
Método fillText
Método measureText
Dibujo de líneas
Propiedad lineWidth
Propiedades lineCap y lineJoin
Propiedad miterLimit
Uso de rutas
Métodos moveTo y lineTo
Método stroke
Método rect
Áreas de relleno
Método clip
Método isPointInPath
Trabajo con curvas
Método arc
Método arcTo
Método quadraticCurveTo
Método bezierCurveTo
Tratamiento de imágenes
Método drawImage
Redimensionado de imágenes
Selección del área de la imagen
Copias del lienzo
Adición de sombras
Edición a nivel de píxel
Método getImageData
Método putImageData
Método createImageData
Efectos gráficos avanzados
Propiedad globalCompositeOperation
Propiedad globalAlpha
Transformaciones
Método scale
Método save y restore
Método rotate
Método translate
Método transform
Método setTransform
Preguntas
25. Audio y vídeo en HTML5
Sobre los códecs
Elemento <audio>
Compatibilidad con navegadores que no son HTML5
Elemento <video>
Códecs de vídeo
Compatibilidad con navegadores más antiguos
Preguntas
26. Otras características de HTML5
La geolocalización y el servicio GPS
Otros métodos de localización
Geolocalización y HTML5
Almacenamiento local
Uso del almacenamiento local
Objeto localStorage
Trabajadores de la web
Arrastrar y soltar
Mensajería entre documentos
Otras etiquetas HTML5
Preguntas
27. Todo junto
Diseño de una aplicación de red social
Sobre el sitio web
functions.php
Funciones
header.php
setup.php
index.php
signup.php
Comprobación de la disponibilidad de nombres de usuario
Inicio de sesión
checkuser.php
login.php
profile.php
Adición del texto "About Me"
Adición de la imagen del perfil
Procesamiento de la imagen
Visualización del perfil actual
members.php
Visualización del perfil de usuario
Incorporación y eliminación de amigos
Listado de todos los miembros
friends.php
messages.php
logout.php
styles.css
javascript.js
A. Soluciones a las preguntas de los capítulos
B. Recursos en línea
C. Palabras vacías en FULLTEXT de MySQL
D. Funciones MySQL
E. Selectores, objetos y métodos en jQuery
La combinación de PHP y MySQL es el enfoque más conveniente para el diseño de páginas web dinámicas utilizando bases de datos, y además está a la altura de los desafíos de los frameworks integrados (como Ruby on Rails) que son más difíciles de aprender. Debido a sus orígenes de software libre (a diferencia de la competencia Microsoft.NET Framework), se puede implementar libremente y por lo tanto es una opción muy popular para el desarrollo web.
Cualquier desarrollador potencial que utilice la plataforma Unix/Linux o incluso Windows/Apache necesitará dominar estas tecnologías. Y, combinadas con las tecnologías asociadas de JavaScript, jQuery, CSS y HTML5, podrá crear sitios web con el nivel de los estándares de la industria como Facebook, Twitter y Gmail.
Este libro está orientado a personas que desean aprender a crear sitios web efectivos y dinámicos. Es decir, para administradores de sitios web o diseñadores gráficos que ya crean sitios web estáticos, pero que desean llevar sus habilidades al siguiente nivel, así como para estudiantes de enseñanza secundaria, universitarios, recién graduados y personas autodidactas.
De hecho, cualquiera que esté preparado para aprender los fundamentos del diseño web interactivo asimilará un conocimiento profundo de las tecnologías básicas de PHP, MySQL, JavaScript, CSS y HTML5, y también aprenderá los fundamentos de las bibliotecas de jQuery y jQuery Mobile.
El libro se dirige a personas que tienen unos conocimientos básicos de HTML y que pueden al menos crear un sitio web estático sencillo, pero no tienen por qué tener conocimientos previos de PHP, MySQL, JavaScript, CSS o HTML5, aunque si los tienen, progresarán mucho más rápidamente a medida que avancen en el contenido del libro.
Los capítulos del libro siguen un orden específico, primero hacen una introducción de las tecnologías básicas de las que tratan y luego te guían en la instalación de las mismas en un servidor de desarrollo web para poder trabajar con los ejemplos.
En la primera sección, se explican las ideas fundamentales del lenguaje de programación PHP y se presentan los conceptos básicos de sintaxis, matrices, funciones y programación orientada a objetos.
Luego, una vez que conozcas PHP, continuarás con una introducción al sistema de bases de datos MySQL, con la que lo aprenderás todo, desde cómo están estructuradas las bases de datos MySQL hasta cómo generar consultas complejas.
Después, aprenderás a combinar PHP y MySQL para empezar a crear tus propias páginas web dinámicas integrando formularios y otras características HTML. A continuación, se presentarán los aspectos prácticos de PHP y el desarrollo de MySQL mediante el aprendizaje de una serie de funciones útiles, cómo administrar cookies y sesiones, y cómo mantener un alto nivel de seguridad.
En los capítulos que siguen a lo anterior, adquirirás una sólida formación en JavaScript, desde sencillas funciones de simulación y gestión de eventos hasta el acceso al Modelo de Objetos del Documento, la validación en el navegador y la gestión de errores. También obtendrás una introducción completa sobre el uso de la popular biblioteca jQuery para JavaScript.
Con una comprensión de estas tres tecnologías esenciales, aprenderás a realizar llamadas a AJAX en segundo plano y a convertir tus sitios web en entornos dinámicos.
En los dos siguientes capítulos aprenderás todo sobre el uso de CSS para diseñar y maquetar tus páginas web, antes de descubrir cómo las bibliotecas jQuery pueden hacer tu trabajo de desarrollo mucho más fácil. Luego pasarás a la sección final sobre las características interactivas incorporadas a HTML5, incluidos la geolocalización, el audio, el vídeo y el lienzo. Después de esto, podrás reunir todo lo que has aprendido en un completo conjunto de programas con los que se crea un sitio web de red social completamente funcional.
En el recorrido, encontrarás muchos consejos sobre buenas prácticas de programación y trucos que pueden ayudarte a encontrar y resolver errores de programación difíciles de detectar. También hay muchos enlaces a sitios web que contienen más detalles sobre los temas tratados.
Una vez que hayas aprendido a desarrollar páginas web con PHP, MySQL, JavaScript, CSS y HTML5, estarás listo para alcanzar las habilidades del siguiente nivel mediante los libros de referencia de O'Reilly que figuran a continuación:
•Dynamic HTML: The Definitive Reference de Danny Goodman
•PHP in a Nutshell de Paul Hudson
•MySQL in a Nutshell de Russell Dyer
•JavaScript: The Definitive Guide de David Flanagan
•CSS: The Definitive Guide de Eric A. Meyer and Estelle Weyl
•HTML5: The Missing Manual de Matthew MacDonald
En el libro se utilizan las siguientes convenciones tipográficas:
Texto sin formato
Indica los títulos de los menús, las opciones y los botones.
Itálica
Indica nuevos términos, URL, direcciones de correo electrónico, nombres de archivos, extensiones de archivos, nombres de rutas, directorios y utilidades Unix. También se utiliza para nombres de bases de datos, tablas y columnas.
Anchura constante
Indica comandos y opciones de línea de comandos, variables y otros elementos de código, etiquetas HTML y contenido de los archivos.
Negrita de anchura constante
Muestra el resultado de programas y se utiliza para resaltar las secciones de código que se tratan en el texto.
Itálica de ancho constante
Muestra el texto que se debe sustituir por los valores suministrados por el usuario.
Este elemento se refiere a un consejo, sugerencia o nota general.
Este elemento indica una advertencia o precaución.
En www.marcombo.info hay material suplementario (ejemplos de código, ejercicios, etc.) disponible para su descarga. Para acceder a él, sigue los pasos de la primera página del libro.
Existe también una página web para este libro, en la que aparecen listados de erratas, ejemplos, y cualquier información adicional. Puedes acceder a esta página en http://bit.ly/lpmjch_5e.
El propósito de este manual es ayudarte a hacer tu trabajo. En general, si se ofrecen códigos como ejemplos en el libro, puedes usarlos en tus programas y documentación. No es necesario que te pongas en contacto con nosotros para pedir permiso, a menos que reproduzcas una parte importante del código. Por ejemplo, escribir un programa que utiliza varios fragmentos de código no requiere pedir permiso. Vender o distribuir un CD-ROM con ejemplos de libros requiere pedir permiso. Responder a una pregunta citando este libro y el código de ejemplo no requiere pedir permiso. La incorporación de una importante cantidad de código de ejemplos de este libro a la documentación de tu producto requiere pedir permiso.
La World Wide Web es una red en constante evolución que ha ido mucho más lejos de lo que fue su concepción a principios de la década de 1990, cuando se creó con el propósito de resolver un problema específico. Los experimentos más avanzados del CERN (Laboratorio Europeo de Física de Partículas, ahora más conocido como el operador del Gran Colisionador de Hadrones) generaban ingentes cantidades de datos, hasta tal punto que resultaba difícil hacerlos llegar a los científicos de todo el mundo que participaban en las investigaciones.
En aquel momento, Internet ya estaba en funcionamiento, y a la red estaban conectados varios cientos de miles de ordenadores, por lo que Tim Berners-Lee (miembro del CERN) ideó un método para navegar entre ellos mediante una estructura de hiperenlaces, la cual llegó a conocerse como Protocolo de Transferencia de Hipertexto, o HTTP. También creó un lenguaje de marcado llamado Hypertext Markup Language, o HTML. Para integrarlos, desarrolló el primer navegador y el primer servidor web.
Hoy en día estamos acostumbrados a disponer de estas herramientas, pero en aquellas fechas el concepto era revolucionario. Hasta aquel momento, la conectividad más avanzada que tenían a su alcance los usuarios que disponían de un módem en casa era la de realizar una llamada y conectarse a un tablón de anuncios, alojado en un ordenador, a través del que el usuario podía comunicarse e intercambiar datos solo con otros usuarios de ese servicio. Por consiguiente, era necesario que el usuario fuera miembro de muchos sistemas de tablones de anuncios para poder comunicarse electrónicamente de manera efectiva con sus colegas y amigos.
Pero la contribución de Berners-Lee cambió todo aquello de golpe y, a mediados de la década de 1990, había tres grandes navegadores gráficos que competían por la captación de 5 millones de usuarios. Pronto se hizo evidente, sin embargo, que algo faltaba. Es cierto que las páginas de texto con hipervínculos que nos llevan a otras páginas fue un concepto brillante, pero los resultados no reflejaban el potencial de los ordenadores y de Internet para satisfacer de forma inmediata las necesidades particulares de cada usuario con contenidos que cambian dinámicamente. Utilizar la web era una experiencia árida y poco atractiva, incluso aunque hubiéramos tenido ¡texto en movimiento y GIF animados! Los carritos de la compra, los motores de búsqueda y las redes sociales han alterado sin duda la forma en la que utilizamos la web. En este capítulo, echaremos un breve vistazo a los diversos componentes que forman la web y al software que ayuda a hacer de su uso una experiencia rica y dinámica.
Es necesario empezar a utilizar algunos acrónimos de forma más o menos inmediata. He tratado de explicarlos claramente antes de hacer uso de ellos, pero no hay que preocuparse demasiado por lo que representan o lo que significan sus nombres, porque los detalles los trataremos a medida que vayamos avanzando en el contenido del libro.
HTTP es un estándar de comunicación que gobierna las peticiones y respuestas que se envían entre el navegador, que se ejecuta en el ordenador del usuario final, y el servidor web.
El servidor tiene como función aceptar una petición del cliente e intentar responderle en un archivo de manera efectiva, por lo general mediante la entrega de la página web que ha solicitado. Este es el motivo por el que se utiliza el término servidor. El equivalente por naturaleza del servidor es el cliente, término que se aplica tanto al navegador web como al ordenador en el que se ejecuta.
Entre el cliente y el servidor puede haber otros equipos, como enrutadores, proxies, pasarelas, etc. Cumplen diferentes funciones para garantizar que las solicitudes y las respuestas se transfieran correctamente entre el cliente y el servidor. Habitualmente se utiliza Internet como medio para enviar esta información. Algunos de estos dispositivos intermedios también pueden ayudar a acelerar la respuesta de Internet, almacenan páginas o información de forma local en lo que se denomina una caché y, a continuación, sirven este contenido a los clientes directamente desde la caché, en lugar de tener que transferirlo desde el servidor de origen.
Un servidor web normalmente puede manejar múltiples conexiones de forma simultánea, y cuando no está comunicándose con un cliente, se dedica a escuchar para detectar una conexión entrante. Cuando llega una conexión, el servidor envía una respuesta para confirmar su recepción.
En su nivel más básico, el proceso de solicitud/respuesta consiste en una pregunta que formula el navegador web al servidor web para que este le envíe una página web, y el servidor le envía la página. El navegador se encarga de mostrar la página (ver Figura 1-1).
Figura 1-1. Secuencia básica de solicitud/respuesta entre cliente/servidor
Los pasos en la secuencia de solicitud y respuesta son los siguientes:
1. Introduces http://server.com en la barra de direcciones del navegador.
2. El navegador busca la dirección del protocolo Internet (IP) de server.com.
3. El navegador emite la solicitud de la página de inicio de server.com.
4. La solicitud viaja por Internet y llega al servidor web de server.com.
5. El servidor web, una vez recibida la petición, busca la página web en su disco.
6. El servidor web recupera la página de su disco y la envía al navegador.
7. El navegador muestra la página web.
Para una página web normal, este proceso también se lleva a cabo para cada objeto dentro de la página, ya sea un gráfico, un vídeo integrado o un archivo flash, o incluso una plantilla CSS.
En el paso 2, observamos que el navegador busca la dirección IP de server.com. Cada máquina conectada a Internet tiene una dirección IP (incluido nuestro ordenador) pero generalmente accedemos a los servidores web utilizando un nombre, como por ejemplo google.com. Como probablemente ya sabes, el navegador consulta un servicio adicional de Internet llamado Servicio de Nombres de Dominio (DNS) para encontrar la dirección IP asociada al servidor y, posteriormente, la utiliza para comunicarse con el ordenador.
Para páginas web dinámicas, el procedimiento es un poco más complicado, porque puede ser una mezcla de PHP y MySQL. Por ejemplo, supongamos que hacemos clic sobre la imagen de un impermeable. A continuación, PHP creará una petición usando el lenguaje de base de datos estándar, SQL (muchos de cuyos comandos aprenderás en este libro) y la enviará al servidor MySQL. El servidor MySQL devolverá la información del impermeable que hemos seleccionado, el código PHP lo encerrará todo en HTML, y el servidor lo enviará al navegador (ver la Figura 1-2).
Figura 1-2. Secuencia dinámica de solicitud/respuesta entre cliente/servidor
Los pasos son los siguientes:
1. Tecleas http://server.com en la barra de direcciones del navegador.
2. El navegador busca la dirección IP de server.com.
3.El navegador envía una solicitud de la página de inicio del servidor web, a esa dirección.
4. La solicitud viaja por Internet y llega al servidor web server.com.
5. El servidor web, una vez recibida la petición, recupera la página de inicio de su disco duro.
6. Con la página de inicio ahora en memoria, el servidor web se da cuenta de que es un archivo que incorpora PHP y pasa la página al intérprete de PHP.
7. El intérprete de PHP ejecuta el código PHP.
8. Algunos de los códigos PHP contienen sentencias SQL, que el intérprete PHP ahora pasa al motor de base de datos MySQL.
9. La base de datos MySQL devuelve los resultados de las sentencias al intérprete PHP.
10. El intérprete PHP devuelve los resultados del código PHP ejecutado, junto con el archivo de la base de datos MySQL, al servidor web.
11. El servidor web devuelve la página al programa cliente que la ha solicitado, y este la muestra al usuario.
Aunque es útil conocer este proceso para saber cómo funcionan los tres elementos juntos, en la práctica no es necesario que nos preocupemos por ellos, porque todos se ejecutan automáticamente.
Las páginas HTML, devueltas al navegador en cada uno de los ejemplos, pueden contener código en JavaScript, que interpretará localmente el cliente, el cual podría iniciar otra petición, de la misma manera que lo podrían hacer los objetos integrados o las imágenes.
Al principio de este capítulo, introduje el mundo de la Web 1.0, pero no había transcurrido mucho tiempo cuando se dieron prisa en crear la Web 1.1, que incorporaba el desarrollo de mejoras en el navegador como Java, JavaScript, JScript (una variante con pocos cambios de JavaScript de Microsoft) y ActiveX. Por lo que respecta al servidor, se estaban realizando progresos en la interfaz de pasarela común (CGI) con lenguajes de scripting (secuencia de comandos) como Perl (una alternativa al lenguaje PHP) y scripts, insertando el contenido de un archivo (o la salida de la ejecución de un programa local) en otro, de forma dinámica.
Una vez calmados los ánimos, tres tecnologías principales se diferenciaban de las demás. Aunque Perl seguía siendo un lenguaje de programación con un gran número de seguidores, la simplicidad de PHP y los enlaces integrados al programa de base de datos MySQL habían ganado la partida: contaban con más del doble del número de usuarios. Y JavaScript, que se había convertido en una parte esencial de la ecuación para manipular dinámicamente Cascading Style Sheets (CSS) y HTML, ahora asumía la tarea aún más difícil de manejar el lado de cliente de la comunicación asíncrona (el intercambio de datos entre el cliente y el servidor después de que se haya cargado una página web). Mediante el uso de la comunicación asíncrona, las páginas web realizan el tratamiento de datos y envían solicitudes a los servidores web en segundo plano, sin que el usuario de la web sea consciente de que esto esté sucediendo.
Sin duda la naturaleza simbiótica de PHP y MySQL ayudó a impulsar a ambos, pero ¿qué fue lo que más atrajo a los desarrolladores de estos dos lenguajes de programación? La respuesta más sencilla es la facilidad con la que se pueden utilizar para crear rápidamente elementos dinámicos en sitios web. MySQL es un sistema de base de datos rápido y potente, pero al mismo tiempo fácil de usar, que ofrece casi todo lo que un sitio web necesita para encontrar y servir datos a los navegadores. Cuando PHP se alía con MySQL para almacenar y recuperar estos datos, tenemos los componentes fundamentales necesarios para poder desarrollar sitios de redes sociales, lo que marca el comienzo de la Web 2.0.
Y cuando también se incorporan al conjunto JavaScript y CSS, disponemos de la receta para crear sitios web altamente dinámicos e interactivos, especialmente porque ahora hay una amplia gama de sofisticados entornos de funciones JavaScript a los que se puede recurrir para acelerar de forma real el desarrollo web, como la conocida biblioteca jQuery, que ahora es probablemente el recurso más habitual que utilizan los programadores para acceder a las funciones de comunicación asíncrona.
Después de que Oracle comprara Sun Microsystems (los propietarios de MySQL), surgió en la comunidad de desarrolladores la preocupación de que MySQL no siguiera siendo totalmente de software libre, así que, para asegurar esto, MariaDB se escindió de MySQL para mantenerse como software libre bajo licencia GNU GPL. El desarrollo de MariaDB está liderado por algunos de los desarrolladores que crearon MySQL y su compatibilidad es extremadamente alta con MySQL. Por lo tanto, podemos encontrar instalado MariaDB en algunos servidores en lugar de MySQL, pero en lo que respecta a los ejemplos de este libro, no hay que preocuparse, todos ellos funcionan igualmente bien tanto con MySQL como con MariaDB, sistema que se basa en el mismo código base que MySQL Server 5.5. A todos los efectos se pueden intercambiar y no se aprecia ninguna diferencia.
De todos modos, muchos de los temores iniciales parecen haberse disipado, ya que MySQL sigue siendo de software libre, y Oracle solamente cobra por el soporte y las ediciones que proporcionan características adicionales como la georreplicación y el escalado automático. Sin embargo, a diferencia de MariaDB, la comunidad ya no gestiona MySQL, así que si tenemos en cuenta que MariaDB siempre estará ahí por si alguna vez se necesita, proporcionará mucha tranquilidad a los desarrolladores y, probablemente, garantice que el mismo MySQL siga siendo de software libre.
Con PHP, integrar la actividad dinámica en páginas web es una cuestión sencilla. Cuando le asignamos a las páginas la extensión .php, tienen acceso instantáneo a este lenguaje de scripting. Desde el punto de vista del desarrollador, todo lo que hay que hacer es escribir código como el siguiente:
<?php
echo " Today is " . date("l") . ". ";
?>
Here's the latest news.
La apertura <?php le dice al servidor web que permita al programa PHP interpretar el código que sigue a continuación hasta la etiqueta ?>. Fuera de este constructor, todo se envía al cliente directamente como HTML. Entonces, el texto Here's the latest news. se envía al navegador, y dentro de las etiquetas PHP, la función integrada date (fecha), muestra el día en curso de la semana de acuerdo con la hora del sistema del servidor.
La salida final de las dos partes será:
Today is Wednesday. Here's the latest news.
PHP es un lenguaje flexible, y algunos prefieren colocar el constructor PHP directamente al lado del código PHP, así:
Today is <?php echo date("l"); ?>. Here's the latest news.
Hay incluso más posibilidades de formatear y dar salida a la información, que explicaré en los capítulos correspondientes a PHP. Lo importante es que con PHP, los desarrolladores web tienen un lenguaje de programación que, aunque no es tan rápido como la compilación del código en C o un lenguaje similar, es increíblemente rápido y también se integra perfectamente con el marcado HTML.
Si tienes la intención de introducir los ejemplos PHP de este libro en un programa editor para estudiarlos conmigo, debes acordarte de agregar <? php delante y ?> después de ellos, para tener la seguridad de que el intérprete PHP los procesa. Para hacerlo más fácil, tal vez desees preparar un archivo llamado example.php con esas etiquetas en su lugar correspondiente.
Al utilizar PHP, tenemos un control ilimitado sobre nuestro servidor web. Ya sea que necesitemos modificar HTML sobre la marcha, procesar una tarjeta de crédito, añadir detalles de usuario a una base de datos o buscar información de un sitio web de terceros. Podemos hacerlo todo en los mismos archivos PHP en los que reside el propio HTML.
Por supuesto, no tiene mucho sentido cambiar a una salida HTML dinámica a menos que también tengamos un medio para rastrear la información que los usuarios proporcionan a nuestro sitio web a medida que lo utilizan. En los primeros tiempos de la web, muchos sitios utilizaban archivos de texto "plano" para almacenar datos como nombres de usuarios y contraseñas. Pero este enfoque podía causar problemas si el archivo no estaba adecuadamente bloqueado contra la corrupción de múltiples accesos simultáneos. Además, un archivo plano puede crecer hasta cierto punto antes de que sea difícil de manejar, por no mencionar la dificultad de intentar fusionar archivos y realizar búsquedas complejas en un periodo de tiempo razonable.
Ahí es donde las bases de datos relacionales con consultas estructuradas se convierten en esenciales. Y MySQL, al poderse utilizar e instalar libremente en un gran número de servidores web de Internet, viene magníficamente para la ocasión. Es un sistema de gestión de bases de datos robusto y excepcionalmente rápido que utiliza comandos en inglés.
El nivel más alto de la estructura MySQL es una base de datos, dentro de la cual pueden existir una o más tablas que contienen los datos. Por ejemplo, supongamos que estamos trabajando en una tabla llamada users(usuarios), dentro de la cual hemos creado columnas para surname (apellido) firstname (nombre) y email (correo electrónico), y ahora deseamos añadir otro usuario. Un comando que podemos usar para hacerlo es el siguiente:
INSERT INTO users VALUES('Smith', 'John', '[email protected]');
Anteriormente habremos utilizado otros comandos para crear la base de datos y la tabla, y para configurar todos los campos correctamente, pero el comando SQL INSERT en este caso muestra lo sencillo que puede ser añadir nuevos datos a una base de datos. SQL es un lenguaje diseñado a principios de los años 70 que recuerda a uno de los lenguajes de programación más antiguos, COBOL. Sin embargo, se adapta muy bien a las consultas de bases de datos, por lo que sigue utilizándose después de todo este tiempo.
Es igualmente fácil buscar datos. Supongamos que tenemos la dirección de correo electrónico de un usuario y necesitamos buscar el nombre de esa persona. Para ello, podemos generar una consulta MySQL como la siguiente:
SELECT surname,firstname FROM users WHERE
email='[email protected]';
MySQL devolverá Smith, John y cualesquiera otros pares de nombres y apellidos que puedan estar asociados con esa dirección de correo electrónico en la base de datos.
Como es de esperar, podemos hacer mucho más con MySQL de lo que hacen los comandos básicos INSERT y SELECT. Por ejemplo, se pueden combinar conjuntos de datos relacionados para reunir información relacionada, pedir resultados mediante órdenes muy variadas, hacer coincidencias parciales cuando solo conocemos una parte de la cadena que estamos buscando, devolver solo el enésimo resultado, etc.
Con PHP, podemos hacer todas estas llamadas directamente a MySQL sin que tener que acceder a la interfaz de línea de comandos MySQL. Esto significa que podemos guardar los resultados en matrices para procesar y realizar búsquedas múltiples, cada una dependiente de los resultados devueltos de las anteriores, para profundizar en el elemento de datos que necesitamos.
Para conseguir un mayor rendimiento, como veremos más adelante, hay funciones adicionales incorporadas a MySQL a las que podemos invocar para ejecutar eficientemente operaciones habituales dentro de MySQL, en lugar de crearlas a partir de múltiples llamadas de PHP a MySQL.
La más antigua de las tres tecnologías básicas expuestas en este libro, JavaScript, se creó para permitir el acceso de la programación a todos los elementos de un documento HTML. En otras palabras, proporcionaba un medio para la interacción dinámica del usuario, como la comprobación de la validez de la dirección de correo electrónico en formularios de entrada y la visualización de indicaciones como "¿Querías realmente decir eso?" (sin embargo, no se puede confiar en esta tecnología para temas de seguridad, que siempre se deben llevar a cabo en el servidor web).
Combinado con CSS (ver la siguiente sección), JavaScript es el responsable que hay detrás de las páginas web dinámicas que cambian ante nuestros propios ojos, a diferencia del caso en el que el servidor devuelve una página nueva.
Sin embargo, JavaScript también puede resultar difícil de usar, debido a algunas diferencias importantes entre las formas en las que los diferentes diseñadores de navegadores han elegido implementarlo. Esto sucedió principalmente cuando algunos fabricantes trataron de incluir funcionalidades adicionales a sus navegadores a expensas de la compatibilidad con sus rivales.
Afortunadamente, los desarrolladores han entrado en razón y se han dado cuenta de la necesidad de una compatibilidad total entre sí, por lo que hoy en día es menos exigente tener que optimizar nuestro código para diferentes navegadores. Sin embargo, aún quedan millones de usuarios que utilizan navegadores heredados, y este seguirá siendo probablemente el caso durante muchos años. Afortunadamente, hay soluciones para los problemas de incompatibilidad; más tarde, en este libro, veremos las bibliotecas y técnicas que nos permiten poder ignorar con total seguridad estas diferencias.
Por ahora, veamos cómo usar JavaScript básico, aceptado por todos los navegadores:
<script type="text/javascript">
document.write("Today is " + Date() );
</script>
Este fragmento de código le dice al navegador web que interprete todo dentro de las etiquetas <script> como JavaScript, y el navegador lo hace escribiendo el texto Today is en el documento, junto con la fecha, mediante la función JavaScript Date. El resultado será algo así:
Today is Sun Jan 01 2017 01:23:45
A menos que necesitemos especificar una versión concreta de JavaScript, se puede normalmente omitir type="text/javascript" y solo usar <script> para iniciar la interpretación de JavaScript.
Como se mencionó anteriormente, JavaScript se desarrolló originalmente para ofrecer un control dinámico sobre los diversos elementos dentro de un documento HTML, y ese sigue siendo su principal cometido. Pero cada vez más, JavaScript se utiliza para la comunicación asíncrona, el proceso de acceso al servidor web en segundo plano.
La comunicación asíncrona es lo que permite que las páginas web empiecen a parecerse a los programas independientes, porque no hay que volverlas a cargar en su totalidad para mostrar un nuevo contenido. En lugar de eso, una llamada asíncrona puede incorporar y actualizar un solo elemento en una página web, como cambiar tu fotografía en un sitio de redes sociales o reemplazar un botón en el que se hace clic para responder a una pregunta. Este tema se trata con detalle en el Capítulo 17.
Después, en el Capítulo 21, echamos un vistazo al entorno de trabajo de jQuery, que podemos usar para evitar tener que reinventar la rueda cuando necesitamos un código rápido de navegador cruzado para manipular nuestras páginas web. Por supuesto, también hay otros entornos de trabajo disponibles, pero jQuery es, con diferencia, el más popular. Debido a su mantenimiento continuo, es extremadamente fiable y es una herramienta importante en el kit de utilidades de muchos desarrolladores web experimentados.
CSS es el compañero indispensable de HTML, con el que se asegura que el texto HTML y las imágenes se presentan de forma coherente y adecuada en la pantalla del usuario. Con la aparición del estándar CSS3 en los últimos años, CSS ofrece ahora un nivel de interactividad dinámica anteriormente soportada solo por JavaScript. Por ejemplo, no solo se puede cambiar el estilo de cualquier elemento HTML para modificar sus dimensiones, colores, bordes, espaciado, etc., sino que ahora también podemos añadir transiciones animadas y transformaciones a las páginas web, con solo unas pocas líneas de CSS.
El uso de CSS puede ser tan simple como insertar algunas reglas entre las etiquetas <style> y </style> en el encabezamiento de una página web, así:
<style>
p {
text-align:justify;
font-family:Helvetica;
}
</style>
Estas reglas cambian la alineación predeterminada del texto de la etiqueta <p> para que los párrafos contenidos en ella estén totalmente justificados y utilicen la fuente helvética.
Como veremos en el Capítulo 18, existen muy variadas formas de diseñar reglas CSS; las podemos incluir directamente dentro de etiquetas o guardar un conjunto de reglas en un archivo externo, que se carga por separado. Esta flexibilidad no solo nos permite estilizar nuestro HTML con precisión, sino que también podemos, por ejemplo, proporcionar la funcionalidad integrada de movimiento de los objetos cuando el ratón pasa sobre ellos. También aprenderás a acceder a todas las funciones de un elemento desde JavaScript y HTML.
A pesar de la utilidad de todas estas incorporaciones a los estándares web, no fueron suficientes para desarrolladores cada vez más ambiciosos. Por ejemplo, todavía no existía una forma sencilla de manipular gráficos en un navegador web sin recurrir a complementos como Flash. Y lo mismo ocurría con la inserción de audio y vídeo en las páginas web. Además, varias inconsistencias molestas se habían colado en HTML durante su evolución.
Por lo tanto, para aclarar todo esto y llevar Internet más allá de la Web 2.0 y a su próxima iteración, se creó un nuevo estándar para HTML con el fin de subsanar todas estas deficiencias: HTML5. Su desarrollo comenzó ya en 2004, cuando la Fundación Mozilla y Opera Software (desarrolladores de dos populares webs) redactaron el primer borrador, pero no fue hasta principios de 2013, año en el que se envió el borrador definitivo al World Wide Web Consortium (W3C), el organismo internacional que gobierna los estándares de calidad de la web.
El desarrollo de HTML5 ha necesitado varios años, pero ahora estamos en una fase muy sólida y estable de la versión 5.1 (desde 2016). Es un ciclo interminable de desarrollo. Sin embargo, es seguro que con el tiempo aumentará su funcionalidad. Algunas de las mejores características de HTML5 para el manejo y visualización de los media incluyen el <audio>, el <video> y los elementos <canvas> y (lienzo), que añaden sonido, vídeo y gráficos avanzados. Todo lo que necesitas saber sobre estos y todos los demás aspectos de HTML5 se trata con todo detalle a partir del Capítulo 23.
Una de las pequeñas cosas que me gusta de la especificación HTML5 es que la sintaxis XHTML ya no es necesaria para los elementos de auto cierre. Antes, se podía visualizar un salto de línea con el elemento <br>. Luego, para asegurar la compatibilidad futura con XHTML (el sustituto que se había planeado para HTML, lo que nunca ocurrió), se cambió a <br />, en el que se agregó un carácter de cierre / (ya que se esperaba que todos los elementos incluyeran una etiqueta de cierre con este carácter). Pero ahora las cosas han cambiado por completo, y se puede usar cualquier versión de este tipo de elementos. Por lo tanto, en aras de la brevedad y de tener que pulsar menos teclas, en este libro he vuelto al estilo anterior de <br>, <hr>, etc.
Además de PHP, MySQL, JavaScript, CSS y HTML5, hay un sexto héroe en la web dinámica: el servidor web. En el caso de este libro, este es el servidor web Apache. Hemos discutido un poco sobre lo que hace un servidor web durante el intercambio HTTP entre servidor/cliente, pero hace muchas más cosas entre bastidores.
Por ejemplo, Apache no solo sirve archivos HTML, sino que maneja una amplia gama de archivos, desde imágenes y archivos Flash hasta archivos de audio MP3, RSS (Really Simple Syndication), etc. Y estos objetos no tienen que ser archivos estáticos como las imágenes GIF. Todos ellos pueden estar generados por programas como scripts PHP. Así es: PHP puede incluso crear imágenes y otros archivos para nosotros, ya sea sobre la marcha o por adelantado para servirlos más tarde.
Para hacer esto, normalmente tiene módulos bien precompilados en Apache o PHP o bien se los llama durante la ejecución. Uno de estos módulos es la biblioteca GD (Graphics Draw), que PHP usa para crear y manejar gráficos.
Apache también soporta una amplia gama de módulos propios. Además de PHP, lo más importante para nuestros propósitos como programadores web son los módulos que se encargan de la seguridad. Otros ejemplos son el módulo Rewrite, que permite al servidor web manejar un rango de tipos de URL y reescribirlos adaptándolos a sus propios requerimientos internos, y el módulo Proxy, que se puede utilizar para servir páginas que se solicitan con frecuencia, desde una caché, para agilizar la carga del servidor.
Más adelante, en el libro, veremos cómo usar algunos de estos módulos para mejorar las características que proporcionan las tres principales tecnologías.
Actualmente vivimos en un mundo de dispositivos informáticos móviles interconectados, y el concepto de desarrollar sitios web solo para ordenadores de mesa se ha vuelto bastante anticuado. En lugar de esto, los desarrolladores ahora pretenden desarrollar sitios y aplicaciones web sensibles que se adapten al entorno en el que se están ejecutando.
Así que como novedad en esta edición, explico cómo se pueden crear fácilmente este tipo de productos solo con las tecnologías detalladas en este libro, junto con la potente tecnología jQuery Mobile de funciones sensibles JavaScript. Con ella, podrás centrarte en el contenido y usabilidad de tus sitios y aplicaciones web, sabiendo que la forma en que se muestran se optimizará automáticamente para una amplia gama de dispositivos informáticos diferentes: una cosa menos de la que preocuparte.
Para mostrar cómo hacer pleno uso de sus capacidades, en el capítulo final de este libro se crea un sencillo sitio web de ejemplo de red social. Para ello utilizamos jQuery Mobile, para que tengas capacidad de respuesta y estés seguro de que se presenta adecuadamente en cualquier dispositivo, desde la pantalla de un pequeño teléfono móvil a una tablet o a un ordenador de mesa.
Las tecnologías que se tratan en este libro son de software libre: a cualquier persona se le permite leer y cambiar el código. Se ha debatido a menudo si este hecho es o no la razón por la que estas tecnologías son tan populares, sea como sea, PHP, MySQL y Apache son las tres herramientas que se usan con más frecuencia en sus categorías. Lo que se puede decir de manera definitiva, sin embargo, es que el hecho de que sean de software libre significa que se han desarrollado en la comunidad por equipos de programadores que escriben las características que ellos mismos quieren y necesitan, y el código original está disponible para que todos tengamos acceso al mismo e incluso podamos modificarlo. Los errores se pueden encontrar rápidamente y las infracciones de seguridad se pueden prevenir antes de que ocurran.
Hay otra ventaja: todos estos programas son gratuitos. No hay que preocuparse por tener que comprar licencias adicionales si tienes que ampliar tu sitio web y añadir más servidores, y no necesitas estudiar el presupuesto antes de decidir si deseas actualizar estos productos a las últimas versiones.
La verdadera belleza de PHP, MySQL, JavaScript (a veces con la ayuda de jQuery u otros entornos de trabajo), CSS y HTML5 es la maravillosa forma en que todos ellos trabajan juntos para crear contenido web dinámico: PHP gestiona el trabajo principal en el servidor web, MySQL gestiona los datos y la combinación de CSS y JavaScript se encarga de la presentación de la página web. JavaScript también puede hablar con tu código PHP en el servidor web siempre que necesites actualizar algo (ya sea en el servidor o en la página web). Y con las nuevas y potentes funciones de HTML5, como el lienzo, el audio, el vídeo y la geolocalización, puedes hacer que tus páginas web sean muy dinámicas, interactivas y estén repletas de multimedia.
Sin usar código de programación, vamos a resumir el contenido de este capítulo estudiando el proceso de combinar algunas de estas tecnologías con la característica de comunicación asíncrona cotidiana que utilizan muchos sitios web: comprobar si ya existe un nombre de usuario deseado en el sitio cuando un usuario se está registrando para crear una nueva cuenta. Un buen ejemplo de esto se puede ver en Gmail (ver la Figura 1-3).
Figura 1-3. Gmail usa la comunicación asíncrona para verificar la disponibilidad de nombres de usuario
Los pasos a seguir en este proceso asíncrono serán parecidos a los siguientes:
1. El servidor genera el código HTML para crear el formulario web, en el que se pide la información necesaria, como el nombre de usuario, nombre, apellido y dirección de correo electrónico.
2. Al mismo tiempo, el servidor añade código JavaScript a HTML para monitorizar el cuadro de entrada de nombre de usuario y comprobar dos cosas: si se ha tecleado texto y si la entrada ha dejado de estar seleccionada debido a que el usuario hizo clic en otro cuadro de entrada.
3. Una vez que se ha introducido el texto y se ha deseleccionado el campo, el código JavaScript pasa, en segundo plano, el nombre de usuario que se escribió, a un script PHP en el servidor web y espera una respuesta.
4. El servidor web busca el nombre de usuario y responde a JavaScript en cuanto a si ese nombre ya existe.
5. JavaScript entonces coloca una indicación al lado del cuadro de entrada del nombre de usuario para mostrar si el nombre está disponible, tal vez una marca de verificación verde o un gráfico con una cruz roja, junto con alguna indicación de texto.
6. Si el nombre de usuario no está disponible y el usuario sigue enviando el formulario, JavaScript interrumpe la presentación y vuelve a hacer hincapié (quizás con un gráfico más grande y/o un cuadro de aviso) en que el usuario necesita elegir otro nombre de usuario.
7. Opcionalmente, una versión mejorada de este proceso podría incluso examinar el nombre de usuario y sugerir una alternativa que esté disponible en ese momento.
Todo esto se lleva a cabo discretamente, en segundo plano, y hace que la experiencia del usuario sea cómoda e impecable. Sin comunicación asíncrona, se tendría que enviar todo el formulario al servidor, que entonces devolvería el HTML y resaltaría cualquier error. Sería una solución viable, pero ni de lejos tan ordenada o placentera como el procesamiento de los campos del formulario sobre la marcha.
Sin embargo, la comunicación asíncrona se puede utilizar para mucho más que una simple verificación y procesamiento de entradas. Vamos a explorar muchas otras cosas que podemos hacer con ella más adelante en este libro.
En este capítulo, he presentado una completa introducción a las tecnologías básicas de PHP, MySQL, JavaScript, CSS y HTML5 (así como Apache), y has aprendido cómo funcionan juntas. En el Capítulo 2, veremos cómo puedes instalar tu propio servidor de desarrollo web en el que practicar todo lo que vas a aprender.
1. ¿Cuáles son los cuatro componentes (como mínimo) necesarios para crear una página web completamente dinámica?
2.¿Qué significa HTML?
3. ¿Por qué el nombre MySQL contiene las letras SQL?
4. PHP y JavaScript son lenguajes de programación que generan resultados dinámicos para páginas web. ¿Cuál es su principal diferencia, y por qué los usarías a los dos?
5. ¿Qué significa CSS?
6. Enumera tres nuevos elementos principales introducidos en HTML5.
7. Si encuentras un error (que es raro) en una de las herramientas de software libre, ¿cómo crees que podrías arreglarlo?
8. ¿Por qué un framework como jQuery Mobile es tan importante para desarrollar sitios web y aplicaciones web modernas?
Consulta "Respuestas del Capítulo 1" en la página 705 del Apéndice A para comprobar las respuestas a estas preguntas.
Si deseas desarrollar aplicaciones de Internet pero no tienes tu propio servidor de desarrollo, tendrás que subir cada modificación que hagas a un servidor situado en algún lugar de la web antes de que puedas probarla.
Incluso en el caso de una conexión de banda ancha de alta velocidad, esto puede suponer una importante pérdida de tiempo de desarrollo. Sin embargo, en un ordenador local las pruebas pueden ser tan sencillas como guardar una actualización (que normalmente es cuestión de hacer clic una vez en un icono) y luego pulsar el botón Refresh (Actualizar) en el navegador.
Otra ventaja de disponer de un servidor de desarrollo es que cuando programas y haces pruebas, no tienes que preocuparte de errores embarazosos o por problemas de seguridad. Sin embargo, cuando tu aplicación está en un sitio web público, tienes que estar al tanto de lo que la gente puede ver o hacer con ella. Es mejor solucionarlo todo mientras todavía la tienes instalada en un equipo de casa o de la oficina, los cuales están presumiblemente protegidos por cortafuegos y otras medidas de seguridad.
Una vez que tengas tu propio servidor de desarrollo, te preguntarás cómo has podido sobrevivir sin uno. Es muy fácil crear uno. Solo tienes que seguir los pasos que se detallan en las siguientes secciones y utilizar las instrucciones apropiadas para PC, Mac o para el sistema Linux.
En este capítulo, trataremos de la experiencia web solo el lado del servidor, como se describe en el Capítulo 1. Pero para probar los resultados de tu trabajo, especialmente cuando más adelante, en este libro, empecemos a usar JavaScript, CSS y HTML5, lo ideal sería tener funcionando los principales navegadores web en algún sistema que te resulte cómodo. Siempre que sea posible, en la lista de navegadores deben figurar al menos Microsoft Edge, Mozilla Firefox, Opera, Safari y Google Chrome. Si quieres tener la seguridad de que tus sitios se vean bien en dispositivos móviles, debes tratar de organizar el acceso a una amplia gama de dispositivos iOS y Android.
WAMP, MAMP y LAMP son abreviaturas de "Windows, Apache, MySQL y PHP", "Mac, Apache, MySQL y PHP" y "Linux, Apache, MySQL y PHP".
Cada una de estas abreviaturas describe una configuración funcional que se utiliza para desarrollar páginas web dinámicas en Internet.
WAMP, MAMP y LAMP se presentan en forma de paquetes en los que los programas están agrupados, lo que evita tener que instalarlos y configurarlos por separado. Esto significa que puedes descargar e instalar un solo programa y seguir algunas indicaciones sencillas para poner en marcha el servidor de desarrollo web de forma rápida y con las mínimas molestias.
Durante la instalación, se crean varias configuraciones por defecto. Las configuraciones de seguridad de una instalación de este tipo no serán tan estrictas como las de un servidor web de producción, ya que su desarrollo está optimizado para uso local. Por estas razones, no debes instalar estas configuraciones como un servidor de producción.
Sin embargo, para desarrollar y probar sitios web y aplicaciones, debería ser suficiente utilizar una de estas instalaciones.
Si decides no utilizar WAMP/MAMP/LAMP para crear tu sistema de desarrollo, debes saber que puede que tengas que dedicar mucho tiempo a la descarga e integración de las distintas partes, y es posible que requiera mucha investigación para configurarlo todo completamente. Pero, sin embargo, si ya tienes todos los componentes instalados e integrados entre sí, estos deben funcionar con los ejemplos de este libro.
Hay varios servidores WAMP disponibles, cada uno de los cuales ofrece configuraciones ligeramente diferentes. De las varias opciones de software libre y gratuito, una de las mejores es AMPPS. Puedes descargar la aplicación haciendo clic en el botón de la página de inicio (http://amppscom/), del sitio web, que se muestra en la Figura 2-1.
Te recomiendo que descargues siempre la última versión estable (mientras escribo esto, es la 3.8, que tiene un tamaño aproximado de 128 MB). Los distintos instaladores de Windows, macOS y Linux aparecen en la página de descargas.
Figura 2-1. Sitio web de AMPPS
Durante la vigencia de esta edición, algunas de las pantallas y opciones que se muestran aquí pueden cambiar. Si es así, usa el sentido común para proceder de la manera más parecida posible a la secuencia de acciones que se indican.
Una vez que hayas descargado el instalador, ejecútalo y se abrirá una ventana como la que se muestra en la Figura 2-2. Sin embargo, antes de llegar a esa ventana, si utilizas un programa antivirus o tienes activado el control de cuentas de usuario de Windows, es posible que primero se te muestren uno o más avisos y tengas que hacer clic en Yes y/o OK para continuar con la instalación.
Haz clic en Next (Siguiente), después de lo cual debes aceptar el acuerdo. Vuelve a hacer clic en Next y, luego, otra vez para pasar la pantalla de información. Ahora tendrás que confirmar el lugar en el que se va a instalar AMPPS. Probablemente te sugerirá algo como lo siguiente, en función de la letra del disco duro principal de tu ordenador, pero lo puedes cambiar si lo deseas:
C:\Program Files (x86)\Ampps
Figura 2-2. Ventana de apertura del instalador
Una vez que hayas decidido dónde instalar AMPPS, haz clic en Next, elige un nombre de carpeta en el menú Start (Inicio) y vuelve a hacer clic en Next. Puedes elegir qué iconos deseas instalar, como se muestra en la Figura 2-3. En la pantalla siguiente, haz clic en el botón Install (Instalar) para iniciar el proceso.
Figura 2-3. Elección de los iconos que deseas instalar
La instalación durará unos minutos, después de los cuales verás la pantalla de finalización de la Figura 2-4, y puedes hacer clic en Finish (Terminar).
Figura 2-4. AMPPS ya está instalado