Top Banner
Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 1 Administración de Servidores Linux Tercera Unidad: Administración de Servicio de Internet con Linux Sesión 1 Redundancia en Sistemas Informáticos Sesión 2 Servidor VoIP ASTERISK Sesión 3 Servidor Proftpd Sesión 4 Manual de HTML Sesión 5 Manual de PHP Sesión 6 XAMPP: Apache, MySQL, PHP y más Universidad Nacional de Ingeniería – Facultad de Ingeniería Mecánica Centro de Cómputo INFOUNI REVALORA - Perú Centro de Cómputo INFOUNI – REVALORA Perú
97

Revalora Mod. 3

Mar 13, 2016

Download

Documents

L. Muga Ampuero

Revalora Mod. 3
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 1

Administración de Servidores Linux

Tercera Unidad: Administración de Servicio de Internet con Linux

Sesión 1– Redundancia en Sistemas InformáticosSesión 2– Servidor VoIP ASTERISKSesión 3– Servidor ProftpdSesión 4– Manual de HTMLSesión 5– Manual de PHPSesión 6– XAMPP: Apache, MySQL, PHP y más

Universidad Nacional de Ingeniería – Facultad de Ingeniería Mecánica Centro de Cómputo INFOUNI

REVALORA - Perú

Centro de Cómputo INFOUNI – REVALORA Perú

Page 2: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 2

Administración de Servidores LinuxTercera Unidad: Administración de Servicio de Internet con Linux

R. PfuyoDocente

L. MugaDocente

Linux Registered User # 487284

Software: Debian 5 Linux

Composición: OpenOffice

Versiones:

Versión 1.0 : Publicación del manual.

Copyright (c) 2010 Centro de Cómputo INFOUNI.

Permission is granted to copy, distribute and/or modify this document under the terms of the * GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNUFree Documentation License".

Centro de Cómputo INFOUNI – REVALORA Perú

Page 3: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 3

Indice General1. Tercera Unidad: Sesión 1 4

1.1 Redundancia en Sistemas Informáticos 4

1.1.1 Arreglo Redundante de Discos Independientes - RAID 4

1.1.2 Gestor de Volúmenes Lógicos - LVM 20

2. Tercera Unidad: Sesión 2 29

2.1 Servidor VoIP ASTERISK 29

3. Tercera Unidad: Sesión 3 34

3.1 Servidor Proftpd 34

4. Tercera Unidad: Sesión 4 38

4.1 Manual de HTML 38

5. Tercera Unidad: Sesión 5 63

5.1 Manual de PHP 63

6. Tercera Unidad: Sesión 6 92

6.1 XAMPP: Apache, MySQL, PHP y más 92

* Licencia de Publicación 93

Centro de Cómputo INFOUNI – REVALORA Perú

Page 4: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 4

Tercera Unidad Sesión 1

1.1 Redundancia en Sistemas Informáticos

1.1.1 Arreglo Redundante de Discos Independientes - RAIDEn la actualidad es normal que los sistemas estén funcionando de forma permanente las 24 horas. Un fallo en un disco supone la pérdida de acceso a los datos hasta que éste ha sido repuesto y la información restaurada a través de la copia de seguridad. Una vez recuperado el sistema, toda la información generada en el tiempo transcurrido entre la última copia de seguridad y el instante del fallo, se ha perdido de forma irremediable. El coste del tiempo de no utilización del sistema, más el coste de la información perdida en dicho intervalo es muy elevado. La tecnología RAID asegura la integridad de los datos ante la eventual avería de uno de los discos, asegurando un funcionamiento continuo y permitiendo incluso la substitución de la unidad defectuosa sin necesidad de detener los procesos que se estén ejecutando.

RAID es un método de combinación de varios discos duros para formar una única unidad lógica en la que se almacenan los datos de forma redundante. Ofrece mayor tolerancia a fallos y más altos niveles de rendimiento que un sólo disco duro o un grupo de discos duros independientes. Una matriz consta de dos o más discos duros que ante el sistema principal funcionan como un único dispositivo. Un RAID, para el sistema operativo, aparenta ser un sólo disco duro lógico (LUN). Los datos se desglosan en fragmentos que se escriben en varias unidades de forma simultánea. En este método, la información se reparte entre varios discos, usando técnicas como el entrelazado de bloques (RAID nivel 0) o la duplicación de discos (RAID nivel 1) para proporcionar redundancia, reducir el tiempo de acceso, y/o obtener mayor ancho de banda para leer y/o escribir, así como la posibilidad de recuperar un sistema tras la avería de uno de los discos.

La tecnología RAID protege los datos contra el fallo de una unidad de disco duro. Si se produce un fallo, RAID mantiene el servidor activo y en funcionamiento hasta que se sustituya la unidad defectuosa. La tecnología RAID se utiliza también con mucha frecuencia para mejorar el rendimiento de servidores y estaciones de trabajo. Estos dos objetivos, protección de datos y mejora del rendimiento, no se excluyen entre sí.

RAID ofrece varias opciones, llamadas niveles RAID, cada una de las cuales proporciona un equilibrio distinto entre tolerancia a fallos, rendimiento y coste.

Todos los sistemas RAID suponen la pérdida de parte de la capacidad de almacenamiento de los discos, para conseguir la redundancia o almacenar los datos de paridad. Los sistemas RAID profesionales deben incluir los elementos críticos por duplicado: fuentes de alimentación y ventiladores redundantes y Hot Swap. De poco sirve disponer de un sistema tolerante al fallo de un disco si después falla por ejemplo una fuente de alimentación que provoca la caída del sistema. También cada vez es más recomendable, sobre todo en instalaciones de

Centro de Cómputo INFOUNI – REVALORA Perú

Page 5: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 5

cluster, configuraciones de dos controladoras redundantes y Hot Swap, de manera que en el caso de fallo de una de ellas se puede proceder a su sustitución sin tener que detener el funcionamiento del sistema. Además, esta configuración con controladoras redundantes nos permite conectar el sistema RAID a diferentes servidores simultáneamente.

1.1.1.1 Ventajas de RAID

RAID proporciona tolerancia a fallos, mejora el rendimiento del sistema y aumenta la productividad.

1. Tolerancia a fallos: RAID protege contra la pérdida de datos y proporciona recuperación de datos en tiempo real con acceso interrumpido en caso de que falle un disco.

2. Mejora del Rendimiento/Velocidad: Una matriz consta de dos o más discos duros que ante el sistema principal funcionan como un único dispositivo. Los datos se desglosan en fragmentos que se escriben en varias unidades de forma simultánea. Este proceso, denominado fraccionamiento de datos, incrementa notablemente la capacidad de almacenamiento y ofrece mejoras significativas de rendimiento. RAID permite a varias unidades trabajar en paralelo, lo que aumenta el rendimiento del sistema.

3. Mayor Fiabilidad: Las soluciones RAID emplean dos técnicas para aumentar la fiabilidad: la redundancia de datos y la información de paridad. La redundancia implica el almacenamiento de los mismos datos en más de una unidad. De esta forma, si falla una unidad, todos los datos quedan disponibles en la otra unidad, de inmediato. Aunque este planteamiento es muy eficaz, también es muy costoso, ya que exige el uso de conjuntos de unidades duplicados. El segundo planteamiento para la protección de los datos consiste en el uso de la paridad de datos. La paridad utiliza un algoritmo matemático para describir los datos de una unidad. Cuando se produce un fallo en una unidad se leen los datos correctos que quedan y se comparan con los datos de paridad almacenados por la matriz. El uso de la paridad para obtener fiabilidad de los datos es menos costoso que la redundancia, ya que no requiere el uso de un conjunto redundante de unidades de disco.

4. Alta Disponibilidad: RAID aumenta el tiempo de funcionamiento y la disponibilidad de la red. Para evitar los tiempos de inactividad, debe ser posible acceder a los datos en cualquier momento. La disponibilidad de los datos se divide en dos aspectos: la integridad de los datos y tolerancia a fallos. La integridad de los datos se refiere a la capacidad para obtener los datos adecuados en cualquier momento. La mayoría de las soluciones RAID ofrecen reparación dinámica de sectores, que repara sobre la marcha los sectores defectuosos debidos a errores de software. La tolerancia a fallos, el segundo aspecto de la disponibilidad, es la capacidad para mantener los datos disponibles en caso de que se produzcan uno o varios fallos en el sistema.

1.1.1.2 Niveles de RAID

La elección de los diferentes niveles de RAID va a depender de las necesidades del usuario en lo que respecta a factores como seguridad, velocidad, capacidad, coste, etc. Cada nivel de RAID ofrece una combinación específica de tolerancia a fallos (redundancia), rendimiento y coste, diseñadas para satisfacer las diferentes necesidades de almacenamiento. La mayoría de los niveles RAID pueden satisfacer de manera efectiva sólo uno o dos de estos criterios. No hay un nivel de RAID mejor que otro; cada uno es apropiado para determinadas aplicaciones y entornos

Centro de Cómputo INFOUNI – REVALORA Perú

Page 6: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 6

informáticos. De hecho, resulta frecuente el uso de varios niveles RAID para distintas aplicaciones del mismo servidor. Oficialmente existen siete niveles diferentes de RAID (0-6), definidos y aprobados por el el RAID Advisory Board (RAB). Luego existen las posibles combinaciones de estos niveles (10, 50, etc.). Los niveles RAID 0, 1, 0+1 y 5 son los más populares.

1. RAID 0: Disk Striping "La más alta transferencia, pero sin tolerancia a fallos": También conocido como ßeparación ó fraccionamiento/ Striping". Los datos se desglosan en pequeños segmentos y se distribuyen entre varias unidades. Este nivel de ärray" o matriz no ofrece tolerancia al fallo. Al no existir redundancia, RAID 0 no ofrece ninguna protección de los datos. El fallo de cualquier disco de la matriz tendría como resultado la pérdida de los datos y sería necesario restaurarlos desde una copia de seguridad. Por lo tanto, RAID 0 no se ajusta realmente al acrónimo RAID. Consiste en una serie de unidades de disco conectadas en paralelo que permiten una transferencia simultánea de datos a todos ellos, con lo que se obtiene una gran velocidad en las operaciones de lectura y escritura. La velocidad de transferencia de datos aumenta en relación al número de discos que forman el conjunto. Esto representa una gran ventaja en operaciones secuenciales con ficheros de gran tamaño. Por lo tanto, este array es aconsejable en aplicaciones de tratamiento de imágenes, audio, video o CAD/CAM, es decir, es una buena solución para cualquier aplicación que necesite un almacenamiento a gran velocidad pero que no requiera tolerancia a fallos. Se necesita un mínimo de dos unidades de disco para implementar una solución RAID 0.

2. RAID 1: Mirroring "Más rápido que un disco y más seguro": También llamado "Mirroring" o "Duplicación" (Creación de discos en espejo). Se basa en la utilización de discos adicionales sobre los que se realiza una copia en todo momento de los datos que se están modificando. RAID 1 ofrece una excelente disponibilidad de los datos mediante la redundancia total de los mismos. Para ello, se duplican todos los datos de una unidad o matriz en otra. De esta manera se asegura la integridad de los datos y la tolerancia al fallo, pues en caso de avería, la controladora sigue trabajando con los discos no dañados sin detener el sistema. Los datos se pueden leer desde la unidad o matriz duplicada sin que se produzcan interrupciones. RAID 1 es una alternativa costosa para los grandes sistemas, ya que las unidades se deben añadir en pares para aumentar la capacidad de almacenamiento. Sin embargo, RAID 1 es una buena solución para las aplicaciones que requieren redundancia cuando hay sólo dos unidades disponibles. Los servidores de archivos pequeños son un buen ejemplo. Se necesita un mínimo de dos unidades para implementar una solución RAID 1.

3. RAID 0+1/ RAID 0/1 ó RAID 10: Ämbos mundos": Combinación de los arrays anteriores que proporciona velocidad y tolerancia al fallo simultáneamente. El nivel de RAID 0+1 fracciona los datos para mejorar el rendimiento, pero también utiliza un conjunto de discos duplicados para conseguir redundancia de datos. Al ser una variedad de RAID híbrida, RAID 0+1 combina las ventajas de rendimiento de RAID 0 con la redundancia que aporta RAID 1. Sin embargo, la principal desventaja es que requiere un mínimo de cuatro unidades y sólo dos de ellas se utilizan para el almacenamiento de datos. Las unidades se deben añadir en pares cuando se aumenta la capacidad, lo que multiplica por dos los costes de almacenamiento. El RAID 0+1 tiene un rendimiento similar al RAID 0 y puede tolerar el fallo de varias unidades de disco. Una configuración RAID 0+1 utiliza un número par de discos (4, 6, 8) creando dos bloques. Cada bloque es una copia exacta del otro, de ahí RAID 1, y

Centro de Cómputo INFOUNI – REVALORA Perú

Page 7: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 7

dentro de cada bloque la escritura de datos se realiza en modo de bloques alternos, el sistema RAID 0. RAID 0+1 es una excelente solución para cualquier uso que requiera gran rendimiento y tolerancia a fallos, pero no una gran capacidad. Se utiliza normalmente en entornos como servidores de aplicaciones, que permiten a los usuarios acceder a una aplicación en el servidor y almacenar datos en sus discos duros locales, o como los servidores web, que permiten a los usuarios entrar en el sistema para localizar y consultar información. Este nivel de RAID es el más rápido, el más seguro, pero por contra el más costoso de implementar.

4. RAID 2: Äcceso paralelo con discos especializados. Redundancia a través del código Hamming": El RAID nivel 2 adapta la técnica comúnmente usada para detectar y corregir errores en memorias de estado sólido. En un RAID de nivel 2, el código ECC (Error Correction Code) se intercala a través de varios discos a nivel de bit. El método empleado es el Hamming. Puesto que el código Hamming se usa tanto para detección como para corrección de errores (Error Detection and Correction), RAID 2 no hace uso completo de las amplias capacidades de detección de errores contenidas en los discos. Las propiedades del código Hamming también restringen las configuraciones posibles de matrices para RAID 2, particularmente el cálculo de paridad de los discos. Por lo tanto, RAID 2 no ha sido apenas implementado en productos comerciales, lo que también es debido a que requiere características especiales en los discos y no usa discos estándares. Debido a que es esencialmente una tecnología de acceso paralelo, RAID 2 está más indicado para aplicaciones que requieran una alta tasa de transferencia y menos conveniente para aquellas otras que requieran una alta tasa de demanda I/O.

5. RAID 3: Acceso síncrono con un disco dedicado a paridad": Dedica un único disco al almacenamiento de información de paridad. La información de ECC (Error Checking and Correction) se usa para detectar errores. La recuperación de datos se consigue calculando el O exclusivo (XOR) de la información registrada en los otros discos. La operación I/O accede a todos los discos al mismo tiempo, por lo cual el RAID 3 es mejor para sistemas de un sólo usuario con aplicaciones que contengan grandes registros. RAID 3 ofrece altas tasas de transferencia, alta fiabilidad y alta disponibilidad, a un coste intrínsicamente inferior que un Mirroring (RAID 1). Sin embargo, su rendimiento de transacción es pobre porque todos los discos del conjunto operan al unísono. Se necesita un mínimo de tres unidades para implementar una solución RAID 3.

6. RAID 4: Äcceso Independiente con un disco dedicado a paridad": Basa su tolerancia al fallo en la utilización de un disco dedicado a guardar la información de paridad calculada a partir de los datos guardados en los otros discos. En caso de avería de cualquiera de las unidades de disco, la información se puede reconstruir en tiempo real mediante la realización de una operación lógica de O exclusivo. Debido a su organización interna, este RAID es especialmente indicado para el almacenamiento de ficheros de gran tamaño, lo cual lo hace ideal para aplicaciones gráficas donde se requiera, además, fiabilidad de los datos. Se necesita un mínimo de tres unidades para implementar una solución RAID 4. La ventaja con el RAID 3 está en que se puede acceder a los discos de forma individual.

7. RAID 5: Äcceso independiente con paridad distribuida": Este array ofrece tolerancia al fallo, pero además, optimiza la capacidad del sistema permitiendo una utilización de hasta el 80 porciento de la capacidad del conjunto de discos. Esto lo consigue mediante el cálculo de información de paridad y su almacenamiento alternativo por bloques en todos los discos del conjunto. La información del usuario se graba por bloques y de forma alternativa en

