0% encontró este documento útil (0 votos)
154 vistas30 páginas

U3 Desarrollo de Aplicaciones Web Con PHP

Este documento presenta una unidad sobre el desarrollo de aplicaciones web con PHP. Explica conceptos como el paso de parámetros, formularios, cookies, sesiones, bases de datos relacionales y no relacionales, y ficheros. Cubre temas como la conexión y manipulación de datos en bases de datos, la implementación de formularios de login, cookies y sesiones, y el envío de correo electrónico y subida de archivos. El objetivo es que al finalizar la unidad, el lector comprenda estos conceptos y pueda aplicarlos para crear aplic

Cargado por

mauropeluche
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
154 vistas30 páginas

U3 Desarrollo de Aplicaciones Web Con PHP

Este documento presenta una unidad sobre el desarrollo de aplicaciones web con PHP. Explica conceptos como el paso de parámetros, formularios, cookies, sesiones, bases de datos relacionales y no relacionales, y ficheros. Cubre temas como la conexión y manipulación de datos en bases de datos, la implementación de formularios de login, cookies y sesiones, y el envío de correo electrónico y subida de archivos. El objetivo es que al finalizar la unidad, el lector comprenda estos conceptos y pueda aplicarlos para crear aplic

Cargado por

mauropeluche
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 30

Unidad 3

Desarrollo de
aplicaciones web
con PHP

Desarrollo web
en entorno servidor
Índice Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.1. Paso de parámetros

3.2. Formularios
3.2.1. Formulario de login
3.2.2. Formulario y procesamiento en un solo fichero
3.2.3. Subida de ficheros

3.3. Cookies

3.4. Sesiones. Seguridad: usuarios y roles

3.5. Envío de correo electrónico

3.6. Bases de datos relacionales


3.6.1. Conexión a la base de datos
3.6.2. Recuperación y presentación de datos
3.6.3. Inserción, borrado y actualización
3.6.4. Transacciones

3.7. Bases de datos no relacionales


3.7.1. Instalación y puesta en marcha de MongoDB
3.7.2. Conexión desde PHP

3.8. Ficheros
3.8.1. Ficheros XML

3.9. Pruebas

3.10. Depuración de errores


Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Introducción
En esta unidad se van a definir los métodos que se utilizan en el
protocolo HTTP para establecer una comunicación entre cliente
y servidor, donde los más utilizados son el método GET y POST.
Posteriormente se realizará una introducción a los formularios
HTML y se establecerá un sistema de login básico, de proce-
samiento de datos en el mismo fichero y de subida de archivos.

Se introducirá también el concepto de cookies, y cómo imple-


mentarlo en el script, y a controlar las sesiones en el servidor
haciendo uso de ellas.

Se profundizará en las bases de datos relacionales, detallando


cómo establecer una conexión a ellas, cómo visualizar su con-
tenido y cómo modificar sus valores y lo mismo con las bases de
datos no relacionales.

Y, por último, se verá cómo manejar ficheros, trabajar con fiche-


ros XML, esquemas para validar estos ficheros, y a cómo realizar
pruebas de código y depurarlo.

Al finalizar esta unidad


+ Conoceremos el modo de pasar pa- + Adquiriremos nociones de cómo utilizar
rámetros a un script las sesiones y las variables de sesión

+ Aprenderemos a realizar y validar + Profundizaremos en el manejo de las


formularios bases de datos

+ Entenderemos la función de las coo- + Descubriremos las herramientas de


kies y cómo implementarlas pruebas y de depuración

3
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.1. Paso de parámetros


A través del protocolo HTTP se definen ocho métodos o ver-
bos que sirven para generar una comunicación entre cliente y
servidor. Los más utilizados son GET (obtener) y POST (enviar).
El método GET se utiliza principalmente para solicitar páginas
web a un servidor, como, por ejemplo, cuando se sigue un hi-
pervínculo o se introduce una dirección en la barra del nave-
gador. Por otro lado, el método POST se utiliza, principalmente,
para enviar formularios al servidor.

Al utilizar el método GET se pueden pasar parámetros al ser-


vidor en la URL. Esto se realiza añadiendo el carácter “?” como
indicador de que se va a pasar una lista de parámetros. Cada
parámetro cuenta con un nombre, a la izquierda del igual, y un
valor, a la derecha. Estos argumentos van divididos entre sí por
el carácter “&”. Un ejemplo puede ser:

http://localhost/tema_3/pagina_web.php?nombre=Carlos

De modo que se está solicitando al servidor localhost el fichero /


ud3/pagina_web.php y se le está pasando un parámetro llama-
do “nombre” de valor “Carlos”. Si se le desea añadir otro parámetro:

http:// localhost/tema_3/pagina_web.php?nombre=
Carlos&apellido=Martinez

Para acceder a los argumentos de la URL desde un bloque