Centro de Cómputo INFOUNI – REVALORA Perú

Page 8: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 8

todos ellos. De esta manera, si cualquiera de las unidades de disco falla, se puede recuperar la información en tiempo real, sobre la marcha, mediante una simple operación de lógica de O exclusivo, sin que el servidor deje de funcionar.Así pues, para evitar el problema de cuello de botella que plantea el RAID 4 con el disco de comprobación, el RAID 5 no asigna un disco específico a esta misión sino que asigna un bloque alternativo de cada disco a esta misión de escritura. Al distribuir la función de comprobación entre todos los discos, se disminuye el cuello de botella y con una cantidad suficiente de discos puede llegar a eliminarse completamente, proporcionando una velocidad equivalente a un RAID 0.RAID 5 es el nivel de RAID más eficaz y el de uso preferente para las aplicaciones de servidor básicas para la empresa. Comparado con otros niveles RAID con tolerancia a fallos, RAID 5 ofrece la mejor relación rendimiento-coste en un entorno con varias unidades. Gracias a la combinación del fraccionamiento de datos y la paridad como método para recuperar los datos en caso de fallo, constituye una solución ideal para los entornos de servidores en los que gran parte del E/S es aleatoria, la protección y disponibilidad de los datos es fundamental y el coste es un factor importante. Este nivel de array es especialmente indicado para trabajar con sistemas operativos multiusuarios.Se necesita un mínimo de tres unidades para implementar una solución RAID 5.Los niveles 4 y 5 de RAID pueden utilizarse si se disponen de tres o más unidades de disco en la configuración, aunque su resultado óptimo de capacidad se obtiene con siete o más unidades. RAID 5 es la solución más económica por megabyte, que ofrece la mejor relación de precio, rendimiento y disponibilidad para la mayoría de los servidores.

8. RAID 6: Äcceso independiente con doble paridad": Similar al RAID 5, pero incluye un segundo esquema de paridad distribuido por los distintos discos y por tanto ofrece tolerancia extremadamente alta a los fallos y a las caídas de disco, ofreciendo dos niveles de redundancia. Hay pocos ejemplos comerciales en la actualidad, ya que su coste de implementación es mayor al de otros niveles RAID, ya que las controladoras requeridas que soporten esta doble paridad son más complejas y caras que las de otros niveles RAID. Así pues, comercialmente no se implementa.

Referencia: http://www.smdata.com

Nuestro escenario se desarrolla en una nueva máquina virtual con solo un disco duro (sda) al que configuraremos 3 particiones básicas (/boot, / y swap); cada una como miembro de un multidisco (MD) RAID 1. Una vez finalizada la configuración de las particiones y la instalacion del sistema operativo, se le agregará un segundo disco (sdb) que luego configuraremos para formar parte del RAID. Como prueba final debemos apagar el equipo (una vez realizada la sincronización de la información en el segundo disco y haber instalado GRUB), retirar el primer disco y encender el equipo.

1. Configuramos dentro de la BIOS de nuestro sistema la prioridad del dispositivo de arranque; asignando como principal a la lectora de discos.

2. Una vez que tengamos el disco de instalación introducido en nuestra lectora de discos o tengamos ya asignada la imagen en formato .iso en nuestra máquina virtual procedemos a reinciar el equipo (máquina virtual).

3. Procederá a cargar el disco (imagen) de instalación y nos mostrará el logo de Debian, que nos pedirá la pulsación de ENTER para continuar.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 9: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 9

4. Ahora seleccionamos el idioma: Spanish (español). 5. Nuestro país: Perú. 6. La distribución del teclado: Latinoamericano. 7. Aquí se nos pedirá la configuración del interfaz de red del equipo, seleccionamos: No

configurar la red en este momento. 8. Introducimos el nombre de la máquina para la identificación en la red: seglinux. 9. En el tipo de particionado seleccionamos la opción: Manual y definimos cada partición

como volumen para RAID:

Figura 1.1: Seleccionamos el disco duro a particionar.

Figura 1.2: Creamos una nueva tabla de particiones en el disco.

Figura 1.3: Ahora seleccionamos el espacio libre del disco y Enter.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 10: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 10

Figura 1.4: Creamos la primera partición.

Figura 1.5: Creamos la partición con 256 MB para /boot.

Figura 1.6: En tipo de partición seleccionamos: Primaria.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 11: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 11

Figura 1.7: Ubicamos la partición al inicio del disco.

Figura 1.8: En la ventana Configuración de la Partición, seleccionamos la opción: Utilizar

como.

Figura 1.9: En la ventana siguiente seleccionamos: Volumen físico para RAID.

Figura 1.10: Activamos la marca de arranque.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 12: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 12

Figura 1.11: Seleccionamos el espacio libre en el disco y procedemos a crear la segunda

partición.

Figura 1.12: Seleccionamos: Crear nueva partición.

Figura 1.13: Elegimos un tamaño de 5 GB.

Figura 1.14: En tipo de partición seleccionamos: Lógica.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 13: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 13

Figura 1.15: Ubicamos la partición al inicio del espacio disponible.

Figura 1.16: En la ventana Configuración de la Partición, seleccionamos la opción: Utilizar como.

Figura 1.17: En la ventana siguiente seleccionamos: Volumen físico para RAID.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 14: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 14

Figura 1.18: Terminamos de definir la partición.

10. Una vez que ya tenemos todas nuestras particiones definidas, nos dirigimos a la opción: Configurar RAID por software.

Figura 1.19: Terminamos de definir la partición.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 15: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 15

Figura 1.20: Escribimos los cambios en el disco, seleccionamos: Sí.

Figura 1.21: Seleccionamos: Crear un dispositivo MD.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 16: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 16

Figura 1.22: Seleccionamos: RAID1.

Figura 1.23: Ingresamos el número de dispositivos activos para el RAID1: 2.

Figura 1.24: Ingresamos el número de dispositivos libres para el RAID1: 0.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 17: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 17

Figura 1.25: Seleccionamos una partición para el dispositivo multidisco: sda1.

Figura 1.26: Creamos otros dispositivos multidisco (MD) para las particiones restantes con los mismos pasos anteriormente seleccionados.

Figura 1.27: Una vez creados todos los dispositivos multidisco (MD), terminamos la configuración.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 18: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 18

Figura 1.28: Ahora seleccionamos los dispositivos RAID1 creados y modificamos los sistemas de archivos y los puntos de montaje.

Figura 1.29: Debemos haber creado 3 puntos de montaje: /boot, / y swap con su respectivo

sistema de archivos.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 19: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 19

Figura 1.30: Finalizamos el particionamiento y escribimos los cambios en el disco.

11. Luego completamos los pasos de instalación del sistema operativo y reiniciamos el equipo. 12. Nos logueamos como root y ejecutamos el siguiente comando:

1. watch -n 6 cat /proc/mdstat

13. Apagamos el equipo y agregamos el segundo disco (sdb) que debe ser de la misma capacidad del primero o mayor.

14. Copiamos el esquema de particiones del primer disco con el comando: 1. sfdisk -d /dev/sda | sfdisk /dev/sdb

Centro de Cómputo INFOUNI – REVALORA Perú

Page 20: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 20

15. Agregamos las nuevas particiones al RAID: 1. mdadm --add /dev/md0 /dev/sdb1 2. mdadm --add /dev/md1 /dev/sdb5 3. mdadm --add /dev/md2 /dev/sdb6

16. Podemos ver el progreso de la integración del nuevo disco al RAID con el comando: 1. watch -n 6 cat /proc/mdstat

17. Instalamos GRUB al segundo disco (sdb), ejecutamos el comando grub y luego: 1. root (hd1,0)2. setup (hd1)

18. Ahora podemos hacer pruebas: apagamos el equipo, retiramos el disco inicial y encendemos el equipo

1.2 Gestor de Volúmenes Lógicos - LVMEs una herramienta que se encuentra presente en los actuales sistemas Linux, inspirada en la implementación de la que disponían otros sistemas como AIX y HP-UX.

LVM introduce una separación entre la estructura típica de un sistema y los elementos discos, Particiones, Sistemas de ficheros a los que estamos habituados.

Una de las principales ventajas del sistema LVM sobre el sistema tradicional, es que LVM nos abstrae de los discos físicos y de las limitaciones de un disco, permitiendo tener sistemas de archivos sobre varios discos, redimensionar dichos sistemas de archivos según las necesidades y hacer un uso más eficiente del espacio del que disponemos, con independencia de su ubicación física. La estructura de LVM está compuesta por:

1. Volúmenes físicos: Un volumen físico es un disco o una parte del disco que habilitaremos para su inclusión en un grupo de volúmenes (particiones o discos duros completos).

2. Grupos de volumen: Agrupan uno o más volúmenes físicos tomando su capacidad entre los volúmenes físicos asignados al grupo de volumen.

3. Volúmenes lógicos: Los volúmenes lógicos se crean dentro de un grupo de volumen y son el equivalente a las particiones en otros sistemas para usarlo como almacén de información.

ConFiguramos ahora LVM en un sistema Debian:

1. Configuramos dentro de la BIOS de nuestro sistema la prioridad del dispositivo de arranque; asignando como principal a la lectora de discos.

2. Una vez que tengamos el disco de instalación introducido en nuestra lectora de discos o tengamos ya asignada la imagen en formato .iso en nuestra máquina virtual procedemos a reinciar el equipo (máquina virtual).

Centro de Cómputo INFOUNI – REVALORA Perú

Page 21: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 21

3. Procederá a cargar el disco (imagen) de instalación y nos mostrará el logo de Debian, que nos pedirá la pulsación de ENTER para continuar.

4. Ahora seleccionamos el idioma: Spanish (español). 5. Nuestro país: Perú. 6. La distribución del teclado: Latinoamericano. 7. Aquí se nos pedirá la configuración del interfaz de red del equipo, seleccionamos: No

configurar la red en este momento. 8. Introducimos el nombre de la máquina para la identificación en la red: seglinux. 9. En el tipo de particionado seleccionamos la opción: Manual. 10. Debemos separar las particiones /boot y swap de los volúmenes LVM, creamos una

partición primaria para /boot con 100 MB de espacio en disco y marca de arranque, otra partición lógica con 1GB para swap.

11. Creamos una partición lógica a la que configuraremos como: Volumen físico para LVM.

12. Contamos ahora con las siguientes particiones: /boot, swap y un volumen LVM.

Adicionalmente contamos con espacio libre en el disco que más adelante uniremos al volumen LVM para aumentar su tamaño. Seleccionamos: Configurar el Gestor de Volúmenes Lógicos (LVM).

13. Guardamos el esquema de particiones, seleccionamos: Sí.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 22: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 22

Figura 1.31: Tenemos el resumen de la configuración LVM actual. Seleccionamos: Crear

grupo de volúmenes.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 23: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 23

Figura 1.32: Nombramos al primer grupo de volúmenes: grupo1.

Figura 1.33: Seleccionamos el dispositivo para el nuevo grupo de volúmenes: sda6.

Figura 1.34: Creamos un nuevo volumen lógico.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 24: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 24

Figura 1.35: Seleccionamos el grupo donde crearemos el volumen: grupo1.

Figura 1.36: Nombramos al primer volumen lógico: vol1.

Figura 1.37: Seleccionamos todo el espacio disponible para el volumen lógico.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 25: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 25

Figura 1.38: Terminamos la configuración de LVM, seleccionamos: Terminar.

Figura 1.39: Seleccionamos ahora la partición: grupo1 - vol1.

Figura 1.40: Configuramos la partición: sistema de archivos ext3, punto de montaje / y

Centro de Cómputo INFOUNI – REVALORA Perú

Page 26: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 26

terminamos de definir la partición.

Figura 1.41: Finalizamos el particionado.

Figura 1.42: Escribimos los cambios en el disco, seleccionamos: Sí.

14. Luego completamos los pasos de instalación del sistema operativo y reiniciamos el equipo. 15. Nos logueamos como root y ejecutamos el siguiente comando:

1. vgdisplay

Centro de Cómputo INFOUNI – REVALORA Perú

Page 27: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 27

16. Verificamos el espacio actual: 1. df -h

17. Crearemos ahora la partición sda3 a partir del espacio libre del disco: 1. fdisk /dev/sda1

18. Para el correcto uso de la partición creada recientemente, debemos reiniciar el sistema. 19. Preparamos la partición creada para poder ser usada en LVM:

1. pvcreate /dev/sda3 20. Extendemos el grupo grupo1 con la partición nueva:

1. vgextend grupo1 /dev/sda3

Centro de Cómputo INFOUNI – REVALORA Perú

Page 28: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 28

21. Ahora extendemos el volumen lógico en 2 GB: 1. lvextend -L +2G /dev/grupo1/vol1

22. Aplicamos los cambios: 1. resize2fs /dev/mapper/grupo1-vol1

23. Verificamos el nuevo espacio actual: 1. df -h

Centro de Cómputo INFOUNI – REVALORA Perú

Page 29: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 29

Tercera Unidad Sesión 2

2.1 Servidor VoIP ASTERISK

Asterisk es programa de software libre (bajo licencia GPL) que proporciona funcionalidades de una central telefónica (PBX). Como cualquier PBX, se puede conectar un número determinado de teléfonos para hacer llamadas entre sí e incluso conectar a un proveedor de VoIP o bien a una RDSI tanto básicos como primarios.Mark Spencer, de Digium, inicialmente creó Asterisk y actualmente es su principal desarrollador, junto con otros programadores que han contribuido a corregir errores y añadir novedades y funcionalidades. Originalmente desarrollado para el sistema operativo GNU/Linux, Asterisk actualmente también se distribuye en versiones para los sistemas operativos BSD, MacOSX, Solaris y Microsoft Windows, aunque la plataforma nativa (GNU/Linux) es la que cuenta con mejor soporte de todas.

Asterisk incluye muchas características anteriormente sólo disponibles en costosos sistemas propietarios PBX como buzón de voz, conferencias, IVR, distribución automática de llamadas, y otras muchas más. Los usuarios pueden crear nuevas funcionalidades escribiendo un dialplan en el lenguaje de script de Asterisk o añadiendo módulos escritos en lenguaje C o en cualquier otro lenguaje de programación reconocido por Linux.

Para conectar teléfonos estándar analógicos son necesarias tarjetas electrónicas telefónicas FXS o FXO fabricadas por Digium u otros proveedores, ya que para conectar el servidor a una línea externa no basta con un simple módem.

Quizá lo más interesante de Asterisk es que reconoce muchos protocolos VoIP como pueden ser SIP, H.323, IAX y MGCP. Asterisk puede interoperar con terminales IP actuando como un registrador y como gateway entre ambos.

Asterisk se empieza a adoptar en algunos entornos corporativos como una gran solución de bajo coste junto con SER (Sip Express Router).

Referencia: http://es.wikipedia.org/wiki/Asterisk

Los paquetes a usar son los siguientes:

– Asterisk: Núcleo o core del sistema.

– Zaptel: Interfaz del núcleo para acceder a tarjetas para lineas analógicas.

– Libpri: enlaces RDSI.

– Asterisk-addons: Complementos de software para Asterisk.

– Asterisk-gui: Interfaz gráfica.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 30: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 30

– Asterisk-sounds: Voces de calidad pre grabadas.

1. Recomendamos tener actualizados los repositorios y el sistema1. apt-get update

2. apt-get upgrade

2. Además de tener instalado y preparado el module-assistant:1. apt-get install module-assistant

2. m-a prepare3. Instalamos las dependencias necesarias:.

1. apt-get install libcurl3-dev libvorbis-dev libspeex-dev unixodbc unixodbc-dev libiksemel-dev flex xsltproc wget bzip2 libncurses5-dev libnewt-dev libusb-dev subversion git-core

4. Ahora procedemos a la descarga y descompresión de paquetes:1. cd /usr/src

2. wget http://downloads.digium.com/pub/asterisk/asterisk-1.4-current.tar.gz3. wget http://downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz4. wget http://downloads.digium.com/pub/libpri/libpri-1.4-current.tar.gz

5. wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.4-current.tar.gz6. tar xvzf asterisk-1.4-current.tar.gz && tar xvzf zaptel-1.4-current.tar.gz && tar xvzf libpri-

1.4-current.tar.gz && tar xvzf asterisk-addons-1.4-current.tar.gz5. Instalamos Zaptel:

1. cd /usr/src/zaptel-1.4*2. ./install_prereq test

3. ./install_prereq install4. ./configure

5. make6. make install7. make config

6. Instalamos Libpri:1. cd /usr/src/libpri-1.4*2. make && make install

7. Instalamos Asterisk:1. cd /usr/src/asterisk-1.4*

2. ./configure3. make menuselect

4. make5. make install

6. make samples7. make config 8. asterisk -vvvc

9. stop now8. Instalamos Asterisk-Addons:

1. cd /usr/src/asterisk-addons*2. ./configure && make && make install

3. make samples

Centro de Cómputo INFOUNI – REVALORA Perú

Page 31: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 31

9. Instalamos Asterisk-GUI: (antes: http://svn.digium.com/svn/asterisk-gui/trunk asterisk-gui/)1. cp -r /etc/asterisk /etc/asterisk.bak

2. cd /usr/src3. svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0

4. cd /usr/src/asterisk-gui5. ./configure && make && make install

6. make samples10. Modificamos los archivos de configuración de acceso de Asterisk-GUI:

1. cat << EOF >/etc/asterisk/http.conf

[general]

enabled=yes

enablestatic=yes

EOF

2. cat << EOF >/etc/asterisk/manager.conf

[general]

displaysystemname = yes

enabled = yes

webenabled = yes

port = 5038

;httptimeout = 60

bindaddr = 0.0.0.0

[admin]

secret = admin

read = system,call,log,verbose,command,agent,config

write = system,call,log,verbose,command,agent,config

EOF

11. Verificamos la configuración:

1. make checkconfig2. reboot

3. asterisk -r4. exit

12. Intentamos ingresar mediante interfaz web a Asterisk:

1. http://IPADDRESS:8088/asterisk/static/config/cfgbasic.html

Centro de Cómputo INFOUNI – REVALORA Perú

Page 32: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 32

13. Ahora creamos las cuentas de los usuarios de telefonía, el plan de llamadas y el correo de voz:

1. vim /etc/asterisk/Sip.conf

[001]username=001typ=friendsecret=001callerid=”Muga Ampuero” <001>host=dynamicnat=no;disallow=all;allow=ullawcontext=internalmailbox=001@voicemailcallgroup=1pickupgroup=1

[002]username=002typ=friendsecret=002callerid=”Ramos Herrera” <002>host=dynamicnat=no;disallow=all;allow=ullawcontext=internalmailbox=002@voicemailcallgroup=1pickupgroup=1

2. vim /etc/asterisk/extensions.conf

[internal]exten=> _xxx,1,Dial(SIP/${EXTEN},15,tT)exten=> _xxx,2,Voicemail(${EXTEN}@voicemail)exten=> _xxx,3,Playback(vm_goodbye)exten=> _xxx,4,Hangup

exten=> *1,1,Answerexten=> *1,2,Wait(1)exten=> *1,3,VoiceMailMain(${CALLERID}@voicemail)exten=> *1,4,Hangup

3. vim /etc/asterisk/voicemail.conf

Centro de Cómputo INFOUNI – REVALORA Perú

Page 33: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 33

[voicemail]001 =>001,Muga Ampuero, muga@localhost 002 =>002,Ramos Herrera, herrera@localhost

Nota: Si deseamos cambiar el idioma de nuestro PBX, necesitamos modificar el parámetro “Language” del archivo sip.conf

Podemos hacer uso de “softphones” en los clientes. Por ejemplo: X-Lite de CounterPath's.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 34: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 34

Tercera Unidad Sesión 3

3.1 Servidor Proftpd

ProFTPd es un servidor FTP, que se promociona desde su página web como estable y seguro, cuando se configura correctamente. El servidor ProFTPd se promociona a sí mismo como un Software servidor FTP altamente configurable con licencia GPL.

Referencia: http://es.wikipedia.org/wiki/ProFTPd

1. Necesitamos tener instalado el paquete proftpd (apt-get install proftpd). 2. El archivo de configuración se encuentra en:

/etc/proftpd/proftpd.conf 3. Vamos a crear dos carpetas. Una llamada upload para la carga de archivos en el servidor y

otra llamada download para la descarga; cada una con sus respectivos permisos. En la carpeta upload se permite la escritura de archivos pero no en la carpeta download.

4. Se utilizará como usuario anónimo (anonymous) al usuario ftp (creado por defecto con la instalación del servicio) con su carpeta home por defecto (/home/ftp). Además establecemos una clave al usuario ftp.

1. passwd ftpEnter new UNIX password: ftp

Retype new UNIX password: ftp2. mkdir -p /home/ftp/upload

3. mkdir -p /home/ftp/download

5. Cambiamos ahora los permisos y propietario sobre las carpetas creadas: 1. chown ftp /home/ftp/download

2. chown ftp /home/ftp/upload3. chmod 755 -R /home/ftp/download

4. chmod a+rw /home/ftp/upload

6. Respaldamos el archivo de configuración y lo editamos: 1. cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old

2. vim /etc/proftpd/proftpd.conf

## /etc/proftpd/proftpd.conf This is a basic ProFTPDconfiguration file.# To really apply changes reload proftpd after modifications.#

# Includes DSO modules

Centro de Cómputo INFOUNI – REVALORA Perú

Page 35: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 35

Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.UseIPv6 offServerName DebianServerType standaloneDeferWelcome off

MultilineRFC2228 onDefaultServer onShowSymlinks on

TimeoutNoTransfer 600TimeoutStalled 600TimeoutIdle 1200

DisplayLogin welcome.msgDisplayFirstChdir .messageListOptions l

DenyFilter \*.*/

# Port 21 is the standard FTP port.Port 21

# In some cases you have to specify passive ports range to by-pass# firewall limitations. Ephemeral ports can be used for that, but# feel free to use a more narrow range.# PassivePorts 49152 65534 # To prevent DoS attacks, set the maximum number of child processes# to 30. If you need to allow more than 30 concurrent connections# at once, simply increase this value. Note that this ONLY works# in standalone mode, in inetd mode you should use an inetd server# that allows you to limit maximum number of processes per service# (such as xinetd)MaxInstances 30

# Set the user and group that the server normally runs at.User proftpdGroup nogroup

# Umask 022 is a good standard umask to prevent new files and dirs# (second parm) from being group and world writable.Umask 022 022# Normally, we want files to be overwriteable.AllowOverwrite on

# Uncomment this if you are using NIS or LDAP to retrieve passwords:# PersistentPasswd off

# Be warned: use of this directive impacts CPU average load

Centro de Cómputo INFOUNI – REVALORA Perú

Page 36: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 36

## Uncomment this if you like to see progress and transfer rate with ftpwho# in downloads. That is not needed for uploads rates.# UseSendFile off

TransferLog /var/log/proftpd/xferlogSystemLog /var/log/proftpd/proftpd.log

IfModule mod_tls.c TLSEngine off/IfModule IfModule mod_quota.c QuotaEngine on/IfModule IfModule mod_ratio.c Ratios on/IfModule

# Delay engine reduces impact of the so-called Timing Attack described in# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02# It is on by default. IfModule mod_delay.c DelayEngine on/IfModule IfModule mod_ctrls.c ControlsEngine onControlsMaxClients 2ControlsLog /var/log/proftpd/controls.logControlsInterval 5ControlsSocket /var/run/proftpd/proftpd.sock/IfModule IfModule mod_ctrls_admin.c AdminControlsEngine on/IfModule # A basic anonymous configuration, no upload directories.

Anonymous ftp User ftpGroup ftp# We want clients to be able to login with änonymous" as well as "ftp"UserAlias anonymous ftp# Cosmetic changes, all files belongs to ftp userDirFakeUser on ftpDirFakeGroup on ftp

RequireValidShell off

# Limit the maximum number of anonymous loginsMaxClients 10

# We want 'welcome.msg' displayed at login, and '.message' displayed# in each newly chdired directory.DisplayLogin welcome.msgDisplayFirstChdir .message

# Limit WRITE everywhere in the anonymous chroot

Centro de Cómputo INFOUNI – REVALORA Perú

Page 37: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 37

Directory /home/ftp Limit WRITE READ DenyAll/Limit /Directory Directory /home/ftp/upload Umask 744Allowoverwrite offLimit READ DenyAll/Limit Limit WRITE CWD AllowAll/Limit /Directory

Directory /home/ftp/download Umask 444Limit READ AllowAll/Limit /Directory # # # Uncomment this if you're brave.# # Directory incoming # # # Umask 022 is a good standard umask to prevent new files and dirs# # # (second parm) from being group and world writable.# # Umask 022 022# # Limit READ WRITE # # DenyAll# # /Limit # # Limit STOR # # AllowAll# # /Limit # # /Directory # /Anonymous

7. Ahora reiniciamos el servicio:1. /etc/init.d/proftpd restart

Centro de Cómputo INFOUNI – REVALORA Perú

Page 38: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 38

Tercera Unidad Sesión 4

4.1 Manual de HTML

4.1.1 Introducción

El HTML, acrónimo inglés de Hyper Text Markup Language (lenguaje de marcas de hipertexto), es un lenguaje informático diseñado para estructurar textos y presentarlos en forma de hipertexto, que es el formato estándar de las páginas web.

Para realizar tu página Web necesitas en principio un editor de textos para escribir los ficheros que la compondrán.

Simplemente usando el NOTEPAD de Windows, VIM en Linux puedes realizar tus páginas Web, ya que una pagina Web es simplemente un texto al que se le añaden diferentes etiquetas con el objeto de indicar diferentes propiedades.

De cualquier manera existen editores específicos para realizar páginas Web. Dichos editores permiten por medio de menús e iconos incluir etiquetas de HTML sin necesidad de teclearlas.

Es decir, para poner un texto en cursiva en una pagina Web deberíamos escribir la instrucción:

<i>Texto</i>

En un editor de HTML, simplemente marcaríamos el texto con el ratón y pulsaríamos el icono de cursiva, el editor de encargaría de poner automáticamente las etiquetas <i> y </i> .

Sin embargo, en Manual-HTML.com te aconsejamos que uses el Bloc de Notas. Tendrás absoluto control sobre tu código y sabrás encontrar mucho más fácilmente los errores que, todos, cometemos de vez en cuando.

Cuando escribas tu página Web te recomendamos que todos los links, nombres de graficos, etc... los consignes en letra minúscula ya que la mayoria de los servidores Web distinguen entre mayúsculas y minúsculas. Es decir, las etiquetas:

<img src="dibujo.gif"> <img src="Dibujo.Gif">

Hacen referencia a ficheros distintos, aunque en tu disco duro (si usas Windows) harán referencia al mismo fichero, ya que Windows no distingue entre mayúsculas y minúsculas. Así que procura escribir correctamente estos nombres.

Básicamente, el HTML consta de una serie de órdenes o etiquetas, que indican al navegador que estemos utilizando, la forma de representar los elementos (texto, gráficos, etc...) que contenga el

Centro de Cómputo INFOUNI – REVALORA Perú

Page 39: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 39

documento. En este manual nos referiremos a estas órdenes con la palabra "etiqueta".

Las etiquetas de HTML pueden ser de dos tipos, cerradas o abiertas.

Las etiquetas cerradas son aquellas que tienen una palabra clave que indica el principio de la etiqueta y otra que indica el final. Entre la etiqueta inicial y la final se pueden encontrar otras etiquetas.

Las etiquetas abiertas constan de una sola palabra clave. Para diferenciar las etiquetas del resto del texto del documento se encierran entre los símbolos < y >. Las etiquetas cerradas incluyen el carácter / antes de la palabra clave para indicar el final de la misma. Una etiqueta puede contener "parámetros". Estos parámetros se indican a continuación de la palabra clave de la etiqueta.

Ejemplos :

etiqueta cerrada

<center> Mi página Web </center>

etiqueta abierta <hr>

etiqueta con parámetros <body bgcolor="#FFFFFF"> </body>

Los ficheros que contienen documentos HTML suelen tener la extensión .html o .htm. En este manual se han fijado los siguientes criterios a la hora de escribir la sintaxis de las etiquetas de HTML:

1º) Las etiquetas se indican en letra minúscula y en negrilla.2º) Los parámetros de las etiquetas se indican en letra minúscula y negrilla.3º) El resto de elementos se indican en letra normal.4º) Las palabras a resaltar en el texto se indican en cursiva y negrilla.

4.1.2 Estructura básica

Un documento escrito en HTML contendría básicamente las siguientes etiquetas:

<html> Indica el inicio del documento.<head> Inicio de la cabecera.<title> Inicio del título del documento. </title> Final del título del documento. </head> Final de la cabecera del documento. <body> Inicio del cuerpo del documento. </body> Final del cuerpo del documento. </html> Final del documento.

El documento se hallará situado en algún ordenador al que se pueda acceder a traves de Internet. Para indicar la situación del documento en Internet se utiliza la URL (Uniform Resource Locator). La URL es el camino que ha de seguir nuestro navegador a traves de Internet para acceder a un

Centro de Cómputo INFOUNI – REVALORA Perú

Page 40: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 40

determinado recurso, bien sea una página Web, un fichero, un grupo de noticias, etc.

Es decir, lo que el navegador de páginas Web hace es acceder a un fichero situado en un ordenador que está conectado a la red Internet. La estructura de una URL para una página Web suele ser del tipo http://dominio/directorio/fichero. El dominio indica el nombre del ordenador al que accedemos, el directorio es el nombre del directorio de ese ordenador y fichero el nombre del fichero que contiene la página Web escrita en HTML. Por ejemplo:

http://www.manual-html.com/directorio/index.hml

Donde:

http:// es el indicador de pagina Webwww.manual-html.com es el Dominio (nombre) del ordenador/directorio/ es el Directorio dentro del ordenadorindex.html es el Fichero que contiene la página Web

4.1.3 Cabecera

La etiqueta <head></head> delimita la cabecera del documento. Dentro de la cabecera es importante definir el título de la página por medio de la etiqueta <title></title>. Este título será el que aparezca en la barra de nuestro navegador de páginas Web.

Ejemplo :

<title>Página del Manual de HTML</title>

Dentro de la cabecera de nuestro documento podemos incluir otras etiquetas adicionales. La etiqueta <meta> indica al navegador de Internet las palabras clave y contenido de nuestra página Web.

Ejemplos :

<meta name="Pagina de Jose" content="Mi pagina personal, Musica y Peliculas">

<meta name="keywords" content="Jose, musica, peliculas, links, españa">

Esta información es útil para los buscadores, la primera línea ofrece a los buscadores una descripción sobre la página. En cambio la segunda línea indica las palabras clave de la página.

Otro uso de la etiqueta <meta> es la de indicar documentos con "refresco automático". Si se indica una URL se sustituirá el documento por el indicado una vez transcurridos el número de segundos especificados. Si no se incluye ninguna URL se volverá a cargar en el navegador el documento en uso transcurridos los segundos indicados. Esto es útil para páginas que cambian de contenido con

Centro de Cómputo INFOUNI – REVALORA Perú

Page 41: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 41

mucha frecuencia o para redireccionar a la persona que visita nuestra página Web a una nueva dirección donde se encuentra una versión actualizada de nuestra página Web.

Ejemplo :

<meta http-equiv="refresh" content="15;URL=http://www.microsoft.com">

Transcurridos 15 segundos se accederá a la página Web de Microsoft.

La etiqueta <base> indica la localización de los ficheros, gráficos, sonidos, etc... a los que se hace referencia en nuestra página Web. Si no se incluye esta etiqueta el navegador entiende que dichos elementos se encuentran en el mismo lugar donde se encuentra nuestra página Web.

Ejemplo :

<base href="http://www.manual-html.com//manual/">

4.1.4 Cuerpo

La etiqueta <body></body> indica el inicio y final de nuestra página Web. Será entre el inicio y el final de esta etiqueta donde pongamos los contenidos de nuestra página, textos, gráficos, enlaces, etc.... Esta etiqueta tiene una serie de parámetros opcionales que nos permiten indicar la "apariencia" global del documento:

background="nombre de fichero gráfico" Indica el nombre de un fichero gráfico que servirá como "fondo" de nuestra página. Si la imagen no rellena todo el fondo del documento, esta será reproducida tantas veces como sea necesario.

bgcolor="código de color" Indica un color para el fondo de nuestro documento. Se ignora si se ha usado el parámetro background.

text="código de color" Indica un color para el texto que incluyamos en nuestro documento. Por defecto es negro.link="código de color" Indica el color de los textos que dan acceso a un Hiperenlace. Por defecto es azul.

vlink="código de color"

Indica el color de los textos que dan acceso a un Hiperenlace que ya hemos visitado con nuestro navegador. Por defecto es purpura.

El código de color es un numero compuesto por tres pares de cifras hexadecimales que indican la proporción de los colores "primarios", rojo, verde y azul. El codigo de color se antecede del símbolo #.

Ejemplos:

Centro de Cómputo INFOUNI – REVALORA Perú

Page 42: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 42

#000000 - Negro#FF0000 - Rojo#00FF00 - Verde#0000FF - Azul#FFFFFF - Blanco

El primer par de cifras indican la proporción de color Rojo, el segundo par de cifras la proporción de color Verde y las dos últimas la proporción de color Azul. Cada par de cifras hexadecimales nos permiten un rango de 0 a 255. Combinando las proporciones de cada color primario obtendremos diferentes colores.

4.1.5 Juego de caracteres HTML

Todos los navegadores de páginas Web actuales soportan todos los caracteres gráficos del la especificación ISO 8859-1, que permiten escribir textos en la mayoría de los paises occidentales.

De cualquier forma y como muchos sistemas tienen distintos juegos de caracteres ASCII, se han definido dos formas de representar caracteres especiales usando solamente el código ASCII de 7 bits. Para hacer referencia a estos caracteres se les asigna un código numérico o un nombre de "entidad ". Asi mismo hay caracteres que se utilizan para las etiquetas de HTML, por ejemplo < y > . Estos caracteres pueden ser representados por un código numérico o una entidad cuando deseemos que aparezcan en el documento "tal cual". Las entidades comienzan por el símbolo & (ampersand) y terminan con el símbolo ; (punto y coma).

A continuacion veamos una tabla con las principales entidades:

Caracter Código Entidad Caracter Código Entidad

! &#33; -- " &#34; --

# &#35; -- $ &#36; --

% &#37; -- & &#38; --

' &#39; -- ( &#40; --

) &#41; -- * &#42; --

+ &#43; -- , &#44; --

- &#45; -- . &#46; --

/ &#47; -- : &#58; --

; &#59; -- < &#60; --

Centro de Cómputo INFOUNI – REVALORA Perú

Page 43: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 43

= &#61; -- > &#62; --

? &#63; -- @ &#64; --

[ &#91; -- &#92; --

] &#93; -- ^ &#94; --

_ &#95; -- ` &#96; --

{ &#123; -- | &#124; --

} &#125; -- ~ &#126; --

&#160; nbsp ¡ &#161; iexcl

¢ &#162; cent £ &#163; pound

¤ &#164; curren ¥ &#165; yen

¦ &#166; brvbar § &#167; sect

¨ &#168; uml © &#169; copy

ª &#170; ordf « &#171; laquo

¬ &#172; not &#173; shy

® &#174; reg ¯ &#175; macr

° &#176; deg ± &#177; plusmn

² &#178; sup2 ³ &#179; sup3

´ &#180; acute µ &#181; micro

¶ &#182; para · &#183; middot

¸ &#184; cedil ¹ &#185; sup1

º &#186; ordm » &#187; raquo

¼ &#188; frac14 ½ &#189; frac12

¾ &#190; frac34 ¿ &#191; iquest

Centro de Cómputo INFOUNI – REVALORA Perú

Page 44: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 44

À &#192; Agrave Á &#193; Aacute

 &#194; Acirc à &#195; Atilde

Ä &#196; Auml Å &#197; Aring

Æ &#198; AElig Ç &#199; Ccedil

È &#200; Egrave É &#201; Eacute

Ê &#202; Ecirc Ë &#203; Euml

Ì &#204; Igrave Í &#205; Iacute

Î &#206; Icirc Ï &#207; Iuml

Ð &#208; ETH Ñ &#209; Ntilde

Ò &#210; Ograve Ó &#211; Oacute

Ô &#212; Ocirc Õ &#213; Otilde

Ö &#214; Ouml × &#215; times

Ø &#216; Oslash Ù &#217; Ugrave

Ú &#218; Uacute Û &#219; Ucirc

Ü &#220; Uuml Ý &#221; Yacute

Þ &#222; THORN ß &#223; szlig

à &#224; agrave á &#225; aacute

â &#226; acirc ã &#227; atilde

ä &#228; auml å &#229; aring

æ &#230; aelig ç &#231; ccedil

è &#232; egrave é &#233; eacute

ê &#234; ecirc ë &#235; euml

ì &#236; igrave í &#237; iacute

Centro de Cómputo INFOUNI – REVALORA Perú

Page 45: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 45

î &#238; icirc ï &#239; iuml

ð &#240; eth ñ &#241; ntilde

ò &#242; ograve ó &#243; oacute

ô &#244; ocirc õ &#245; otilde

ö &#246; ouml ÷ &#247; divide

ø &#248; oslash ù &#249; ugrave

ú &#250; uacute û &#251; ucirc

ü &#252; uuml ý &#253; yacute

þ &#254; thorn ÿ &#255; yuml

Por lo tanto la palabra página la podríamos escribir como:

p á gina p &aacute; gina p &#225; gina

Es por ello que si deseamos que cualquier visor de páginas Web pueda visualizar las letras acentuadas de nuestro documento debemos utilizar sus correspondientes entidades o códigos para representarlas.

4.1.6 Espacios y saltos de línea

En HTML sólo se reconoce un espacio entre palabra y palabra, el resto de los espacios serán ignorados por el navegador.

Ejemplo Se verá como

Esto es una frase Esto es una frase

Centro de Cómputo INFOUNI – REVALORA Perú

Page 46: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 46

Así mismo, tampoco se respetan las tabulaciones, retornos de carro etc. Para ello existen una serie de etiquetas que indican estos códigos. La etiqueta <pre></pre> obliga al navegador a visualizar el texto tal y como ha sido escrito, respetando tabulaciones, espacios, retornos de carro, etc.

Ejemplo Se verá como

<pre>

Este texto ha sido

preformateado.

</pre>

Este texto ha sido

preformateado.

Para indicar un salto de línea se utiliza la etiqueta <br> y para un cambio de párrafo (deja una línea en blanco en medio) se utiliza la etiqueta <p>.

Ejemplo Se verá como

Este texto tiene<br>saltos de linea y <p> de párrafo.

Este texto tienesaltos de línea y de párrafo.

La etiqueta <p> puede usarse también como etiqueta "cerrada" <p></p> indicando de esta manera los atributos de un párrafo en concreto. Cuando se usa de esta manera tiene el parámetro align que indica al navegador la forma de "justificar" el párrafo. Los valores posibles de este parámetro son left, right y center , estando aún en estudio el valor justify (muchos navegadores lo aceptan).

Centro de Cómputo INFOUNI – REVALORA Perú

Page 47: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 47

Ejemplo Se verá como

<p align="right">Este es un ejemplo de un párrafo de texto alineado a la derecha.</p>

Este es un ejemplo de párrafo de texto alineado a la derecha

<p align="center">Este es un ejemplo de párrafo de texto centrado.</p>

Este es un ejemplo de párrafo de texto centrado

La etiqueta <hr> muestra una linea horizontal de tamaño determinable. Tiene los siguientes parámetros opcionales: align="posicion" Alinea la linea a la izquierda (left), a la derecha (right) o la centra (center). noshade No muestra sombra, evitando el efecto en tres dimensiones. size = numero Indica el grosor de la línea en pixels. width = num / % Indica el ancho de la linea en tanto por ciento en función del ancho de la ventana del navegador. Tambien se puede especificar un número que indicaría el ancho de la línea en pixels.

Ejemplo :

<hr align="center" size="20" width="50%">

La etiqueta <hr> sin ningun parámetro mostraría una linea horizontal que ocuparia todo el ancho de la página.

4.1.7 Cabeceras

En un documento de HTML se pueden indicar seis tipos de cabeceras (tamaños de letra) por medio de las etiquetas <h1><h2><h3><h4><h5> y <h6>, todas con su respectiva etiqueta de cierre.

El texto que escribamos entre el inicio y el fin de la etiqueta será el afectado por las cabeceras.

La cabecera <h1> será la que muestre el texto en mayor tamaño.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 48: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 48

Ejemplo Se vería como

<h1>Texto de Prueba</h1> Texto de prueba

<h2>Texto de Prueba</h2> Texto de Prueba

<h3>Texto de Prueba</h3> Texto de Prueba

<h4>Texto de Prueba</h4> Texto de Prueba

<h5>Texto de Prueba</h5> Texto de Prueba

<h6>Texto de Prueba</h6> Texto de Prueba

Los textos marcados como "cabeceras" provocan automáticamente un retorno de carro sin necesidad de incluir la etiqueta <br> . Por ejemplo :

Ejemplo Se vería como

<h3>Página de Jose</h3>Esta es mi pagina personal. Página de Jose

Esta es mi pagina personal

4.1.8 Atributos del texto:

Para indicar atributos del texto (negrilla, subrayado, etc...) tenemos varias etiquetas. Algunas de ellas no son reconocidas por determinados navegadores de Internet, es por ello que segun el navegador que este vd. utilizando, verá el resultado correctamente o no.

Atributo Etiqueta Ejemplo

Negrita <b></b> <b> Texto de prueba </b>

Cursiva <i></i> <i> Texto de prueba </i>

Teletype <tt></tt> <tt> Texto de prueba </tt>

Subrayado <u></u> <u> Texto de prueba </u>

Centro de Cómputo INFOUNI – REVALORA Perú

Page 49: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 49

Tachado <s></s> <s> Texto de prueba </s>

Parpadeo <blink></blink> <blnk> Texto de prueba </blink>

Superindice <sup></sup> <sup> Texto de prueba </sup>

Subindice <sub></sub> <sub> Texto de prueba </sub>

Centrado <center></center> <center> Texto de prueba </center>

Por otro lado la etiqueta <font></font> nos permite variar el tamaño, el color, y el tipo de letra de un texto determinado. Utiliza para ello los parámetros size , bgcolor y face .

size="valor"

Da al texto un tamaño en puntos determinado. size = + / - valor Da al texto un tamaño tantas veces superior (+) o inferior (-) como indique el valor.

color="codigo de color"

Escribe el texto en el color cuyo codigo se especifica.

face="nombre de font"

Escribe el texto en el tipo de letra especificado. Si este tipo de letra no existe en el ordenador que "lee" la pagina se usara el font predeterminado del navegador.

Ejemplo

<font size="+2" color="#FF0000" face="Arial" > Texto de prueba </font>

Existen otras etiquetas que realizan las mismas operaciones que las antes vistas en los atributos del texto.

Ejemplo

<font size="+2" color="#FF0000" face="Arial"> Texto de prueba </font>

Para incluir comentarios en la página Web se utiliza la etiqueta <!-- -->.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 50: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 50

Ejemplo :

<!-- Esto es un comentario sobre mi pagina Web -->

Los comentarios no seran mostrados por el navegador y son úitiles para realizar anotaciones en el documento HTML que nos indiquen lo que estamos haciendo en una determinada parte del documento. Asimismo veremos más adelante que la etiqueta de comentario nos será de utilidad para incluir codigo JavaScript en nuestra página Web.

4.1.9 Listas

Existen tres tipos de listas, numeradas, sin numerar y de definición.

Las listas numeradas representarán los elementos de la lista numerando cada uno de ellos segun el lugar que ocupan en la lista. Para este tipo de lista se utiliza la etiqueta <ol></ol> . Cada uno de los elementos de la lista irá precedido de la etiqueta <li> . La etiqueta <ol> puede llevar los siguientes parámetros :

start="num"

Indica que número será el primero de la lista. Si no se indica se entiende que empezará por el número 1.

type="tipo"

Indica el tipo de numeración utilizada. Si no se indica se entiende que será una lista ordenada numéricamente.

Los tipos posibles son :

1 = Numéricamente. (1,2,3,4,... etc.) a = Letras minúsculas. (a,b,c,d,... etc.) A = Letras mayúsculas. (A,B,C,D,... etc.) i = Numeros romanos en minúsculas. (i.ii,iii,iv,v,... etc.) I = Números romanos en mayúsculas. (I,II,III,IV,V,... etc.)

Ejemplo

Resultado

<ol> <li> España </li><li> Francia </li>

Centro de Cómputo INFOUNI – REVALORA Perú

Page 51: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 51

<li> Italia </li><li> Portugal </li></ol>

1. España 2. Francia 3. Italia 4. Portugal

<ol type="A"> <li> España <li><li> Francia <li><li> Italia <li><li> Portugal <li></ol>

A. España B. Francia C. Italia D. Portugal

Las listas sin numerar representan los elementos de la lista con un "topo" o marca que antecede a cada uno de ellos.

Se utiliza la etiqueta <ul></ul> para delimitar la lista, y <li> para indicar cada uno de los elementos.

La etiqueta <ul> puede contener el parámetro type que indica la forma del "topo" o marca que antecede a cada elemento de la lista. Los valores de type pueden ser disk , circle o square , con lo que el topo o marca puede ser un disco, un circulo o un cuadrado.

Ejemplo

Resultado

<ul type="disk"> <li> España </li><li> Francia </li><li> Italia </li><li> Portugal </li></ul>

· España

· Francia

· Italia

· Portugal

<ul type="square"> <li> España </li><li> Francia </li><li> Italia </li>

Centro de Cómputo INFOUNI – REVALORA Perú

Page 52: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 52

<li> Portugal </li></ul>

§ España

§ Francia

§ Italia

§ Portugal

Las listas de definición muestran los elementos tipo Diccionario, o sea, término y definición. Se utiliza para ellas la etiqueta <dl></dl> . El elemento marcado como término se antecede de la etiqueta <dt> , el marcado como definición se antecede de la etiqueta <dd> .

Ejemplo

Resultado

<dl> <dt> WWW </dt><dd> Abreviatura de World Wide Web </dd><dt> FTP </dt><dd> Abreviatura de File Transfer Protocol </dd><dt> IRC </dt><dd> Abreviatura de Internet Relay Chat </dd></dl>

WWW

Abreviatura de World Wide Web

FTP

Abreviatura de File Transfer Protocol

IRC

Abreviatura de Internet Relay Chat

Existen otros dos tipos de listas menos comunes. Las listas de Menú o Directorio se comportan igual que las listas sin numerar.

La lista de Menú utiliza la etiqueta <menu></menu> y los elementos se anteceden de <li> El resultado es una lista sin numerar mas "compacta" es decir, con menos espacio interlineal entre los elementos.

La lista de Directorio utiliza la etiqueta <dir></dir> y los elementos se anteceden de <li> . Los elementos tienen un limite de 20 caracteres.

Todas las listas se pueden "anidar", es decir incluir una lista dentro de otra, con lo que se consigue una estructura tipo "indice de materias".

Centro de Cómputo INFOUNI – REVALORA Perú

Page 53: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 53

Ejemplo

Resultado

<ul type="disk"><li> Buscadores<ul> <li> Yahoo </li><li> Ole </li><li> Lycos </li></ul></li><li> Links<ul><li> Microsoft </li><li> IBM </li></ul></li></ul>

· Buscadores

· Yahoo

· Ole

· Lycos

· Links

· Microsoft

· IBM

4.1.10 Imágenes

Hasta el momento hemos visto como se puede escribir texto en una página Web, así como sus posibles formatos.

Para incluir una imagen en nuestra página Web utilizaremos la etiqueta <img>.

Hay tres formatos de imágenes que todos los navegadores modernos reconocen. Son las imágenes GIF, JPG y PNG.

Cualquier otro tipo de fichero gráfico o de imagen (BMP, PCX, CDR, etc...) no será mostrado por el navegador, a no ser que disponga de un programa externo que permita su visualización.

La etiqueta <img> tiene varios parámetros:

src="imagen" Indica el nombre del fichero gráfico a mostrar.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 54: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 54

alt="Texto" Mostrara el texto indicado en el caso de que el navegador utilizado para ver la página no sea capaz de visualizar la imagen.