PHP se utiliza el array superglobal $_GET, al que se le pasa un
elemento por cada argumento que tenga la URL. El nombre
del argumento será la clave del elemento del array.

En este ejemplo, si se accede con la ruta

http://localhost/tema_3/pagina_web.php?nombre=Carlos

Devolverá el mensaje de “Hola Carlos”.

Se puede comprobar si los parámetros se han pasado de for-


ma correcta utilizando las funciones empty() o is_null(). En el
caso de que el parámetro no esté presente en la URL, devol-
verán el parámetro de TRUE, aunque si el parámetro está pre-
sente, pero sin valor:

http://localhost/tema_3/pagina_web.php?nombre

La función empty($_GET[“nombre”]) devolverá TRUE, pero is_


null($_GET[“nombre”]) devolerá FALSE.

4
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.2. Formularios
A través de los formularios HTML se pueden enviar datos a un
servidor, el usuario puede rellenar varios campos utilizando
distintos tipos de controles, como campos de texto o botones
de radio y son enviados al servidor al pulsar un botón. El servi-
dor se encarga de procesar los datos del formulario que se ha
recibido y genera la respuesta.

Un sencillo formulario de login en HTML quedaría de la si-


guiente manera:

Imagen 1. Formulario de acceso

Con el atributo action se introduce el destino donde se enviará


el formulario para que se procese. En caso de usar una ruta re-
lativa, se tomará como punto de partida la localización donde
se encuentra el fichero que contenga el formulario.

Con el atributo method se especifica el método HTTP que se


utilizará para la petición. Se suele utilizar POST, pero también
se puede utilizar GET, aunque usando este último los paráme-
tros aparecerán en la URL.

En el interior del elemento form se introducen los campos que


deben ser rellenados por el usuario, y los botones de envío y para
limpiar los campos. Para los campos que van a ser enviados se
utiliza el atributo name, con el que se identifica dentro del script.
Para enviar el formulario se debe apretar el botón de Submit Query.

Imagen 2. Formulario

Para que el script pueda recibir los parámetros que han sido
enviados se utiliza el array superglobal $_POST, y la clave de
cada argumento dentro del array es el atributo name del ele-
mento correspondiente del formulario.

Imagen 3. Array recibido

5
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Con el anterior script se puede observar qué elemento es el


que se recibe con el formulario.

Imagen 4. Array que se recibe con el formulario

Si modificamos el script del fichero que recibe la información


del formulario:

Imagen 5. Script del fichero credenciales.php

Los valores de salida que muestra son:

Imagen 6. Valores de salida de credenciales.php

Si en vez del método POST se hubiera utilizado el método GET,


la URL que se mostraría sería:

localhost/xampp/credenciales.php?usuario=usuario
&contraseña=contraseña

Si se ha utilizado el método POST y se desean conocer los pa-


rámetros, se pueden consultar desde la consola del navega-
dor, el ejemplo que se va a mostrar se ha realizado desde el
navegador Firefox, y se consultan en la parte inferior derecha,
en el apartado de red y al seleccionar la petición correspon-
diente al envío del formulario.

Imagen 7. Consultar parámetros desde la consola del navegador

6
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.2.1. Formulario de login

Como norma general, un formulario de login tiene la función de


verificar que los datos introducidos sean correctos, dando, o no,
acceso al sistema al usuario o mostrando un mensaje de error.

En el anterior ejemplo se ha simulado un formulario de login en


el que se comprueba que el usuario y la contraseña sean co-
rrectos. Para realizar la redirección se utiliza la función header(),
que sirve para escribir en la cabecera de la respuesta HTTP.
Imagen 8. Verificación de datos del formulario
Es muy importante que la función header() se utilice antes de
que se muestre nada por pantalla, por lo que si se intenta lla-
mar a header() después de haber realizado un echo o después
de una etiqueta HTML se producirá un error.

3.2.2. Formulario y procesamiento


en un solo fichero

El formulario HTML y el bloque PHP que se encarga de procesar-


lo se suelen encontrar en el mismo fichero, por lo que se debe
distinguir entre dos casos, cuando se accede al formulario para
rellenar sus campos y cuando se envía para que sea procesado.

Al acceder a la página utilizando el método GET, es decir, al intro-


ducir la URL en el navegador, siguiendo un hipervínculo o con una
redirección con header(Location: ), se mostrará el formulario. Pero si
se accede mediante el método POST significará que el cliente está
enviando el formulario. De este modo se puede distinguir entre los
métodos de acceso consultando $_SERVER [“REQUEST_METHOD”].

Imagen 9. Formulario HTML con bloque PHP en un solo fichero

En el ejemplo anterior se tiene un fichero que une el formulario


HTML con el bloque PHP. Cuando se tiene un fichero donde el
formulario se llama a sí mismo se recomienda utilizar:

7
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