lowsrc="imagen" Muestra una segunda imagen "superpuesta" sobre la primera una vez se carga la página. Este parámetro no es reconocido por la totalidad de los navegadores ya que esta en estudio su aplicación, así que en la mayoría de los casos sera ignorado mostrándose solo la primera imagen ( src ). En Netscape muestra la imagen indicada por lowsrc en primer lugar, y posteriormente muestra la imagen indicada por src . Si las imágenes son iguales pero tienen distinta "resolución" se conseguirá un efecto tipo "Fade". Si las imagenes son de distinto tamaño la imagen indicada en src se redimensionará al tamaño indicado por la imagen indicada en lowsrc

align="top / middle / bottom" Indica como se alineará el texto que siga a la imagen. top alinea el texto con la parte superior de la imagen, middle con la parte central, y bottom con la parte inferior.

border="tamaño" Indica el tamaño del "borde" de la imagen. A toda imagen se le asigna un borde que será visible cuando la imagen forme parte de un Hyperenlace.

height="tamaño" Indica el alto de la imagen en puntos o en porcentaje. Se usa para variar el tamaño de la imagen original.

width="tamaño" Indica el ancho de la imagen en puntos o en porcentaje. Se usa para variar el tamaño de la imagen original.

hspace="margen" Indica el numero de espacios horizontales, en puntos, que separarán la imagen del texto que la siga y la anteceda.

vspace="margen" Indica el número de puntos verticales que separaran la imagen del texto que le siga y la anteceda.

ismap / usemap Indica que la imagen es un MAPA. Veremos estos parametros más adelante en este manual.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 55: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 55

Ejemplo

Se vería como

<img src="caution.gif" alt="Cuidado !!" >

Si el navegador no pudiese visualizar el gráfico.

La imagen a mostrar puede encontrase en el mismo lugar (URL) que la pagina Web. Si este no fuera el caso, el nombre de la imagen ha de contener la URL donde se encuentre la imagen.

Ejemplo

<img src="http://www.microsoft.com/iexplorer.gif">

Veamos varios ejemplos "jugando" con los tamaños de la imagen, así como comprobando la alineación de los textos.

(Recuerde que en función del navegador que vd. utilize pueden verse o no los efectos de cada parametro).

Ejemplo Se vería como

<img src="caution.gif" width="100">

<img src="caution.gif" height="20">

<img src="caution.gif" align="top"> Atención !!!

Atencion !!!

<img src="caution.gif" align="middle">Atención !!!

Atencion !!!

Centro de Cómputo INFOUNI – REVALORA Perú

Page 56: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 56

<img src="caution.gif" align="bottom"> Atención !!!

Atencion !!!

Tenga en cuenta <img src="caution.gif" hspace="20"> esta indicación.

Tenga en cuenta esta indicacion

Tenga en cuenta <img src="caution.gif" vspace="40"> esta indicación.

Tenga en cuenta esta indicacion.

4.1.11 Enlaces

La característica principal de una página Web es que podemos incluir Hiperenlaces. Un Hiperenlace es un elemento de la página que hace que el navegador acceda a otro recurso, otra página Web, un archivo, etc.

Para incluir un Hyperenlace se utiliza la etiqueta <a></a> . El texto o imagen que se encuentre dentro de los límites de esta etiqueta será sensible, esto quiere decir que si pulsamos con el raton sobre él, se realzará la función de hiperenlace indicada por la etiqueta <a></a> .

Si el Hiperenlace está indicado por un texto, este aparecerá subrayado y en distinto color, si se trata de una imagen, esta aparecerá con un borde rodeándola. Esta etiqueta tiene el parámetro href que indica el lugar a donde nos llevará el Hiperenlace si lo pulsamos.

Ejemplo

Se vería como

<a href="http://www.microsoft.com/" > Pulse para ir a la página de Microsoft </a>

Pulse para ir a la página de Microsoft

Si situamos el ratón encima de la frase y pulsamos, el navegador accederá a la página Web indicada por el parámetro href , es decir, accederá a la página situada en http://www.microsoft.com/

Centro de Cómputo INFOUNI – REVALORA Perú

Page 57: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 57

Lo mismo podríamos hacer con un gráfico.

Ejemplo Se vería como

<a href="http://www.microsoft.com/" > Pulse para ir a la página de Microsoft </a>

Pulse para ir a la página de Microsoft

Si situamos el ratón encima de la frase y pulsamos, el navegador accederá a la página Web indicada por el parámetro href , es decir, accederá a la página situada en http://www.microsoft.com/

Lo mismo podríamos hacer con un gráfico.

Ejemplo Se vería como

Para buscar en Internet : <a href="http://www.yahoo.com/" >

<img src="yahoo.gif" ></a>

Para buscar en Internet :

Pulsando sobre la imagen se accedería a la pagina situada en http://www.yahoo.com/.

Un Hiperenlace también puede llevarnos a una zona de nuestra página. Para ello debemos marcar en nuestra pagina las diferentes secciones en las que se divide. Lo haremos con el parámetro name .

Ejemplo:

<a name="seccion1" ></a>

Esta instrucción marca el inicio de una sección dentro de nuestra página. La seccion se llamará seccion1 . Para hacer un enlace a esta sección dentro de nuestra página lo haríamos de la siguiente forma :

<a href="#seccion1">Primera Parte</a>

Centro de Cómputo INFOUNI – REVALORA Perú

Page 58: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 58

O también :

<a href="http://www.mipagina.dom/mipagina.htm#seccion1">Primera Parte </a>

Un Hiperenlace puede hacerse a cualquier tipo de fichero. Con las etiquetas anteriores hemos visto como hacer enlaces a páginas Web o secciones dentro de una página web, pero podríamos hacer un Hiperenlace a un grupo de noticias, o a otro servicio de Internet.

Ejemplo:

<a href="news://news.actualidad.es/">Noticias de actualidad </a>

Asimismo podemos hacer que el Hiperenlace de como resultado el envío de un correo electrónico a una dirección de correo determinada.

Ejemplo:

<a href="mailto:[email protected]"> Envíame tus sugerencias </a>

También podemos realizar un Hiperenlace a un fichero cualquiera. En este caso el navegador intentará "ejecutar" el fichero, y si no puede hacerlo nos preguntará si deseamos grabarlo en nuestro ordenador. Esta es una forma sencilla de permitir a los visitantes de nuestra página copiar ficheros a su ordenador.

<a href="manual.zip">Pulsa aqui para llevarte una copia del manual. </a>

4.1.12 Tablas

Las tablas nos permiten representar cualquier elemento de nuestra página (texto, listas, imágenes, etc...) en diferentes filas y columnas separadas entre si. Es una herramienta muy útil para "ordenar" contenidos de distintas partes de nuestra página.

La tabla se define mediante la etiqueta <table></table>. Los parámetros opcionales de esta etiqueta son :

border="num". Indica el ancho del borde de la tabla en puntos.

cellspacing="num" Indica el espacio en puntos que separa las celdas que estan dentro de la tabla.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 59: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 59

cellpadding="num" Indica el espacio en puntos que separa el borde de cada celda y el contenido de esta.

width="num" ó % Indica la anchura de la tabla en puntos o en porcentaje en función del ancho de la ventana del navegador. Si no se indica este parámetro, el ancho se adecuará al tamaño de los contenidos de las celdas.

height="num" ó % Indica la altura de la tabla en puntos o en porcentaje en función del alto de la ventana del navegador. Si no se indica este parámetro, la altura se adecuará a la altura de los contenidos de las celdas.

bgcolor="codigo de color" Especifica el color de fondo de toda la Tabla.

Para definir las celdas que componen la tabla se utilizan las etiquetas <td> y <th> . <td> indica una celda normal, y <th> indica una celda de "cabecera", es decir, el contenido será resaltado en negrita y en un tamaño ligeramente superior al normal. Los parámetros opcionales de ambas etiquetas son:

align="left / center / right / justify" Indica como se debe alinear el contenido de la celda, a la izquierda (left), a la derecha (right), centrado (center) o justificado (justify).

valign="top / middle / bottom" Indica la alineación vertical del contenido de la celda, en la parte superior (top), en la inferior (bottom), o en el centro (middle).

rowspan="num" Indica el número de filas que ocupará la celda. Por defecto ocupa una sola fila.

colspan="num" Indica el número de columnas que ocupará la celda. Por defecto ocupa una sola columna.

width="num" ó % Indica la anchura de la columna en puntos o en porcentaje en función del ancho de la ventana del navegador. Si no se indica este parámetro, el ancho se adecuará al tamaño de los contenidos. Este parámetro solo funciona en los navegadores modernos.

bgcolor="codigo de color" Especifica el color de fondo del elemento de la Tabla. Para indicar que acaba una fila de celdas se utiliza la etiqueta <tr> . A continuación mostraremos un ejemplo de una tabla que contiene solo texto. Como se indicó anteriormente el contenido de las celtas puede ser cualquier elemento de HTML, un texto, una imagen, un Hiperenlace, una Lista, etc...

Centro de Cómputo INFOUNI – REVALORA Perú

Page 60: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 60

Ejemplo

<table border="4" cellspacing="4" cellpadding="4" width="80%">

<tr><th align="center"> Buscadores</th><th align="center" colspan="2"> Otros Links</th></tr> <tr> <td align="left">Yahoo</td><td align="left">Microsoft</td><td align="left">IBM</td> </tr><tr> <td align="left">Infoseek</td> <td align="left">Apple</td><td align="left">Digital</td></tr>

</table>

Buscadores Otros Links

Yahoo Microsoft IBM

Infoseek Apple Digital

Las etiquetas <td> y <th> son cerradas según el estandar de HTML, es decir que un elemento de tabla <td> deberia cerrarse con un </td> , sin embargo los navegadores asumen que un elemento de la tabla, queda automáticamente "cerrado" cuando se "abre" el siguiente.

4.1.13 Marquee

La etiqueta <marquee></marquee> crea una marquesina con un texto en su interior que se desplaza. Funciona únicamente con Ms-Explorer. Sus parámetros son los siguientes:

align="top / middle / bottom" Indica si el texto del interior de la marquesina se alinea en la zona alta (top), en la baja (bottom) o en el centro (middle) de la misma.

bgcolor="codigo de color" Indica el color del fondo de la marquesina.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 61: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 61

direction="left / right" Indica hacia que lugar se desplaza el texto, hacia la izquierda (left) o hacia la derecha (right)

height="num" o % Indica la altura de la marquesina en puntos o porcentaje en función de la ventana del navegador.

width="num" o % Indica la anchura de la marquesina en puntos o porcentaje en función de la ventana del navegador.

loop="num / infinite" Indica el numero de veces que se desplazará el texto por la marquesina. Si se indica infinite, se desplazará indefinidamente.

scrolldelay="num." Indica el número de milisegundos que tarda en reescribirse el texto por la marquesina, a mayor número mas lentamente se desplazará el texto.

Veamos un ejemplo de esta etiqueta :

<marquee bgcolor="#FFFFFF" width="50%" scrolldelay="0"> Bienvenido a mi pagina personal en Internet. </marquee>

4.1.14 Sonidos

Nuestra página Web puede tener un sonido que se active al entrar en la página. Esta característica de Ms Explorer utiliza la etiqueta <bgsound> y tiene los siguientes parámetros :

src="fichero" Indica el nombre del fichero que contiene el sonido (.waw, .mid).

loop="num / infinite" Indica el número de veces que se reproducirá el sonido. Si se indica infinite, el sonido se reproducirá de forma contínua hasta que abandonemos la página.

Un ejemplo de esta etiqueta sería :

Para utilizar esta función en Netscape se utiliza la etiqueta <embed> . Esta etiqueta se utiliza realmente para "incrustar" un objeto en nuestra pagina Web. Dicho objeto puede ser un fichero de sonido, un video, un gráfico BMP, etc... Tiene los siguientes parámetros :

Centro de Cómputo INFOUNI – REVALORA Perú

Page 62: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 62

src="fichero" Indica el nombre del fichero que contiene el sonido (.waw, .mid) o el video (.avi).

autostart="true" Incluirlo si deseamos que la reproducción se inicie inmediatamente.

loop="true" Incluirlo si deseamos que la reproducción no se detenga. (al terminar, vuelve a comenzar automáticamente).

volume="numero" Volumen al que se reproducen los ficheros de sonido.

width="numero"

height="numero" Anchura y Altura de la representación del objeto. (Si es un sonido no es necesario este parámetro).

controls="smallconsole" Visualiza una serie de controles que nos permiten iniciar la reproducción del fichero, así como realizar una pausa o detenerlo.

Un ejemplo de esta etiqueta sería :

<embed src="yesterday.mid" loop="true" autostart="true" volume="50" width="50" height="15" controls="smallconsole">

Centro de Cómputo INFOUNI – REVALORA Perú

Page 63: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 63

Tercera Unidad Sesión 5

5.1 Manual de PHP

5.1.1 Introducción a PHP

PHP es un lenguaje de scripting que permite la generación dinámica de contenidos en un servidor web. El significado de sus siglas es HyperText Preprocessor. Entre sus principales características cabe destacar su potencia, su alto rendimiento, su facilidad de aprendizaje y su escasez de consumo de recursos.

El código PHP puede incluirse dentro del código html de la pagina. Para delimitar la sección de código PHP podemos hacerlo de varias formas:

-Usando las etiquetas <?php y <?

-Usando las etiquetas <? y ?>

-Mediante <script languaje="php"> </script>

El funcionamiento de las páginas en PHP alojadas en un servidor es el siguiente:

-El navegador del cliente solicita el documento PHP.

-Llega la solicitud del servidor y el servidor localiza el documento, lanza el intérprete de PHP y ejecuta todo su código.

-Una vez ejecutado el código se genera el resultado en HTML y lo devuelve al servidor para que lo transfiera al cliente.

-El servidor transfiere el resultado en HTML y es mostrado en el navegador del cliente.

5.1.2 Variables

Una variable podría definirse como una posición de memoria creada para introducir o asignar cualquier valor o dato. Durante la ejecución del script el valor de la variable puede "variar"(valga la redundancia) tanto de tipo como de valor. En PHP (al igual que en JavaScript) no hace falta declarar la variable ya que simplemente anteponiendo el carácter $ al nombre de la variable estamos indicando que es una variable.

Otro hecho que cabe destacar a la hora de programar en PHP y la declaración de variables es que PHP es un lenguaje "CASE SENSITIVE" es decir que diferencia entre mayúsculas y minúsculas y debido a esta razón no sería lo mismo $miVariable=valor; que $MiVaRiABle=valor; ya que PHP lo interpretaría como dos variables completamente diferentes.

Los tipos de datos posibles que puede almacenar una variable son los siguientes :

Centro de Cómputo INFOUNI – REVALORA Perú

Page 64: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 64

Integer

Números enteros positivos y negativos

Double

Números decimales o de coma flotante

String

Cadenas de texto

Boolean

Valores True o False

Array

Tipo especial de colección de valores

Object

Tipo especial de dato complejo

En capítulos posteriores daremos cabida a los dos últimos tipos de datos(array y object) que aqui no han sido explicados ni comentados apenas.

5.1.3 Convertir tipos

PHP es un lenguaje que realiza la conversión de tipos en función de los operandos y del operador. De esta forma si intentamos sumar la cadena '10' y el número 20 la acción que realizaría sería convertir la primera variable a numérica y de esa forma podría sumar 10+20=30.

Aparte de que PHP en algunos casos realiza la conversión existen dos funciones especiales del propio lenguaje las cuales nos permiten saber el tipo de variable que estamos usando y también pueden convertir el tipo de variable:

gettype() Recibe el tipo de variable que es settype($variable,'tipo variable') Transforma el tipo de variable del modo actual a el modo que le introduzcamos.

Variables características de PHP

argv Array de argumentos pasados en la ejecución del script.

$_SERVER['argc'] Número de parametros pasados al script en su ejecución.

$_SERVER['PHP_SELF'] Nombre del script que se está ejecutando

$_COOKIE Array asociativo de pares (clave,valor) pasados a través de cookies

$_GET Array asociativo de pares (clave,valor) pasados a través de GET

$_POST Array asociativo de pares (clave,valor) pasados a través de POST

Centro de Cómputo INFOUNI – REVALORA Perú

Page 65: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 65

$_FILES Array asociativo que contiene información de los ficheros recibidos mediante POST

$_ENV Array asociativo de pares (clave,valor) del entorno

$_SERVER Array asociativo de pares (clave,valor) del servidor

$_SESSION Array asociativo de pares (clave,valor) de sesion

5.1.4 Constantes

Son valores que se van a mantener constantes a lo largo de la ejecución del script y que posiblemente queramos usar a lo largo del script un gran número de veces. Para ello usamos la siguiente sintaxis:

define("nombre de la constante", valor);

5.1.5 Mi Primer Script PHP

Una vez que ya tenemos instalados PHP y MySQL , y el servidor Apache configurado para usarlos, podemos comenzar a escribir nuestro primer script en PHP.

Ejemplo script php

<html> <body> <?php $myvar = "Hola. Este es mi primer script en PHP n";

//Esto es un comentario

es mi primer script en PHP n";

//Esto es un comentario

echo $myvar;

?> </body> </html>

Una vez escrito esto lo salvamos en un fichero con la extensión php, y lo colocamos en nuestro servidor, http://mi_servidor/php/test.php . Ahora si ponemos esta URL en nuestro navegador veremos una línea con el texto "Hola. Este es mi primer script en PHP" .

Lo primero que apreciamos en el script son sus delimitadores. En la primera línea del script vemos <?php que nos indica que comienza un script en PHP, y en la última colocamos ?> para indicar el final del script. Hay que destacar que todas las líneas que se encuentre entre estos delimitadores

Centro de Cómputo INFOUNI – REVALORA Perú

Page 66: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 66

deben acabar en punto y coma , excepto las sentencias de control (if, swicht, while, etc.).

Como en toda programación, es importante poner muchos comentarios, para lo cual si queremos comentar una sola línea tenemos que poner al principio de la línea // , si lo que queremos es comentar varias utilizaremos los delimitadores /* - */ .

Para que el servidor envié texto utilizaremos la instrucción echo , aunque también podemos utilizar printf de uso similar al del C o Perl .

Finalmente, vemos que la palabra myvar comienza con el signo dólar ( $ ) . Este símbolo le indica a PHP que es una variable. Nosotros le hemos asignado un texto a esta variable, pero también pueden contener números o tablas (arrays). Es importante recordar que todas las variables comienza con el signo dólar . También habréis observado que el texto que le asignamos a la variable termina con n , esto no se imprime sirve para indicarle al navegador una nueva línea.

5.1.6 Operadores en PHP

Al desarrollar cualquier programa empleamos normalmente operadores que nos sirven para realizar diversas operaciones que le otorgan un cierto grado de complejidad a nuestros programas, ya que, de otro modo el programa realizaría siempre lo mismo y por tanto no seria un programa útil.

Operadores aritméticos

+ Suma dos valores

- Resta dos valores (o pasa a negativo un valor)

* Multiplica dos valores

/ Divide dos valores

% Resto de dividir dos valores

++ Incremento en una unidad

-- Decremento en una unidad

Operadores de asignación

= Asigna a la parte derecha el valor izquierdo

+= Realiza la suma de la derecha con la izquierda y la asigna a la derecha

Centro de Cómputo INFOUNI – REVALORA Perú

Page 67: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 67

-= Realiza la resta de la derecha con la izquierda y la asigna a la derecha

*= Realiza la multiplicación de la derecha con la izquierda y la asigna a la derecha

/= Realiza la división de la derecha con la izquierda y la asigna a la derecha

%= Se obtiene el resto y se asigna

.= Concatena el valor de la izquierda con la derecha y lo asigna a la derecha

Operadores lógicos

! Operador NO o negacion.Si era true pasa a false y viceversa

and Operador Y, si ambos son verdaderos vale verdadero

or Operador O, vale verdadero si alguno de los dos es verdadero

xor Verdadero si alguno de los dos es true pero nunca ambos

&& True si ambos lo son

|| True si alguno lo es

Operadores condicionales

== Comprueba si dos números son iguales

!= Comprueba si dos números son distintos

> Mayor que, devuelve true en caso afirmativo

< Menor que, devuelve true en caso afirmativo

>= Mayor o igual

<= Menor o igual

5.1.7 Estructuras de Control

A partir de ahora vamos a dotar de mas "dinamismo" a nuestros scripts ya que a partir de diversas estructuras indicaremos que acción debe realizar en cada caso, además también nos dará la

Centro de Cómputo INFOUNI – REVALORA Perú

Page 68: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 68

posibilidad de realizar una misma acción multitud de veces con tan solo una línea de código.

Estructura IF

IF es una estructura de control utilizada para tomar decisiones según se cumpla una condición (o varias) o no. Su estructura básica es la siguiente:

if(condición/es){ acción a realizar;

} else{ acción a realizar en caso de que no se cumpla;

}

Veamos un ejemplo básico para entenderlo mejor:

if($edad>=18){ Comprar cerveza;

} else{ echo "No puedes comprar cerveza porque no tienes 18 años";

}

e incluso podemos realizar condicionales mas completas como el siguiente caso:

if(($edad>=18)&&($dinero>0)){ Puedes comprar cerveza porque tienes 18 y tu dinero es mayor que 0;

} else{ echo "O no tienes pelas o no tienes los 18" ;

}

Estructura SWITCH

Toma distintas decisiones en función de distintos estados de la variable.Su sintaxis es la siguiente:

switch(expresión){ case valor1:

sentencia a ejecutar cuando la expresión tiene como valor valor1

break case valor2:

sentencia a ejecutar cuando la expresión tiene como valor valor2

break

Centro de Cómputo INFOUNI – REVALORA Perú

Page 69: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 69

case valor3:

sentencia a ejecutar cuando la expresión tiene como valor valor3

break default: sentencia que se ejecutar por defecto cuando no se cumpla ninguna de las condiciones anteriores

Bucle FOR

El bucle for se usa para repetir una misma operación un número determinado de veces. Su sintaxis es la siguiente:

for(inicialización;condición;actualización){ sentencia a ejecutar mientras se cumpla la condición

}

El bucle for esta compuesto de 3 partes:

- Inicialización: Se ejecuta tan solo al iniciar por primera vez el bucle.En esta parte se suele colocar la variable que contara el numero de veces que se repite el bucle. - Condición: Es la condición que se evaluara cada vez que se inicie el bucle.Esta condición es la que determina la duración del bucle. - Actualización: Sirve para indicar los cambios que queremos ejecutar en las variables cada vez que se ejecuta el bucle.

Un ejemplo de su uso seria el siguiente:

for($i=1;i<=10;i++){ echo "El número actual es".$i;

}

De esta forma escribiría todos los números contenidos entre 0 y 10.

Bucles WHILE y DO WHILE

Bucle WHILE

Este bucle se usa cuando queremos repetir la ejecución de unas sentencias un número indefinido de veces. Su sintaxis es la siguiente:

while(condición){ sentencia a ejecutar

}

Para entender mejor el uso de while nos serviremos del siguiente ejemplo:

while($color != "rojo"){

color= dame un color;

Centro de Cómputo INFOUNI – REVALORA Perú

Page 70: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 70

}

Este es un ejemplo de lo que se puede hacer con while. En este caso siempre y cuando el color no sea rojo nos dirá que introduzcamos un color.

Bucle DO...WHILE

Este bucle se usa cuando no sabemos el número de veces que va a ejecutarse un bucle pero lo que si tenemos claro es que por lo menos una vez si que se ejecutara la accion.Su sintaxis es la siguiente:

do{ sentencia del bucle

}while(condicion)

BREAK y CONTINUE

BREAK

Se usa para detener el bucle y dejar de interpretar el código que sigue después de el break

CONTINUE

Sirve para volver al principio del bucle desde cualquier parte del bucle.

5.1.8 Funciones en PHP

Una de las herramientas mas importantes en cualquier lenguaje de programación son las funciones. Una función consiste en un conjunto de rutinas y acciones que a lo largo del script van a ser ejecutadas multitud de veces agrupados en una FUNCION y desde cualquier punto del script puede ser llamada y ejecutada. A su vez, esta función puede recibir parámetros externos de los cuales dependa el resultado de una función.

Las funciones deben ser colocadas siempre antes de realizar la llamada a la función (como es lógico). La sintaxis de una función es la siguiente:

function nombre(parámetros){

instrucciones de la función

} para llamar a la función sería de la siguiente forma: nombre(parámetros)

Un ejemplo para entender el uso de funciones es el siguiente: Crearemos una función que realice la suma de dos números y muestre el resultado

function sumar($sumando1,$sumando2){

$suma=$sumando1+$sumando2

echo $sumando1."+".$sumando2."=".$suma;

}

Centro de Cómputo INFOUNI – REVALORA Perú

Page 71: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 71

sumar(5,6)

Un hecho relevante que cabe destacar es que las variables que declaremos dentro de la función solo existirán o tendrán dicho valor dentro de la función.

Existen casos en los cuales no sabemos el número de parámetros que le pasaremos a la función y en estos casos debemos usar las funciones creadas al efecto como son:

func_num_args() Numero de parámetros que se le han pasado a la funciónfunc_get_args() Devuelve un elemento de los que forman la lista de argumentos

5.1.9 Inclusión de código desde un fichero

En ocasiones es necesario cargar el mismo archivo en diferentes scripts y de esa forma no repetir el mismo código en diversos scripts. Parece entonces razonable que debe existir algún método o forma de cargar algún archivo externo y de esa forma generar páginas web mas dinámicas.

A este efecto PHP dispone de dos instrucciones para poder cargar archivos:

require("archivo"); Cuando se incluye un archivo con require el interprete abandona el modo PHP y entra en modo HTML, una vez abierto el fichero lo incluye hasta su ultima línea y posteriormente abandona el modo HTML para volver a posicionarse en el modo PHP. Su principal diferencia con include() es que no permite la carga condicional.

include("archivo"); Cuando se incluye un archivo con require el interprete abandona el modo PHP y entra en modo HTML, una vez abierto el fichero lo incluye hasta su ultima línea y posteriormente abandona el modo HTML para volver a posicionarse en el modo PHP. Permite la carga condicional, es decir, que podemos cargar un archivo o otro según si se cumple o no una condición.

5.1.9 Matrices (array)

En la realización de un script en PHP en múltiples ocasiones existen variables que tienen información similar y se procesan de forma semejante. Para ello PHP (y otros lenguajes) poseen un elemento denominado array. Un array es un conjunto de variables agrupadas bajo un único nombre. Cada variable dentro de la matriz se denomina elemento. Dentro de la misma matriz pueden existir variables de diferentes tipos y no es necesario que sean todas del mismo tipo.

Hay que diferenciar entre los dos tipos de matrices existentes: - Indexada: Aquella cuyo acceso a los elementos se realiza por la posición que ocupan dentro de la estructura (se inician siempre desde la posición 0). Ejemplo: $amigos[0] - Asociativa: Es aquella en la que los elementos están formados por pares clave-valor y el acceso se realiza proporcionando una determinada clave. Ejemplo: $amigos['edad']

Para crear matrices en PHP existen dos formas:

- De forma implícita, que consistiría en indicarle el elemento(ya sea proporcionando su posición o su clave).Ejemplo: $nombres[0]='Javier';

En caso de no indicarle una posición el array tomara el valor siguiente al ultimo valor

Centro de Cómputo INFOUNI – REVALORA Perú

Page 72: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 72

introducido.Ejemplo: $nombres[]='Lucas' // tomaría como valor 1 ya que lo ultimo introducido era 0.

- Mediante array() en el cual le pasamos los elementos como parámetros. En caso de matriz indexada toman la posición que ocupan en la creación de la matriz, mientras que los de la matriz asociativa se les asigna su valor mediante "=>".Ejemplo: $amigo=array('Nombre'=>'Jose','Direccion'=>'Neopatria 21');

Cabe destacar que PHP no solo se limita a la existencia de matrices por sí solo sino que existen matrices de matrices, o lo que es lo mismo, matrices multidimensionales. Ejemplo: $amigos[2]['Pedro']

Recorrido de una matriz

Disponemos de diversas herramientas para poder acceder a los elementos de una matriz. En cada momento se mantiene una referencia del elemento de la matriz al que se tiene acceso, por tanto, para recorrer una matriz bastará con modificar dicha referencia. En caso de una matriz indexada el recorrido se realizara mediante un bucle y para ello debemos saber el número de elementos totales que posee la matriz. Para ello nos basamos de la función count(variable) donde variable representa la variable de la que se quiere obtener el número de elementos. Si variable es una matriz devuelve el número de elementos que tiene, devuelve 1 si solo tiene un elemento (aunque no sea matriz) y 0 si no tiene ningún valor.

Otra función que nos permite saber el número de elementos es sizeof(matriz) . Para acceder a los elementos de una matriz asociativa debemos usar la función ecah() que recupera el par formado por clave y valor y además avanza una posición de puntero. Su sintaxis es each(matriz) y los valores que devuelve la matriz asociativa son los siguientes:

Clave Significado

0 Nombre de la clave

1 Valor asociativo de la clave

key Nombre de la clave

value Valor asociado a la clave

La función que realiza el constructor list(variable1,variable2...variableN) es asignar los valores del elemento actual de una matriz a las variables indicadas como parámetro.

Navegación sobre matrices

Cuando se trata de matrices indexadas la navegación es sencilla ya que tan solo basta acceder al elemento que queremos mostrar, pero al tratarse de alguna matriz asociativa no se puede aplicar el mismo tratamiento. Para ello existen un conjunto de funciones prefabricadas que nos permiten realizar multitud de acciones:

Centro de Cómputo INFOUNI – REVALORA Perú

Page 73: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 73

Sintaxis Acción

reset(matriz); El puntero interno vuelve a la primera posición

end(matriz); El puntero interno va a la ultima posición

next(matriz); El puntero va al elemento siguiente

prev(matriz); Accede al elemento anterior

current(matriz); Devuelve el contenido del elemento actual

Inserción de elementos

Para la inserción de elementos dentro de un array existen una serie de funciones que nos permiten añadir elementos. Entre ellas destacamos:

array_push(matriz,variable1,variableN); Añade elementos al final de la función y su longitud se incrementara tantos elementos como se hayan añadido

array_unshift(matriz,variable1,variableN); Añade elementos al principio de la función desplazando a los otros tantas posiciones como elementos haya.

array_pad(matriz,nuevo_tamaño,valor_relleno); Aumenta el tamaño de la matriz empleando un valor proporcionado como relleno.

Eliminación de elementos

array_shift(matriz); Elimina el primer elemento de la matriz

array_pop(matriz); Elimina el último elemento de la matriz

array_splice(entrada,pos_ini,[tamaño],[sustitutos]); Se usa para reemplazar o borrar el contenido de una porción de matriz, para ello debemos especificar la posición desde la cual queremos iniciar el borrado o sustitución, el tamaño o número de elementos que se verán afectados y los sustitutos (en caso que deseemos sustituirlo por algún elemento).

array_keys(matriz,[valor buscado]);

Se emplea cuando deseamos eliminar un elemento cuya posición desconocemos.

array_values(matriz); Devuelve una matriz indexada con todos los valores almacenados en la matriz pasada como parámetro.

Manipulación masiva de matrices

Centro de Cómputo INFOUNI – REVALORA Perú

Page 74: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 74

array_walk(matriz,nombre_de_la_funcion,lista_parametros); Se emplea para realizar el mismo proceso definido en la función en todos los elementos incluidos.

Obtención de submatrices

array_slice(matriz,posicion,tamaño); Permite extraer una secuencia de elementos de una matriz. Los parámetros a pasarle son la matriz en la cual queremos extraer dichos elementos, la posición desde la que se inicia la extracción y el tamaño de la extracción (posiciones que abarcamos a partir de la inicial).

Ordenación de matrices

Criterio Función

Orden ascendente(matriz indexada) sort(matriz)

Orden descendente(matriz indexada) rsort(matriz)

Orden ascendente por valor(matriz asociativa) asort(matriz)

Orden descendente por valor(matriz asociativa) arsort(matriz)

Orden ascendente por clave(matriz asociativa) ksort(matriz)

Orden descendente por clave(matriz asociativa) krsort(matriz)

5.1.10 Otras funciones

En este apartado se comentaran una serie de funciones (no todas porque seria imposible) que nos pueden servir en cierto momento.

compact() Devuelve una matriz asociativa a partir de un numero indeterminado de parámetrosextract() Crea variables desde matriz asociativa array_unique() Devuelve matriz sin datos repetidos ya que algunos se eliminan array_reverse() Devuelve matriz con mismos elementos pero en orden inverso shuffle() Modifica el orden de elementos de forma aleatoria array_count_values() Devuelve una matriz asociativa que contiene frecuencias de repetición de los valores de la matriz in_array() Permite comprobar si un valor esta en la matriz array_merge() Combina elementos de dos matrices en 1.

5.1.11 Cadenas de Caracteres

En este capítulo se comentaran todos los pormenores relacionados con cadenas de caracteres, las funciones existentes, etc.

Cadenas de caracteres

Una cadena consiste en una secuencia de caracteres que se encuentran comprendidos entre unos

Centro de Cómputo INFOUNI – REVALORA Perú

Page 75: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 75

delimitadores que pueden ser:

-Comillas simples ' '

-Comillas dobles " "

-Documento incrustado <<< >>>

En caso de que se desee por ejemplo unas " " dentro de las comillas de la cadena de caracter es necesario realizar la acción que se denomina escapar un caracter que consiste en precederlo de una es decir ". Los caracteres especiales que pueden aparecer dentro de un documento con delimitación son:

Secuencia Significado

n Nueva línea

r Retorno de carro

t Tabulación horizontal

Barra invertida

$ Signo de dólar

" Comillas dobles

[0-7]{1,3} Caracter ASCII que coincide con el numero octal

x[0-9A-Fa-f]{1,2} Caracter ASCII que coincide con el numero hexadecimal

El caso de documento incrustado es diferente al de ambas comillas. Su sintaxis es la siguiente:

<<<Identificador Cadena de caracteres

Identificador;

El resultado obtenido con documento incrustado es el texto mostrado igual que se ha introducido.

La función chr(valor) nos devuelve en una variable del tipo cadena el caracter de la tabla de códigos ASCII asociado a un valor que recibe como parámetro, el valor que se pase debe estar entre 0 y 255.

La función ord(cadena) nos devuelve un número entero que se corresponde con el código ASCII del primer caracter que recibe como parámetro.

Visualización de cadenas

- Echo: Es el modo de visualización mas empleado. Su sintaxis es la siguiente: echo "texto"; - Print: Es la mas sencilla de todas y se encarga de mostrar una cadena de caracteres sobre su salida estándar. No soporta ningún formato de salida y su sintaxis es: print(cadena);

Centro de Cómputo INFOUNI – REVALORA Perú

Page 76: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 76

- Printf(formato,[valores]); Su funcionamiento es el mismo que en el caso anterior. La única diferencia es que este soporta formatos de salida como su alineación (por defecto a la izquierda), valor numérico ( numero mínimo de caracteres que deben mostrarse), numero de decimales y tipo de datos cuyas posibilidades son:

Símbolo Significado

% Representa el símbolo del porcentaje

b El argumento se trata como nº entero y se representa en codificación binaria.

c El argumento se trata como nº entero y se muestra el caracter cuyo código ASCII se corresponde con el valor.

d El argumento se trata como nº entero y se representa en codificación decimal sin parte fraccionaria

f El argumento se trata como un nº de tipo double y se representa como un decimal sin coma flotante

o El argumento se trata como un nº entero y se representa en codificación octal

s El argumento se trata y representa como una cadena de caracteres

x El argumento se considera un nº entero y se representa en codificación hexadecimal en minúsculas

X El argumento se considera un nº entero y se representa en codificación hexadecimal en mayúsculas

- Sprintf(formato,[valores]); su funcionamiento es idéntico a printf. Lo único que la cadena resultante de aplicarle un determinado formato se guarda en una variable.

Alteración del contenido

En ocasiones es necesario emplear dichas funciones para alterar el formato de salida de las cadenas. Las funciones empleadas para modificar dicho formato son:

- chop(cadena); Devuelve la cadena de caracteres con los caracteres de blanco y nueva línea eliminados - ltrim(cadena); Elimina los blancos que aparecen a la derecha de una cadena de caracteres - rtrim(cadena) ; Elimina los blancos que aparecen por la derecha en una cadena de caracteres - trim(cadena); Elimina los blancos que aparecen a izquierda y derecha de la cadena de caracteres - str_pad(cadena,longitud,relleno,lugar); Comprueba si la longitud es menor que el valor indicado, si es así añade los caracteres necesarios.El lugar de añadir puede ser:

str_pad_left añade por la derecha(opción por defecto), str_pad_right añade por la izquierda y

Centro de Cómputo INFOUNI – REVALORA Perú

Page 77: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 77

str_pad_both añade por ambos extremos.

- str_repeat(caracter,numero_veces); Repite un caracter el numero de veces indicado .

- strtolower(cadena); Pasa toda la cadena a letras minúsculas.

- strtoupper(cadena); Pasa toda la cadena a letras mayúsculas.

- ucfirst(cadena); Pasa a mayúscula el primer caracter de una cadena.

- ucwords(cadena); Pone en mayúsculas el primer caracter de cada palabra de la cadena.

- str_replace(subcadena1,subcadena2,cadena); Sustituye una palabra por otra dentro de una cadena.

- strtr(cadena,originales,traducidos); Traduce ciertos caracteres .Ejemplo:

$persona=strt($persona,"áéíóú","a,e,i,o,u"); de esta forma cambiaría todas las vocales con acento por vocales sin acento.

- substr_replace(cadena,nueva,comienzo,longitud); Sustituye una porción del contenido de una cadena

Acceso al contenido

- strlen(cadena); Indica el nº de caracteres de una cadena - count_chars(cadena,modo); Numero de repeticiones de un caracter en una cadena. Los modos posibles son:

0->Matriz indexada con frecuencia de aparición de todos los caracteres del código ASCII 1->Matriz con caracteres ASCII con frecuencia mayor que 0 2->Matriz con caracteres que no aparecen en la cadena 3->Cadena con caracteres usados en el código ASCII 4->Cadena con caracteres no usados en el código ASCII

- substr_count(cadena,subcadena); Frecuencia de aparición de una cadena -strchr(cadena,caracter); Devuelve la subcadena que comienza en la primera aparición del caracter indicado - strstr(cadena,subcadena); Localiza subcadena dentro de la cadena original - stristr(cadena,subcadena); Igual que la función anterior pero sin distinción entre mayúsculas y minúsculas- strpos(cadena,subcadena); Primera ocurrencia de una cadena en otra - strrpos(cadena,subcadena); Ultima ocurrencia de una cadena en otra - ord(cadena); Devuelve el valor ASCII de un caracter - substr(cadena,comienzo,longitud); Porción de texto que empieza en una posición y tiene una longitud - strcmp(cadena1,cadena2); Compara dos cadenas siendo sensible a mayúsculas y minúsculas- strcasecmp(cadena1,cadena2); Compara dos cadenas sin ser sensible a mayúsculas y minúsculas- strncmp(cadena1,cadena2,tamaño); Compara los N primeros caracteres de una cadena - strnatcmp(cadena1,cadena2); Sensible a mayúsculas y minúsculas. Compara dos cadenas. - strnatcasecmp(cadena1,cadena2); No sensible a mayúsculas y minúsculas. Compara dos cadenas.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 78: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 78

- chunk_split(cadena,longitud,separador); Coge una cadena de caracteres e introduce separadores a una distancia determinada. No modifica el original sino que es una función nueva. - explode(separador,cadena,limite); Permite obtener una matriz de cadenas de caracteres extraídas del original. - implode(separador,elementos); Junta en una cadena los elementos de una matriz usando como concatenación el separador pasado como parámetro.- parse_str(cadena); Permite extraer y crear variables que forman parte de una cadena que se corresponde con un "query string" recibido de una URL.

*Apoyo a HTML

- addcslashes(cadena,lista); Devuelve una cadena que tiene escapados todos los caracteres como parámetro. - addslashes(cadena); Devuelve una cadena que tiene escapados todos los caracteres lógicos- stripcslashes(); y stripslashes(); Reciben cadenas que pueden contener caracteres de de escapes y los desescapan - quotemeta(cadena); Esacapa los caracteres especiales.

- htmlspecialchars(cadena); Lleva a cabo conversiones como &->&amp,"->&quot.

- htmlentities(); Convierte todos los caracteres a entidades html. á pasa a ser &aacute;.

- get_html_translation_table(htmlentities o html_specialchars); Obtiene la relación de traducción de cada caracter especial.

- array_flip(); Intercambia las claves por los valores en array asociativo.

- get_meta_tags(nombre_fichero,include_path); Devuelve todos los meta tags que contiene un HTML. - strip_tags(cadena,mostrar_tags); Omite etiquetas PHP y HTML , lo de mostrar_tags son las cadenas HTML y PHP no deben ser omitidas en la lectura.

- n12br(cadena); Permite sustituir saltos de línea por <br>.

- parse_url(cadena_url); Devuelve una matriz asociativa con los siguientes campos:

Campo Significado

scheme Http

host Ip o DNS

port puerto

user nombre usuario

password contraseña

Centro de Cómputo INFOUNI – REVALORA Perú

Page 79: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 79

path path completo al recurso

query query string con datos al recurso

urldecode decodifica la información

urlencode Codifica la información

5.1.12 Clases

Las Clases son máximo exponente de la Programación Orientada a Objetos (POO). PHP no es un lenguaje orientado a objeto, pero implementa las características que permiten definir las clases.

Pero, ¿qué son las Clases y para que sirven?. Empecemos por los segundo, sirven hacer el código más legible, y lo que es más importante, reutilizable. Escribir una Clase es sin duda más largo que escribir el código directamente, pero a la larga es más rentable por su portabilidad a otras aplicaciones y su mantenimiento.

Las Clases no son más que una serie de variables y funciones que describen y actúan sobre algo. Por ejemplo, vamos a crear la clase automóvil , la cual tendrá diversas variables, $color , $modelo , $marca , $potencia , $matricula y habrá una serie de funciones que actuarán sobre la clase automóvil como Precio() , Acelerar() , Frenar() , Girar() y Reparar() .

Como ejemplo vamos a crear la clase mysql , que nos servirá para realizar consultas a las bases de datos MySQL.

<?php

class DB_mysql {

/* variables de conexión */

var $BaseDatos;

var $Servidor;

var $Usuario;

var $Clave;

/* identificador de conexión y consulta */

var $Conexion_ID = 0;

var $Consulta_ID = 0;

/* número de error y texto error */

var $Errno = 0;

var $Error = "";

/* Método Constructor: Cada vez que creemos una variable

de esta clase, se ejecutará esta función */

Centro de Cómputo INFOUNI – REVALORA Perú

Page 80: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 80

function DB_mysql($bd = "", $host = "localhost", $user = "nobody", $pass = "") {

$this->BaseDatos = $bd;

$this->Servidor = $host;

$this->Usuario = $user;

$this->Clave = $pass;

}

/*Conexión a la base de datos*/

function conectar($bd, $host, $user, $pass){

if ($bd != "") $this->BaseDatos = $bd;

if ($host != "") $this->Servidor = $host;

if ($user != "") $this->Usuario = $user;

if ($pass != "") $this->Clave = $pass;

// Conectamos al servidor

$this->Conexion_ID = mysql_connect($this->Servidor, $this->Usuario, $this->Clave);

if (!$this->Conexion_ID) {

$this->Error = "Ha fallado la conexión.";

return 0;

}

//seleccionamos la base de datos

if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) {

$this->Error = "Imposible abrir ".$this->BaseDatos ;

return 0;

}

/* Si hemos tenido éxito conectando devuelve

el identificador de la conexión, sino devuelve 0 */

return $this->Conexion_ID;

}

/* Ejecuta un consulta */

function consulta($sql = ""){

if ($sql == "") {

$this->Error = "No ha especificado una consulta SQL";

return 0;

}

Centro de Cómputo INFOUNI – REVALORA Perú

Page 81: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 81

//ejecutamos la consulta

$this->Consulta_ID = @mysql_query($sql, $this->Conexion_ID);

if (!$this->Consulta_ID) {

$this->Errno = mysql_errno();

$this->Error = mysql_error();

}

/* Si hemos tenido éxito en la consulta devuelve

el identificador de la conexión, sino devuelve 0 */

return $this->Consulta_ID;

}

/* Devuelve el número de campos de una consulta */

function numcampos() {

return mysql_num_fields($this->Consulta_ID);

}

/* Devuelve el número de registros de una consulta */

function numregistros(){

return mysql_num_rows($this->Consulta_ID);

}

/* Devuelve el nombre de un campo de una consulta */

function nombrecampo($numcampo) {

return mysql_field_name($this->Consulta_ID, $numcampo);

}

/* Muestra los datos de una consulta */

function verconsulta() {

echo "<table border=1>n";

// mostramos los nombres de los campos

for ($i = 0; $i < $this->numcampos(); $i++){

echo "<td><b>".$this->nombrecampo($i)."</b></td>n";

}

echo "</tr>n";

// mostrarmos los registros

while ($row = mysql_fetch_row($this->Consulta_ID)) {

echo "<tr> n";

Centro de Cómputo INFOUNI – REVALORA Perú

Page 82: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 82

for ($i = 0; $i < $this->numcampos(); $i++){

echo "<td>".$row[$i]."</td>n";

}

echo "</tr>n";

}

}

} //fin de la Clse DB_mysql

?>

Como habreis observado, para crear una clase utilizamos la sentencia class , y además hemos creado una función con el mismo nombre que la clase, a esa función se le llama constructor y se ejecutará cada vez que definamos una variable de esa clase. No es obligatorina variable de esa clase. No es obligatorio crear un constructor en una definición de clase.

Otra cosa importante en las clases es el operador -> , con el que indicamos una variable o método (parte derecha del operador) de una clase (parte izquierda del operador). Para hacer referencia a la clase que estamos creando dentro de su definición, debemos utilizar this .

Y ahora veamos un ejemplo de la clase que hemos creado, y supongamos que el código anterior lo hemos guardado en un fichero llamado clase_mysql.inc.php .

<body>

<html>

<?php

require ("clase_mysql.inc.php");

$miconexion = new DB_mysql ;

$miconexion->conectar("mydb", "localhost", "nobody", "");

$miconexion->consulta("SELECT * FROM agenda");

$miconexion->verconsulta();

?>

</body>

</html>

5.1.13 Fechas

En este capítulo se estudiarán las funciones existentes en PHP para el empleo de fechas. Este tipo de funciones existen en la mayoría de lenguajes de programación y van orientadas a su obtención y representación en diferentes formatos.

El tiempo en cualquier lenguaje de programación se suele tomar con respecto al inicio de la "era UNIX" que es el 1 de enero de 1970 a las 00:00:00. La función más sencilla que se basa en esta

Centro de Cómputo INFOUNI – REVALORA Perú

Page 83: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 83

marca de tiempo es la función time() cuyo valor devuelto es el numero entero que representa la marca de tiempo correspondiente al instante en que se ejecutó la función con respecto a la era Unix.

En algunas aplicaciones es necesario poseer una marca de tiempo mas detallada y por ello usamos microtime() que devuelve una cadena de caracteres con los segundos y microsegundos.

En caso de que quisiéremos tener como valor de referencia la hora del ordenador desde el cual se ejecuta emplearíamos la función gettimeofday() en la cual pasaríamos como parámetro interno , sec (para saber los segundos), usec (microsegundos), minuteswest (nº segundos al oeste de greenwich) y dstime (tipo de corrección en horarios de verano e invierno).

Estas funciones citadas anteriormente son poco utilizadas ya que la existencia de otras funciones más completas, como por ejemplo la función getdate() que obtiene una matriz asociativa con la información de la fecha y hora del sistema. Los elementos de dicha matriz son:

Clave Contenido

seconds Numero de segundos de la hora actual

minutes Numero de minutos de la hora actual

hours Numero de horas de la hora actual

mday Día correspondiente del mes

wday Día de la semana en valor numérico(empezando por 0)

mon Mes del año en valor numerico.Del 1 al 12.

year Valor numérico del año

yday Día del año en valor numérico

weekday Cadena de caracteres que contiene el día de la semana(en ingles)

month Cadena de caracteres que contiene el mes del año(en ingles)

0 Marca de tiempo obtenida por la función getdate()

Si no le pasamos ningún parámetro a la función entonces se considera la hora actual del sistema y si se recibe como parámetro un numero entero entonces lo convierte a la fecha correspondiente.