action=”<?php echo htmlspecialchars($_SERVER[“PHP_


SELF”]);?>”

En lugar del nombre del fichero, tal y como aparece en el ejem-


plo. La variable superglobal $_SERVER[“PHP_SELF”] contiene
el nombre del fichero y la función htmlspecialchars() se utiliza
para realizar un filtrado de los caracteres por seguridad.

Se observa que el bloque PHP del inicio solo se ejecutará si


se ha accedido al fichero mediante el método POST, es decir,
al enviar el formulario. Se comprobarán los datos y en caso de
ser correctos se redirigirá a la página de bienvenida. Con ese
reenvío se termina la ejecución del fichero. En caso de no ser
correctos, se crea la variable de $incorrecto con valor TRUE y
se continúa con el script.

El bloque HTML se ejecuta independientemente de si se ha


accedido mediante el método GET o POST (cuando falla la ve-
rificación de datos), y en este bloque existe un bloque PHP que
muestra un mensaje de error en caso de que la variable $inco-
rrecto sea TRUE.

3.2.3. Subida de ficheros

Para realizar una subida de ficheros al servidor se utiliza en el El fichero se almacena temporalmente en del directorio del ser-
formulario el atributo enctype=”multipart”/form-data” y el mé- vidor, y puede moverse a la carpeta que se desee con la función:
todo POST. Para el fichero se utiliza una etiqueta <input type =
“file”>. Mediante este control se abre una ventana para que el move_uploaded_file ($fichero, $destino)
usuario pueda elegir un fichero entre sus archivos.
Si el fichero no se copia a ninguna carpeta, el servidor lo eliminará.

Imagen 10. Script para subir un fichero

El script que se encarga de recibir el formulario dispone de la


Imagen 11. Script para procesar la subida de un archivo
variable global $_FILES que contiene la información del fiche-
ro que se está subiendo. Es un array bidimensional. La primera
dimensión identifica el fichero según el atributo name en el for- En el ejemplo anterior el fichero se encarga de comprobar que
mulario, y en la segunda dimensión se establecen las claves: el archivo que se quiere subir no exceda de cierto tamaño y
también de que la carpeta o directorio donde se quiere subir el
› name: el nombre del fichero en el cliente. archivo exista. En caso de que sea válido, el archivo se moverá
al directorio de “ficheros_subidos”. Para que el script funcione es
› size: el tamaño que tiene el fichero, en bytes. necesario que el directorio ya esté creado y que se tengan los
› type: el tipo MIME del fichero. permisos necesarios para copiar archivos en su interior.

› tmp_name: es el nombre temporal que adopta el archivo


que se ha subido al servidor.

› error: código de error que se asocia con la subida del


archivo.

8
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.3. Cookies
Las cookies son pequeños ficheros que provienen de los ser-
vidores web y que se almacenan en los ordenadores de los
clientes que los visitan. Se encargan de almacenar distintos ti-
pos de información, como la fecha en la que se realizó la última
visita, preferencias de idiomas, etc. En el momento en el que
un cliente efectúa una petición web, está enviando al servidor
las cookies que este pudiera tener.

Para poder trabajar con las cookies se utiliza la función setcoo-


kie (), que tiene la siguiente cabecera:

bool setcookie (string $name [, string $value = “”


[, int $expire 1, string $path = “” [, string
$domain = “ [, bool $secure = FALSE [, bool
$httponly = FALSE ]i][]] )

Los argumentos más importantes son los tres primeros:

1. El primer argumento es el que da el nombre a la cookie.


2. El segundo es el valor que ésta toma.

3. El tercero es la fecha en la que expira la cookie. Se co-


loca en formato de fecha Unix, es decir, con el número
de segundos que han pasado desde el inicio de 1970. Se
suele utilizar la función time(), que se encarga de devol-
ver como valor la fecha actual y se le suma un periodo
de tiempo expresado en segundos.

Como ejemplo, si se quisiera crear una cookie con nombre de


“visitado”, con un valor de “2” y una duración de un día se utiliza:

setcookie (‘visitado’, ‘2’, time() + 3600 * 24 * 1);

Es decir, para establecer la fecha de caducidad se toma la fecha


actual, que es valor que devuelve la función time(), y se le añade
3600 * 24 * 1, que es el número de segundos que hay en 24 horas.

Para destruir la cookie basta con establecer la fecha de cadu-


cidad a una fecha pasada a la actual:

setcookie(‘visitado’, ‘2’, 1);

Las cookies son enviadas como cabeceras de las peticiones


HTTP. Es necesario que se envíen las cabeceras antes de em-
pezar con el cuerpo de la respuesta, es decir, es necesario uti-
lizar la función setcookie() antes de que se escriba la salida, ya
que de otro modo se producirá un error.

9
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Para acceder a las cookies que envía el cliente se utiliza $_


COOKIES, utilizando como clave el nombre que se le dio en
setcookie(). Cabe destacar que, al crear la cookie, esta no será
accesible mediante $_COOKIES hasta la siguiente petición del
cliente. Por ejemplo, el siguiente script daría error:

Imagen 12. Error en la consulta de Cookies

Imagen 13. Creación de un contador de visitas

En el anterior ejemplo se utiliza una cookie para almacenar el


número de veces que entra un cliente a una página web, en el
caso de que no exista la cookie, se creará, y si ya existe incre-
mentará el número de visita a la página en uno.

Es posible acceder a las cookies que hay almacenadas desde


el navegador, por ejemplo, en Firefox se puede acceder a ellas
a través del menú Opciones, en la sección Privacidad y Seguri-
dad en el apartado de “Cookies y datos del sitio”.

También es posible ver las cookies que envía el cliente y la que


crea el servidor con el valor incrementado en uno:

Imagen 14. Cookies desde la opción de desarrollador

10
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.4. Sesiones. Seguridad:


usuarios y roles
Como el protocolo HTTP no tiene estado, las distintas peticio-
nes que realiza el cliente al servidor son independientes, es
decir, no guardan relación entre ellas, por lo que para asociar-
las se utilizan las sesiones.

Al iniciar una sesión lo que hace el servidor es asignar al cliente


un identificador de sesión, de forma que en las peticiones que
realice el usuario a partir de ese momento se utilizará el mismo
identificador, de manera que el servidor sabrá que las está rea-
lizando el mismo usuario.

Para esto el servidor necesita dejar una cookie que contenga el


id de sesión que utiliza el cliente mientras la sesión está abier-
ta, y se elimina al cerrarla. Al borrar manualmente los cookies
del navegador, las sesiones que estaban abiertas se cerrarán.
También existen maneras de controlar las sesiones sin utilizar
cookies, pero no es lo más común.

Para poder crear una sesión, se debe utilizar la función start_


session(), y funciona de modo que, cuando no existe una sesión
activa, la crea, y cuando sí la hay, el script que llama a la función
se una a ella. Cuando la sesión ya está creada se puede utilizar
la variable superglobal $_SESSION para compartir la informa-
ción entre los scripts que compartan la misma sesión. Se trata
de un array que guarda las variables de sesión que define el
usuario, y admite que se añadan elementos de forma manual.

$_SESSION[“nombre”] = valor;

Imagen 15. Script de inicio de sesión básico

Puede hacerse uso de la variable superglobal $_SESSION para


acceder a la misma variable desde otro script, como se puede
observar a continuación:

Imagen 16. Uso de la variable $_SESSION en otro script

Lo más común en las páginas web es que se cree una sesión


al hacer login, si el login se ha realizado de manera correcta, se
creará una sesión, una variable de sesión para el nombre de
usuario y se realizará una redirección al contenido de la web.

11
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Imagen 17. Ejemplo de sesiones

Imagen 17. Formulario de inicio de sesión

12
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

En el ejemplo anterior se utiliza una pequeña función que simula


una base de datos para verificar si los usuarios tienen pueden
acceder a la web, por lo que, si los datos son correctos, devuel-
ve un array con el nombre y los permisos de los que dispone el
usuario, y si los datos no son correctos devuelve un FALSE.

Imagen 18. Página de contenido de la web

En el anterior script, el de contenido_sesion.php, lo primero


que se realiza es una llamada a session_start() para poder ac-
ceder a los ficheros que se desean. Luego se comprueba si se
ha iniciado sesión, y en caso de no ser así, devuelve al cliente
al formulario de inicio de sesión. En caso de estar la sesión ya
iniciada, mostrará en pantalla un mensaje personalizado para
cada usuario y se incluirá también un vínculo para poder cerrar
la sesión, que al ser pulsado llevará a logout_sesion.php, que
cerrará la sesión y redirigirá a la página del formulario.

Imagen 19. Script para cerrar la sesión

Para poder cerrar la sesión, se necesita, además de utilizar la


función de session_destroy(), se tienen que borrar las variables
de sesión y la cookie.

13
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.5. Envío de correo electrónico


Para el envío de correos electrónicos se puede utilizar la fun-
ción mail(), que envía correos directamente, o alguna librería
que se encarga de los detalles del formato. Una de las librerías
más utilizadas para esta función es phpMailer, que puede ser
instalada utilizando el gestor de paquetes composer.

composer require phpmailer/phpmailer

Se pueden enviar correos utilizando un servidor STMP local


(Simple Mail Transfer Protocol), o utilizando la configuración de
sendmail de Linux, pero los filtros antispam bloquean la recep-
ción de estos correos que son enviados desde servidores que
no están registrados correctamente.

3.6. Bases de datos relacionales


Existen drivers en PHP que se encargan de manejar los princi-
pales sistemas gestores de bases de datos. También se tienen
extensiones que proporcionan una capa de abstracción sobre
la base de datos, entre ellas destaca PHP Data Objects (PDO),
con la que se puede trabajar con distintas bases de datos con
una interfaz común, y en caso de cambiar de base de datos no
hay que modificar el código.

3.6.1. Conexión a la base de datos

Para poder trabajar con una base de datos se debe de tener


una conexión a esta, y para poder representar la conexión se
hace uso de un objeto de clase PDO. La expresión es:

public PDO::__construct ( string $dsn [, string


$username [, string $passwd [, array $options]]])

El primer parámetro hace referencia al driver que hay que uti-


lizar, la localización y el nombre de la base de datos. Para una
base de datos MySQL, se utilizaría:

mysql:dbname=<base de datos>;host=<ip o nombre> Imagen 20. Conexión con la base de datos

Los parámetros que están a continuación hacen referencia al La conexión con la base de datos finaliza cuando se termina
nombre de usuario y clave para acceder a la base de datos, el script (aunque en el ejemplo anterior se destruyó el obje-
y el último parámetro es opcional, y es un array de opciones. to PDO asignándole el valor de null), pero pueden utilizarse
también conexiones que se mantengan abiertas, para poder
De poder establecer una conexión con la base de datos, se acceder a ellas sin tener que restablecer la conexión, siendo
utilizará el nuevo objeto PDO para trabajar con la base de da- más eficientes en algunas situaciones.
tos, y en caso de que no se pueda conectar con la base de
datos, el constructor generará una excepción PDOException. Si se desea establecer una conexión persistente, se deberá
utilizar la opción PDO::ATTR_PERSISTENT en el constructor:

$bd = new PDO($conexion, $usuario, $clave, array


(PDO::ATTR_PERSISTENT => true));

14
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.6.2. Recuperación y presentación de datos

Con el método query ($instrucciones) de la clase PDO se eje-


cutan las instrucciones que se le pasan como argumento en la
base de datos, tal cual se haría desde la línea de comando SQL.
El argumento que recibe debe ser, por tanto, una instrucción SQL
válida. En caso de error se devolverá FALSE, y si las instrucciones
se ejecutan correctamente devolverá un objeto PDOStatement.

En caso de querer realizar una consulta, es posible recorrer las


filas devueltas con un foreach, y en cada iteración de este bu-
cle se obtendrá una fila, representada por un array donde las
claves serán los nombres que aparecen en la cláusula select.

En el siguiente ejemplo se tiene una base de datos de nombre


“produccion” que incluye una tabla “operarios” en la que se alma-
cenan los valores de “código”, “nombre”, “departamento” y “edad”.

Imagen 21. Consulta de la base de datos

Se pueden generar unas instrucciones preparadas con las que


utilizar parámetros, estas se inicial una sola vez utilizando el mé-
todo prepare() y se pueden ejecutar las veces que sea necesario
con execute(), dotando a los parámetros de distintos valores. Es-
tas instrucciones ya preparadas posibilitan la reutilización de con-
sultas, previenen la inyección de código y mejoran el rendimiento.

Los parámetros de la consulta pueden ser indicados por po-


sición o por nombre, en el primer caso se utiliza el símbolo de
interrogación para especificar un parámetro, y al ejecutarse se
asociarán por orden los símbolos de interrogación con los valo-
res del array que se han pasado como argumento a execute().

Imagen 22. Indicación de parámetros de consulta por posición

Al utilizar nombres en la instrucción preparada, utilizando:


nombre, se tendrán que utilizar esos mismos nombres como
claves del array de execute():

Imagen 23. Indicación de parámetros de consulta por nombre

15
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.6.3. Inserción, borrado y actualización

Si se desean insertar valores en la tabla, borrar o actualizar se ne-


cesita ejecutar la sentencia SQL que corresponda, y, como se ha
visto con anterioridad, esta sentencia puede ser preparada o no.

Imagen 24. Insertar, actualizar y borrar de la tabla de la base de datos

Para que el ejemplo pueda funcionar es necesario que la op-


ción de autocommit de la base de datos esté activada.

16
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.6.4. Transacciones

Se conoce como transacción al conjunto de operaciones que


se realizan de forma atómica, es decir, que o se realizan to-
das, o no se realiza ninguna. Un ejemplo de transacción podría
ser una transferencia de saldo entre dos clientes en un banco,
para ello se necesitan realizar dos operaciones:

› Reducir el saldo de la persona que realiza la transferencia.

› Aumentar el saldo de la persona que la recibe.

Si por cualquier motivo la segunda operación no se pudiera


realizar, se tendría que deshacer la primera. Estas dos opera-
ciones forman, por tanto, una única transacción. El inicio de una
transacción se realiza utilizando el método beginTransaction(),
y se salva utilizando el método commit(). Si se desean desha-
cer las operaciones realizadas en la transacción se utilizará el
método rollBack().

Imagen 25. Ejemplo de transacción

17
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.7. Bases de datos


no relacionales
Las bases de datos no relacionales o no-SQL son ampliamen-
te utilizadas porque son fáciles de desarrollar, por su funcio-
nalidad y por su fácil escalabilidad. Como su propio nombre
indica, no siguen el modelo relacional, están diseñadas espe-
cíficamente para modelos de datos específicos y pueden tener
esquemas flexibles.

Si nos centramos en MongoDB, el elemento básico de alma-


cenamiento es el documento, y estos documentos se localizan
dentro de colecciones. Una base de datos puede contar con
una o varias colecciones.

Los documentos en MongoDB tienen un formato parecido a


JSON, incluyendo algunos datos adicionales, llamado BSON,
Binary JSON. Un ejemplo puede ser:

{nombre: “Marisa”, departamento: “Logística”}

Estableciendo una comparación con el modelo relacional, los do-


cumentos serían filas y las colecciones tablas. La diferencia que
tienen respecto al modelo relacional es que no todos los docu-
mentos de la misma colección deben tener la misma estructura.
En MongoDB las colecciones no tienen este tipo de restricciones.

3.7.1. Instalación y
puesta en marcha de MongoDB

Se necesita instalar:

› MongoDB Community Server, que es la versión libre de


MongoDB.

› MongoDB Compass, que es una aplicación que aporta


una interfaz gráfica a la base de datos.

› El driver de PHP para MongoDB.

Primero se tiene que instalar el servidor MongoDB, la configu-


ración que aparece en la instalación por defecto es:

› El servidor de escucha se ubica en el puerto 27017.

› La ruta de instalación para Windows es C:\Archivos de


programa\MongoDB.

› No se necesita utilizar usuario y contraseña para realizar


la conexión.

Cuando ya se tenga todo instalado, para arrancar el servidor se


ejecuta el archivo mongod.exe, que se ubica en el subdirecto-
rio de la ruta de instalación.

Posteriormente se debe instalar el MongoDB Compass, que


proporciona una interfaz gráfica para poder trabajar con el
servidor. Cuando ejecutemos la aplicación el primer paso es
conectarse al servidor, si no se ha cambiado nada en la confi-
guración por defeco, bastará con pulsar el botón Connect que
aparece en la esquina inferior derecha.

18
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Cuando se realice la conexión la aplicación mostrará las bases


de datos del servidor. Por defecto ya existen tres bases de da-
tos creadas: admin, config y local.

Imagen 26. Interfaz de MongoDB

Para poder crear una nueva base de datos se utiliza el botón de


“CREATE DATABASE”, al pulsarse se abrirá una nueva ventana
en el que se deberá introducir el nombre de la base de datos
que se quiera crear y también el de una colección, es obligato-
rio introducir un nombre en ambos campos. En los siguientes
ejemplos se utilizará una base de datos denominada mibdd y
una colección denominada clientes.

Para establecer la conexión al servidor de MongoDB desde


PHP es necesario que se instale el driver correspondiente, y
para ello se utiliza el composer y se ejecuta el comando:

composer require mongodb/mongodb

3.7.2. Conexión desde PHP

Utilizando MongoDB y PHP es fácil realizar las operaciones ha-


bituales. Para el siguiente ejemplo introduciremos documen-
tos en la colección que previamente hemos creado.

El primer paso será conectarse al servidor, para ello se utilizará


la clase MongoDB\Client() y se seleccionará la base de datos
mibdd y se insertarán documentos en clientes haciendo uso de
los métodos insertOne() e insertMany().

Imagen 27. Insertar clientes en la colección

19
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Si se quiere hacer una consulta de los documentos existentes en


la colección se utilizarán los métodos find() y findOne(). El segun-
do método devolverá solamente un resultado, y se suele utilizar
cuando se sabe que solo existe uno, como cuando se busca por
clave primaria. Se puede utilizar también un array para realizar la
búsqueda, como se puede observar a continuación.

Imagen 28. Consulta de los clientes de la colección

Para actualizar los documentos se utilizan los métodos upda-


te() y updateOne().

Imagen 29. Actualización de los clientes de la colección

Y para borrar, los métodos delete() y deleteOne().

Imagen 30. Eliminar clientes de la colección

20
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.8. Ficheros
En PHP existen librerías que se encargan del manejo de ficheros.
La librería más importante es Filesystem, con la que se pueden
leer y escribir ficheros y trabajar con el sistema de archivos.

Para abrir un fichero con esta librería se utiliza la función


fopen(), y se indica la ruta que tiene el fichero que queremos
abrir y el modo en el que se va a abrir. En caso de error, la fun-
ción devolverá el valor de FALSE, y si todo va bien devolverá un
puntero para manejar el fichero.

Lista de modos de fopen()

Modo Descripción

r Solo lectura. Si el fichero no existe, devuelve FALSE.

r+ Lectura y escritura. Si el fichero no existe, devuelve FALSE.

Solo escritura. Si el fichero no existe, lo crea; si ya existe, borra el


w
contenido anterior, y si no puede crearlo, devuelve FALSE.

Lectura y escritura. Si el fichero no existe, lo crea; si ya existe, borra


w+
el contenido anterior, y si no puede crearlo, devuelve FALSE.

Solo escritura. Añade el contenido al final del fichero (append). Si el


a
fichero no existe, lo crea, y si no puede crearlo devuelve FALSE.

Lectura y escritura. Añade el contenido al final del fichero. Si el


a+
fichero no existe, lo crea, y si no puede crearlo devuelve FALSE.

Imagen 26. Abrir un fichero con fopen()

En el ejemplo anterior se puede abrir el primer fichero, pero no el


segundo, de modo que el script se ejecutará, pero generará un
Warning indicando que no se ha podido abrir el fichero especificado.

A la hora de realizar la lectura y escritura del fichero se hará


desde el indicador de posición. Al abrir un fichero, el indicador
se coloca en el inicio de este, excepto si se ha abierto en modo
“a” o “a+”, que lo sitúa al final. Y a medida que se avanza en la
lectura o escritura, este puntero se va situando al final del últi-
mo carácter, o byte, leído o escrito.

21
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Imagen 27. Lectura del fichero

En el ejemplo anterior se utiliza un bucle while que tiene como


condición que la función feof(), que indica si se ha llegado al
final del archivo, sea false, de modo que irá imprimiendo en
pantalla el carácter que se va obteniendo con la función fgetc().
Al terminar de trabajar con el fichero este se tiene que cerrar
con la función fclose().

Para leer un fichero que tiene un formato determinado puede


utilizarse la función fscanf(), que se encarga de leer una línea
del fichero y le aplica un formato. Se puede utilizar de dos mo-
dos, en el primero se le pasan dos parámetros y devuelve un
array con los valores que ha leído:

$valores = fscanf($fichero, $formato);

Se le pueden pasar también variables adicionales para que al-


macenen en ellas los valores en lugar de devolverlos:

$valores = fscanf($fichero, $formato, $variable1, …);

Imagen 28. Lectura de un fichero con un formato específico

En el ejemplo anterior se utiliza la función fscanf() de las dos


maneras posibles y la función de rewind() para situar el indica-
dor de nuevo al principio del fichero. El fichero de texto incluye
una matriz de 4 filas y 4 columnas.

22
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Para indicar en el script que cada línea está formada por 4 núme-
ros separados por espacios o tabulaciones se usa como formato:

“%d %d %d %d”

Donde cada %d hace referencia a un número en formato decimal.

Utilizando la función de file_get_contents() se obtiene una ca-


dena con el contenido del fichero, y con la función file_put_
contents() se escribe datos en un fichero, y con ellas se puede
modificar el fichero sin tener que abrir y cerrar el fichero con
fopen() y fclose(), solo se necesita la ruta del fichero.

Imagen 29. Lectura y escritura con file_get_contents() y file_put_contents()

Funciones de ficheros

Función Descripción

fgets($fichero) Devuelve una cadena con los caracteres desde el


indicador de posición

fputs($fichero,$cadena) Escribe una cadena en el fichero

fseek($fichero,$posicion) Coloca el cursor del fichero en la posición indicada

ftell($fichero) Devuelve el indicador de posición del fichero

rewind($fichero) Coloca el indicador de posición al inicio del fichero

fopen($ruta, modo) Abre un fichero

fclose($fichero) Cierra un fichero

fread($fichero,$longitud) Lee una cierta $longitud de bytes

fwrite($fichero,$cadena) Escribe una cadena en un fichero

copy($origen, $destino) Copia un fichero

unlink($borra) Borra un fichero

move($actual, $nuevo) Mueve un fichero

filesize($ruta) Devuelve el tamaño del fichero en bytes

Filetype($ruta) Devuelve el tipo de fichero

is_file($ruta) Comprueba si la ruta corresponde a un fichero


is_dir($ruta)
Comprueba si la ruta corresponde a un directorio

rename($actual,$nuevo) Modifica el nombre de un fichero

23
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.8.1. Ficheros XML

Existen librerías que ayudan a trabajar con ficheros XML. La


librería SimpleXML ya viene instalada por defecto y cuenta
con funciones para filtrar y recorrer ficheros XML. Al utilizar la
función simplexml_load_file() se lee el fichero XML correspon-
diente y devuelve un objeto de clase SimpleXMLElement. Para
manipular el fichero se utilizará este objeto.

Imagen 30. Leer un archivo XML

Utilizando el método Xpath() se pueden seleccionar sólo los


elementos que se deseen.

Imagen 31. Seleccionar elementos con la expresión XPath

Con la clase DOMDocument se puede validar con esquemas


XSD, como se realiza en el siguiente ejemplo usando el esque-
ma departamentos.xsd.

Imagen 32. Validación con esquema XSD

Se pueden utilizar también transformaciones XSLT utilizando


la librería que tiene el mismo nombre. Para ello en el siguiente
ejemplo se utiliza una transformación que muestra un fichero
XML como si fuera una tabla HTML. La transformación y el fi-
chero XML utilizan la clase DOMDocument para cargarse, y la
transformación se realiza utilizando el objeto XSLTProcessor,
que se asocia con la transformación utilizando el método im-
portStylesheet().

24
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Es necesario habilitar la extensión de XSL en la configuración


de PHP para poder utilizar el objeto XSLTProcessor, y reiniciar el
proveedor de servicios web (Apache, por ejemplo).

Imagen 33. Transformación XSLT

En el anterior ejemplo se ha utilizado como archivo XML un


fichero que contiene información del departamento de IT y de
sus empleados.

Imagen 34. Archivo XML

Y el esquema para validarlo:

Imagen 35. Esquema .XSD para la validación

25
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

La transformación que se aplica entonces es:

Imagen 36. Transformador XSLT

De este modo, el resultado que se observa después de la


transformación es:

Imagen 37. Resultado después de aplicar la transformación

26
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.9. Pruebas
En PHP se pueden automatizar las pruebas de código, y para
ello la herramienta que más se utiliza es PHPUnit, para instalar-
lo utilizando composer:

composer require –-dev phpunit/phpunit

Las pruebas de PHPUnit heredan (en la mayoría de casos) de la


clase TestCase, y se tratan de métodos públicos que dentro con-
tienen las pruebas que se quieren realizar. La clase puede con-
tar también con otros métodos auxiliares que no sean pruebas.

Para definir que se trata de un método de test existen dos opciones:

› Que su nombre empiece por “test”.

Public testException(){…}

› Hacer uso de un bloque de comentarios específico con


la anotación @test. Estos bloques empiezan por “/**” y se
colocan antes del método de prueba al que se refieren.

/**
* @test
*/
public static function excepcion();

Dentro de estos métodos de prueba se colocan los métodos


de aserción, que se utilizan para confirmar si el valor que obtie-
ne el método coincide con el valor esperado.

Por ejemplo, se crea una clase que realiza operaciones de


suma y división:

Imagen 38. Clase que realiza operaciones matemáticas

Y para comprobar que los métodos de esta clase funcionan


como deberían, se realiza este script con los métodos de prueba:

27
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

Imagen 39. Métodos de prueba

Se observa que los dos primeros métodos realizan una com-


probación simple, verificando que en un caso normal la función
devuelve lo esperado. Y se incluye también un tercer método
para comprobar que, cuando se quiere dividir algún número
entre cero, se devuelva un error del tipo DivisionByZeroError.

Para poder ejecutar un caso de prueba, se debe ejecutar


PHPUnit desde la consola de comandos:

C:\xampp\htdocs\tema_3>vendor\bin\phpunit
OperacionesTest.php

Imagen 40. Salida de la consola de comandos

En la salida de la consola de comandos nos indica que se han


realizado tres pruebas que contenían tres aserciones y todas
ellas han sido correctas.

En la clase TestCase se incluyen muchos más métodos de los


que se han mostrado para hacer distintas comprobaciones, al-
gunos de los más utilizados son:

Métodos más utilizados de PHPUnit

Aserción / método Descripción

assertLessThan ($limite, $valor) Verifica que $valor sea menor que $limite

assertGreaterThan ($limite, $valor) Verifica que $valor sea mayor que $limite

assertStringStartWith ($prefijo, $cadena) Verifica que $cadena empieza por $prefijo

assertArrayHasKey ($clave, $array) Verifica que $array contiene un elemento con $clave

assertInstanceOf (Clase, $objeto) Verifica que $objeto sea una instancia de Clase

assertFileExists ($ruta) Verifica que la ruta indicada exista

assertNull ($variable) Verifica que $variable sea null

assertCount ($num, $conjunto) Verifica que $conjunto tenga $num elementos

28
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

3.10. Depuración de errores


PHP a partir de la versión 5.6 incluye un depurador, pero lo más co-
mún es utilizar un depurador externo que se integre en un IDE, los
depuradores que más se utilizan son ZendDebugger y Xdebug.

Para depurar el código se deben de colocar puntos de inte-


rrupción (breakpoints), y a partir de ahí se irá ejecutando paso a
paso la depuración.

Imagen 41. Puntos de interrupción

Se muestran también los valores que adoptan las variables en


cada momento del script:

Imagen 42. Depurador de VS Code

29
Desarrollo web en entorno servidor | UNIDAD 3
Desarrollo de aplicaciones web con PHP

30

También podría gustarte