Otra función para obtener la hora es la función localtime(marca_tiempo,tipo_matriz); cuyos valores pasamos a comentar a continuación:

Centro de Cómputo INFOUNI – REVALORA Perú

Page 84: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 84

Índice Clave Contenido

0 tm_sec Numero de segundos de la fecha indicada

1 tm_min Numero de minutos de la fecha indicada

2 tm_hour Numero de horas de la fecha indicada

3 tm_mday Día correspondiente del mes

4 tm_wday Día de la semana en valor numérico(empezando por 0)

5 tm_mon Mes del año en valor numerico.Del 0 al 11.

6 tm_year Valor numérico del año.(se ve afectado por el efecto 2000)

7 tm_yday Día del año en valor numérico

8 tm_isdst Indica si esta activado el efecto del cambio de hora.

Formatos de fechas

Las funciones vistas anteriormente nos permitían convertir el valor entero de la fecha en un valor mas fácilmente entendible, aunque para poder acceder a dicha información hay que pasar por el paso previo de obtener una matriz. Para evitar ese paso intermedio, PHP pone a tu disposición la funcióndate(formato,marca_tiempo);

Esta función nos devuelve una cadena de caracteres que se corresponde con una fecha a la que se ha aplicado un determinado formato. Para definir el formato de la fecha se dispone de las siguientes opciones:

Opción Descripción

a Hace que en la hora aparezca la cadena am o pm

A Hace que en la hora aparezca la cadena AM o PM

d Día del mes con dos dígitos desde 01 a 31

D Día de la semana como cadena de tres letras(en ingles).Ejemplo: "Mon"

F Nombre del mes completo como una cadena de caracteres.Ejemplo: "March"

h Hace que la hora aparezca en formato 01 a 12

H Hace que la hora aparezca en formato 00 a 23

Centro de Cómputo INFOUNI – REVALORA Perú

Page 85: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 85

g Hace que la hora aparezca en formato 1 a 12

G Hace que la hora aparezca en formato 0 a 23

i Hace que los minutos aparezcan en formato 00 a 59

j Hace que el día aparezca en formato 1 a 31

l(L min) Día de la semana completo.Ejemplo: Monday

L Escribe 0 si no es año bisiesto y 1 si lo es

m Hace que el mes aparezca en formato 01 a 12

M Hace que el mes aparezca en formato 1 a 12

s Hace que los segundos aparezcan en formato 00 a 59

S Cadena de caracteres con el sufijo ordinal.Ejemplo: "th","nd".

t Número de días del mes especificado de 28 a 31

U Número de segundos desde el comienzo de la "era UNIX"

w Número del día de la semana de 0 a 6

Y Año con cuatro cifras

y Año con dos cifras

z Día del año de 0 a 365

Z Obtiene la diferencia horaria en segundos con respecto al GMT

La función strftime() representa otra posibilidad para aplicar formatos a una fecha. Esta función utiliza las convenciones locales de la máquina desde la que se ejecuta el script para devolver una cadena con el formato definido en el idioma seleccionado. Su formato queda definido por los siguientes valores:

Opción Descripción

%a Nombre del día de la semana abreviado en el idioma actual

%A Nombre del día de la semana completo en el idioma actual

Centro de Cómputo INFOUNI – REVALORA Perú

Page 86: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 86

%b Nombre del mes abreviado en el idioma actual

%B Nombre del mes completo en el idioma actual

%c Representación de fecha y hora en el idioma actual

%d Día del mes en formato 01 a 31

%H Hora como numero de 01 a 12

%I Hora como numero de 01 a 12

%j Día del año como numero de 001 a 366

%m Mes como numero de 01 a 12

%M Minuto en numero

%p am o pm según la hora dada

%S Segundos en numero

%U Numero de la semana del año como el primer domingo como primer día de la semana

%W Numero de la semana del año como el primer lunes como primer día de la semana

%w Día de la semana en numero de 0 a 6

%x Representación por defecto de la fecha sin hora

%X Representación por defecto de la hora sin fecha

%y Año en numero de 00 a 99

%Y Año en numero de cuatro cifras

%Z Nombre o abreviatura de la zona horaria

%% Caracter %

Estableciendo horas y fechas

Una vez conocida la forma de obtener la fecha actual, es necesario disponer de una forma de

Centro de Cómputo INFOUNI – REVALORA Perú

Page 87: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 87

poder fijar una determinada hora para establecer por ejemplo la fecha de caducidad de una cookie, es decir, la forma de obtener una marca de tiempo correspondiente a una determinada hora.

Para ello PHP dispone de dos funciones que son mktime() y gmmktime() cuyo funcionamiento explicaremos a continuación:

La función mktime(hora,minuto,segundo,mes,dia,año,[ajuste->0 horario de verano y 1 invierno]); nos devuelve un valor entero que representa la marca de tiempo UNIX de una determinada fecha. Cada uno de los valores mencionados puede omitirse siempre y cuando a partir del valor omitido no se representen mas valores a su derecha.

La función gmmktime() funciona de la misma forma lo que considera que los parámetros representan una hora GMT.

La función setlocale(categoria,pais); nos permite establecer el idioma en los que aparecerán la fecha,hora,etc. Las categorías posibles son:

Opción Descripción

LC_TYPE Conversión de cadenas a configuración regional

LC_NUMERIC Separadores numéricos

LC_TIME Para aplicar formatos de fecha y hora con strftime()

LC_ALL Todos los anteriores

Validación de fechas

Existen numerosas ocasiones en las que es necesario la creación de un sistema para comprobar si la fecha introducida por el usuario es valida o no. Para ello PHP nos brinda dos funciones capaces de realizar dicha comprobación:

- checkdate(mes,dia,año); Comprueba que la fecha introducida sea correcta .- strtotime(cadena_fecha); Comprueba que la cadena de fecha sea correcta. Para ello la fecha debe estar en formato ingles, es decir, mm/dd/aa

5.1.14 Entrada y Salida

Las operaciones de entrada/salida en PHP tienen una gran importancia en cualquier lenguaje de programación ya que no tiene sentido que un lenguaje de programación no pueda escribir, leer, actualizar datos de una base de datos, etc. En este capítulo nos centraremos básicamente en las operaciones de entrada y salida con archivos y posteriormente explicaremos las operaciones con bases de datos.

Supongamos que deseamos hacer una tienda de compra online. Imaginemos el gran esfuerzo que supondría tener que modificar todas las paginas HTML de aquellos productos en los cuales en la

Centro de Cómputo INFOUNI – REVALORA Perú

Page 88: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 88

temporada de oferta su precio se viera afectado. La solución más primitiva para el almacenamiento de datos es un fichero de texto, el contenido del fichero de texto puede ser cualquiera.

¿Cómo abrimos un fichero?

Para abrir un fichero PHP pone a disposición una función. Su sintaxis es la siguiente: fopen(fichero,modo); la ruta del fichero se indica en fichero, y modo determina los diferentes modos de lectura de un archivo:

Atributo Efecto

r Solo lectura

r+ Lectura y escritura

w Sólo escritura. Borra el contenido anterior

w+ Lectura y escritura. Borra el contenido anterior.

a Solo escritura. Conserva el contenido anterior.

a+ Lectura y escritura. Conserva el contenido anterior

La función fopen devuelve un manejador de fichero que es el que utilizaremos en las funciones relacionadas con la lectura y escritura de ficheros.

¿Cómo se recorre un fichero?

Para leer un fichero lógicamente la operación es muy sencilla. Consiste en ir leyendo todos los caracteres hasta llegar al EOF (end of file... final del archivo) el cual determina el final del texto.

Al igual que en las matrices los ficheros poseen un cursor interno que indica su posición actual con respecto a todo el texto.

Para comprobar si se ha llegado al final del archivo, PHP pone a nuestra disposición la función feof(manejador_fichero); que se encarga de comprobar si la posición actual del fichero es la marca del final.

La función mas genérica de lectura es fread(manejador_fichero,nº_bytes); que se encarga de leer un numero determinado de bytes del fichero y devolvérnoslo en una cadena de caracteres.

En cambio, si lo que pretendemos es leer el fichero caracter a caracter debemos usar la función fgetc(manejador_fichero); .

Otras de las funciones mas características son: fgets(fichero,nº bytes); que nos devuelve una cadena de caracteres con la información leída. fgetss(manejador_fichero,nº bytes,[mostrar_tags]); nos lee un fichero HTML omitiendo las etiquetas características del código, en mostrar tags debemos introducir las etiquetas que deseamos que se muestren.

Si al realizar la lectura lo que se pretenden leer los valores que siguen un determinado formato de entrada nos podemos ahorrar un gran trabajo usando la función fscanf(manejador_fichero,formato,variables); Esta función obtiene los datos de entrada de un

Centro de Cómputo INFOUNI – REVALORA Perú

Page 89: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 89

fichero siguiendo un formato determinado. Posteriormente dicha información debe ser tratada por el programador.

La ultima función que vamos a estudiar para abrir ficheros es la función file(nombre_fichero); con esta función no es necesario usar las funciones fopen() y fclose() ya que se ejecutan de forma implícita.

¿Cómo se cierra un fichero?

Cerrar es la ultima operación que se debe realizar al manipular un fichero y permite cerrar la referencia que se hace al fichero en el script ejecutado. Para poder cerrar un fichero usamos la función fclose(manejador_fichero);

Escritura en ficheros

Para escribir en un fichero básicamente debemos realizar tres operaciones: abrir el fichero en modo escritura, realizar la operación de escritura realizada, cerrar el fichero. Las funciones que empleamos para escribir en un fichero son fputs(manejador_fichero,cadena); y fwrite(manejador_fichero,cadena); que nos permiten añadir una cadena de caracteres al texto anterior contenido en el texto.

Acceso directo en ficheros

Existen un conjunto de funciones que nos permiten situarnos en una determinada posición del fichero para leer a partir de ahí.

La función fseek(manejador_fichero,posicion); Nos permite empezar a leer un fichero a partir de una posición según se determine: seek_set (se toma con el principio del fichero), seek_cur (posición actual), seek_end (posición final).

Existen dos funciones básicas que nos posicionan al principio del fichero -> rewind(manejador_fichero); o que nos devuelven el valor actual de la posición-> ftell(manejador_fichero);

Funciones variadas para el manejo de ficheros

fpassthru(manejador_fichero); Nos muestra el contenido referenciado por manejador de fichero. Devuelve el numero de bytes mostrados si no se produce ningún fallo. set_file_buffer(fichero,tamaño); Determina el tamaño del buffer de ese archivo que usara PHP.readfile(fichero); Lee un fichero y lo muestra por el método de salida estándar.

5.1.15 Operaciones con Ficheros

En el desarrollo y administración de sitios webs resulta bastante habitual tener que acceder a ficheros del servidor para manipularlos. Por esta razón en este capítulo vamos a describir las funciones creadas en PHP para realizar dichas operaciones.

Cambio, creación y borrado de directorios

chdir(ruta_al_directorio); Nos permite cambiar el directorio activo a la ruta establecida como parámetro.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 90: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 90

mkdir(ruta_al_directorio,permisos); Esta función crea un nuevo directorio en la ruta que hemos indicado, el segundo parámetro debe ser un numero octal y es por el que vienen determinados los permisos. rmdir(ruta_directorio); Borra el directorio pasado como parámetro.

Procesamiento de los elementos de un directorio

Supongamos que queremos realizar una operación determinada como una búsqueda, visualización, etc sobre todos los ficheros de un directorio. PHP nos proporciona una solución a este problema: el manejador de directorios (representa una conexión lógica con un directorio determinado que permite leer la lista con los nombres de los elementos contenidos en el directorio actual).

La función empleada para abrir un directorio es opendir(ruta); cuya función como ya se ha comentado es abrir el directorio de la ruta especificada. Una vez se ha ejecutado opendir() podemos realizar tres operaciones:

La función readdir(manejador); nos devuelve una cadena con el nombre del siguiente elemento del directorio, ya sea un subdirectorio o un fichero. La función rewinddir(manejador); procesa un directorio y sitúa el puntero interno en el primer directorio. La función closedir(manejador); finaliza el tratamiento de entradas de directorio.

La clase dir

PHP nos proporciona una pseudoclase predefinida para el manejo de ficheros. Esta clase no aporta ninguna funcionalidad que no hayamos visto hasta este punto pero recopila todas las funciones a partir de una sola. Para poder trabajar con un directorio primero hay que crear una instancia de clase dir por medio de su constructor. $directorio=dir(ruta_directorio);

Este objeto cuenta con 3 métodos y 2 propiedades (las propiedades sólo de consulta por lo que no pueden ser modificadas. Los métodos empleados son read(),rewind() y close()

Copiado,borrado y renombrado de ficheros

copy(fichero_origen,fichero_destino); Realiza una copia de un fichero.unlink(nombre_fichero); Elimina el fichero. rename(nombre_antiguo,nombre_nuevo); Renombra el fichero pasado como parámetro.

Atributos de ficheros y directorios

Los ficheros y directorios poseen una serie de características propias denominadas atributos. PHP pone a nuestra disposición un conjunto de funciones que nos permitirán obtener información sobre los archivos o carpetas.

La función file_exists(elemento); Comprueba que el elemento pasado como parámetro exista.

filesize(nombre_fichero); nos informa sobre el tamaño del fichero en bytes.

La función fileatime(fichero); nos informa sobre el ultimo acceso al fichero.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 91: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 91

La función filemtime(fichero); nos informa sobre la ultima modificación del fichero. La función filectime(fichero); nos informa sobre el último cambio al fichero. La función filetype(fichero); nos devuelve el tipo de elemento que estamos tratando. Los resultados posibles que puede devolver son:

Resultado Significado

block Dispositivo de bloques

char Caracteres

dir Directorio

fifo FIFO

file Fichero

link Enlace

unknown Desconocido

Chmod(elemento_directorio,permisos); recibe como parámetro el elemento y los permisos que deseamos otorgarle a dichos elementos

Centro de Cómputo INFOUNI – REVALORA Perú

Page 92: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 92

Tercera Unidad Sesión 6

6.1 XAMPP: Apache, MySQL, PHP y más

Xampp es un conjunto de aplicaciones que hacen función de servidor web independiente del sistema, es portable y libre, por lo tanto una opción muy cómoda a la hora de instalar nuestras aplicaciones web.

Podemos descargar Xampp de su página oficial, la última versión al día de hoy es la 1.7.3a.

Página de Descargas de Xampp: http://sourceforge.net/projects/xampp/files/

Podemos ver que contiene la versión de Xampp en el siguiente enlace:

http://www.apachefriends.org/LAMPP-RELEASENOTES.txt

1. Bueno, una vez descargado (wget http://www.apachefriends.org/download.php?xampp-linux-1.7.3a.tar.gz) vamos a instalarlo (en /opt ) para ello desde consola nos situamos donde hayamos descargado el archivo comprimido y ponemos lo siguiente:

tar -xvf xampp-linux-1.7.3a.tar.gz -C /opt

2. Le damos los permisos correspondientes en XAMPP (usuario: nobody, grupo: nogroup):

chown -R nobody:nogroup /opt/lampp/

3. Ya tenemos a Xampp instalado (es lo bueno de su portabilidad).4. Iniciamos XAMPP:

/opt/lampp/lampp start

Centro de Cómputo INFOUNI – REVALORA Perú

Page 93: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 93

* Esta Obra se publica bajo una licencia: GNU Free Document License

GNU Free Documentation LicenseVersion 1.3, 3 November 2008

Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://fsf.org/>

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or otherfunctional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter orwhether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historicalconnection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text

Centro de Cómputo INFOUNI – REVALORA Perú

Page 94: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 94

formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formatsinclude proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

The "publisher" means any person or entity that distributes copies of the Document to the public.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title"of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fitreasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

Centro de Cómputo INFOUNI – REVALORA Perú

Page 95: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 95

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document.E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

Centro de Cómputo INFOUNI – REVALORA Perú

Page 96: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 96

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

10. FUTURE REVISIONS OF THIS LICENSE

Centro de Cómputo INFOUNI – REVALORA Perú

Page 97: Revalora Mod. 3

Facultad de Ingeniería Mecánica – Universidad Nacional de Ingeniería 97

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

11. RELICENSING

"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

"Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNUFree Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

Centro de Cómputo INFOUNI – REVALORA Perú