Que es el lenguaje HTML - Universidad de Mendoza

Anuncio
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
¿Qué es WWW?
El servicio Web o WWW es una forma de representar la información en Internet basada en páginas.
Una página WWW puede incluir información de diversas formas: texto, gráficos, sonido, video,
hipertexto. Un hipertexto es texto resaltado que el usuario puede activar para cargar otra página
WWW. La diferencia entre un documento hipertexto y un documento normal consiste en que el
hipertexto contiene, además de la información, una serie de enlaces o conexiones con otros
documentos relacionados, de manera que el lector puede pasar de un tema a otro y volver al
documento original en el momento en que le interese.
Las principales ventajas del servicio WWW son tres. Primera, que puede combinar texto y multimedia.
Segunda, que los hiperenlaces permiten cargar páginas de cualquier otro servidor conectado a Internet,
da igual que esté localizado en Argentina o en Australia. Y, tercera, que la creación de páginas WWW
es bastante sencilla mediante el lenguaje HTML.
¿Qué es HTML?
El HTML, HyperText Markup Language, es un lenguaje simple utilizado para crear documentos de
hipertexto para WWW. No es un lenguaje de descripción de página como Postcript; HTML no permite
definir de forma estricta la apariencia de una página, aunque una utilización algo desviada hace que se
utilice en ocasiones como un lenguaje de presentación. Además, la presentación de la página es muy
dependiente del navegador utilizado: el mismo documento no produce el mismo resultado en la
pantalla si se visualiza con un navegador en modo caracter, Internet Explorer o Netscape, o sea, el
HTML se limita a describir la estructura y el contenido de un documento, y no el formato de la página
y su apariencia.
Una de las claves del éxito de WWW, aparte de lo atractivo de su presentación es sin duda, su
organización y coherencia. Todos los documentos WWW comparten un mismo aspecto y una única
interfaz, lo que facilita enormemente su manejo por parte de cualquier persona. Esto es posible porque
el lenguaje HTML, en que están escritos los documentos, no solo permite establecer hiperenlaces entre
diferentes documentos, sino que es un "lenguaje de descripción de página" independiente de la
plataforma en que se utilice. Es decir un documento HTML contiene toda la información necesaria
sobre su aspecto y su interacción con el usuario, y es luego el navegador que utilicemos el responsable
de asegurar que el documento tenga un aspecto coherente, independientemente del tipo de estación de
trabajo desde donde estemos efectuando la consulta.
Su simplicidad es tal que no es necesario utilizar un editor particular. Su gran permisividad exige rigor
y atención en la estructura de documentos con el fin de que éstos se visualicen correctamente al
margen del contexto y el navegador utilizado.
Por tanto, como hemos visto, HTML es un lenguaje muy sencillo que nos permite preparar
documentos Web insertando en el texto de los mismos una serie de marcas (tags) que controlan los
diferentes aspectos de la presentación y comportamiento de sus elementos.
Para escribir HTML lo único que se necesita es un editor de texto ASCII, como el Bloc de notas de
Windows o en VI de UNIX. Las marcas o tags que controlan el comportamiento del documento son
fragmentos de texto encerrados entre los signos "mayor que" y "menor que" (<marca>). Existen
diferentes tipos de marcas: algunas controlan simplemente la presentación del texto del documento;
otras, la forma en que se incluirán en él imágenes; otras, finalmente, los hipervínculos. Para completar
el conjunto de herramientas básicas necesarias para escribir páginas HTML debemos contar con un
cliente WWW, tal como Internet Explorer, o Netscape, para probar el documento a medida que lo
1
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
vamos desarrollando.
Las marcas funcionan muchas veces por parejas, una para indicar el inicio de enlace o formato, y otra
para señalar el final. La marca de inicio consiste en una letra o una palabra (por ejemplo, estas son
marcas de inicio: <B>, <TITLE>). La marca de final es la misma letra o palabra precedida por la barra
inclinada o "slash" (es decir,</B>, </TITLE>). Existen, no obstante, algunas marcas que no requieren
su pareja de cierre, como <BR> (que fuerza un salto de línea). Es importante señalar que las marcas,
en general pueden estar indistintamente en mayúsculas o en minúsculas.
Escribiendo un documento HTML
Un documento HTML comienza con la etiqueta <html>, y termina con </html>. Dentro del
documento (entre las etiquetas de principio y fin de html), hay dos zonas bien diferenciadas: el
encabezamiento, delimitado por <head> y </head>, que sirve para definir diversos valores válidos en
todo el documento; y el cuerpo, delimitado por <body> y </body>, donde reside la información del
documento.
La información almacenada en el encabezamiento no se muestra por pantalla, la única utilidad del
encabezamiento en la que nos detendremos es la directiva <title>, que permite especificar el título
de un documento HTML. Este título no forma parte del documento en sí: no aparece, por ejemplo, al
principio del documento una vez que este se presenta con un programa adecuado, sino que suele servir
como título de la ventana del programa que nos la muestra.
Elementos y Atributos
Elementos:
La declaración de elementos en HTML por lo general está compuesta por 3 partes:
Tag de inicio
Contenido
Tag de cierre
El nombre del elemento se escribe en el tag de inicio (con el formato <elemento>) y en el tag de
finalización (con el formato </elemento>). Existen algunos elementos que pueden omitir el tag de
inicio o el tag de finalización.
Pueden existir elementos anidados dentro de un documento, en este caso el primer tag de finalización
cierra al último tag que se abrió el segundo al penúltimo y así sucesivamente.
Atributos:
Los elementos pueden tener propiedades asociadas, esas propiedades las llamamos atributos, algunos
de ellos pueden tener valores y otros pueden ir sin valores.
Los atributos se colocan en el tag de inicio a continuación del nombre del elemento y se separan entre
ellos con espacios, en el caso de tener valores a continuación se coloca el signo igual (=) y entre
comillas simples o dobles el valor. Se pueden asignar valores sin las comillas, pero no es una práctica
muy recomendada. No es obligatorio definir todos los atributos en la definición de un elemento.
Secciones
General (Todos los documentos HTML deberían contener estos elementos)
Tipo de documento
2
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
<HTML></HTML>
(Al principio y fin del documento)
Cabecera de página
<HEAD></HEAD>
(Información descriptiva, tal como el título)
Titulo de página
<TITLE></TITLE> (Debe ir en el encabezado)
Cuerpo de la página
<BODY></BODY>
(Cuerpo de la página)
Definición estructural (Apariencia controlada por las preferencias del navegador)
Encabezados
<H?></H?>
(Las especificaciones definen 6 niveles)
Alineación
<H? ALIGN=LEFT|CENTER|RIGHT></H?>
División
<DIV></DIV>
Alineación
<DIV ALIGN=LEFT|RIGHT|CENTER|JUSTIFY></DIV>
Contenido definido (4.0)
<SPAN></SPAN>
Énfasis
<EM></EM>
(Se muestra usualmente como itálico)
Énfasis fuerte
<STRONG></STRONG> (Se muestra usualmente como negrita)
Citación
<CITE></CITE>
(Se muestra usualmente como itálico)
Código fuente
<CODE></CODE>
(Para listar código fuente)
Ejemplo de salida
<SAMP></SAMP>
Entrada de teclado
<KBD></KBD>
Variable
<VAR></VAR>
Definición
<DFN></DFN>
Dirección del autor
<ADDRESS></ADDRESS>
Letras de tamaño grande
<BIG></BIG>
Letras de tamaño pequeña
<SMALL></SMALL>
Inserciones (4.0)
<INS></INS>
(Marca agregado en una nueva versión)
<INS DATETIME=":::"></INS> (Fecha de cambios)
<INS CITE="URL"></INS> (Puede ser usado para indicar una dirección que explique
cambios)
Borrado (4.0)
<DEL></DEL>
(Marca borrado en una nueva versión)
El resto se aplica igual que en Inserciones
3
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Acrónimo (4.0)
<ACRONYM></ACRONYM>
Abreviado (4.0)
<ABBR></ABBR>
Formato de presentación (el autor específica la apariencia del texto)
Negrita
<B></B>
Itálico
<I></I>
Subrayado (4.0)
<U></U>
(no muy utilizado)
Línea al medio
<STRIKE></STRIKE> (no muy utilizado)
Línea al medio (4.0)
<S></S>
(no muy utilizado)
Subíndice
<SUB></SUB>
Superíndice
<SUP></SUP>
Máquina de escribir
<TT></TT>
(se muestra con fuente mono espacio)
Pre formato
<PRE></PRE>
(muestra el texto tal cual es)
Ancho
<PRE WIDTH=?></PRE> (en caracteres)
Centrado
<CENTER></CENTER> (tanto para texto como para imágenes)
Parpadeo
<BLINK></BLINK>
Fuentes
Tamaño
<FONT SIZE=?></FONT>
(varía desde 1 a 7)
Cambio del tamaño del carácter
<FONT SIZE="+|-?"></FONT>
Color
<FONT COLOR="#$$$$$$"></FONT>
Tipo de fuente (4.0)
<FONT FACE="***"></FONT>
Tamaño de punto (Netscape 4)
<FONT POINT-SIZE=?></FONT>
Peso (Netscape 4)
<FONT WEIGHT=?></FONT>
Tamaño de fuente base (4.0)
<BASEFONT SIZE=?> (desde 1 a 7; por defecto es 3)
Marquesina (Internet Explorer)
<MARQUEE></MARQUEE>
Posicionamiento
4
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Múltiple columna (Netscape 3)
<MULTICOL COLS=?></MULTICOL>
Separación de columna (Netscape 3)
<MULTICOL GUTTER=?></MULTICOL>
Ancho de columna (Netscape 3)
<MULTICOL WIDTH=?></MULTICOL>
Capas (Netscape 4)
Capa
<LAYER></LAYER>
Nombre
<LAYER ID="***"></LAYER>
Ubicación
<LAYER LEFT=? TOP=?></LAYER>
Ubicación relativa
<LAYER PAGEX=? PAGEY=?></LAYER>
Archivo origen
<LAYER SRC="***"></LAYER>
Apilamiento
<LAYER Z-INDEX=?></LAYER>
Ubicación en la pila
<LAYER ABOVE="***" BELOW="***"></LAYER>
Dimensión
<LAYER HEIGHT=? WIDTH=?></LAYER>
Camino de recorte
<LAYER CLIP=,,,></LAYER>
Visibilidad
<LAYER VISIBILITY=SHOW|HIDDEN|INHERIT></LAYER>
Fondo
<LAYER BACKGROUND="$$$$$$"></LAYER>
Color
<LAYER BGCOLOR="$$$$$$"></LAYER>
Capa inmediata
<ILAYER></ILAYER> (Acepta los mismo atributos que LAYER)
Contenido alternativo
<NOLAYER></NOLAYER>
Vínculos, gráficos y sonidos
Vincular URI
<A HREF="URL"></A>
Vincular una localización en particular
<A HREF="URL#***"></A> (Si se encuentra en otro documento)
<A HREF="#***"></A> (Si se encuentra en el mismo documento)
Ventana destino (4.0)
<A HREF="URL" TARGET="***"></A>
Acciones haciendo click (4.0)
<A HREF="URL" ONCLICK="***"></A>
(Javascript)
Acciones de Mouse arriba de (4.0)
<A HREF="URL" ONMOUSEOVER="***"></A> (Javascript)
Acciones de Mouse saliendo (4.0)
<A HREF="URL" ONMOUSEOUT="***"></A> (Javascript)
5
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Email
Vincular un e-mail
<A HREF="mailto:@"></A>
Especificar subject
<A HREF="mailto:@?SUBJECT=***"></A> (use a real ?)
Definir localización (ancla)
<A NAME="***"></A>
Imágenes
Mostrar imagen
<IMG SRC="URL">
Alineación
<IMG SRC="URL" ALIGN=TOP|BOTTOM|MIDDLE|LEFT|RIGHT>
Alineación (Netscape 1)
<IMG SRC="URL" ALIGN=TEXTTOP|ABSMIDDLE|
BASELINE|ABSBOTTOM>
Alternativa de presentación
<IMG SRC="URL" ALT="***"> (si no se puede mostrar la imagen)
Dimensiones
<IMG SRC="URL" WIDTH=? HEIGHT=?>
(en pixels)
<IMG SRC="URL" WIDTH=% HEIGHT=%> (como porcentaje)
Borde
<IMG SRC="URL" BORDER=?>
(en pixels)
Mapas sobre imágenes
<IMG SRC="URL" ISMAP> (requiere un script)
<IMG SRC="URL" USEMAP="URL">
Mapas del lado del cliente
<MAP NAME="***"></MAP> (describe al mapa)
Sección del mapa
<AREA SHAPE="DEFAULT|RECT|CIRCLE|POLY"
COORDS=",,," HREF="URL"|NOHREF>
Clip de video (Internet explorer
<IMG DYNSRC="***" START="***" LOOP=?>
Sonido de fondo (Internet explorer)
<BGSOUND SRC="***" LOOP=?|INFINITE>
Objeto embebido (Netscape 2)
<EMBED SRC="URL"> (inserta un objeto en la página)
Tamaño de objeto
<EMBED SRC="URL" WIDTH=? HEIGHT=?>
Objeto (4.0)
<OBJECT></OBJECT>
Parámetros de objetos (4.0)
<PARAM>
Divisores
Párrafos
<P></P>
(El tag de cerrado es generalmente innecesario)
Alineación
<P ALIGN=LEFT|CENTER|RIGHT></P>
6
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Texto justificado
<P ALIGN=JUSTIFY></P>
Corte de línea
<BR>
(retorno de carro simple)
Regla horizontal
<HR>
Alineación
<HR ALIGN=LEFT|RIGHT|CENTER>
Grosor
<HR SIZE=?>
(en pixels)
Ancho
<HR WIDTH=?> (en pixels)
Ancho en porcentajes
<HR WIDTH="%"> (como porcentaje del ancho de la página)
Linea sólida
<HR NOSHADE>
(sin el efecto 3D)
Sin cortes de líneas (Netscape 1)
<NOBR></NOBR>
(previene el corte de líneas)
Listas (pueden anidarse entre si)
Lista sin órden
<UL><LI></UL>
(<LI> antes de cada item de la lista)
Compacta
<UL COMPACT></UL>
Tipo de viñeta
<UL TYPE=DISC|CIRCLE|SQUARE> (para la lista entera)
<LI TYPE=DISC|CIRCLE|SQUARE> (para este y los subsecuentes)
Lista ordenada
<OL><LI></OL>
(<LI> antes de cada ítem de la lista)
Compacta
<UL COMPACT></UL>
Tipo de numeración
<OL TYPE=A|a|I|i|1>
(para la lista entera)
<LI TYPE=A|a|I|i|1> (para este y los subsecuentes)
Numero de inicio
<OL START=?>
(para la lista entera)
<LI VALUE=?>
(para este y los subsecuentes)
Lista de definición
<DL><DT><DD></DL> (<DT> = término, <DD> = definición)
Compacta
<UL COMPACT></UL>
Lista de menú
<MENU><LI></MENU> (<LI> antes de cada ítem de la lista)
Compacta
<MENU COMPACT></MENU>
Lista de directorio
<DIR><LI></DIR> (<LI> antes de cada ítem de la lista)
Compacta
<DIR COMPACT></DIR>
7
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Fondo de pantalla y colores
Fondo azulejado
<BODY BACKGROUND="URL">
Marca de agua (Internet Explorer)
<BODY BGPROPERTIES="FIXED">
Color de fondo
<BODY BGCOLOR="#$$$$$$"> (el orden es rojo, verde y azul)
Color de texto
<BODY TEXT="#$$$$$$">
Color de vínculos
<BODY LINK="#$$$$$$">
Color de vínculos visitados
<BODY VLINK="#$$$$$$">
Color de vínculos activos
<BODY ALINK="#$$$$$$">
Caracteres especiales
Carácter especial
<
>
&
"
Marca registrada
Marca registrada
Copyright
Copyright
Espacio
 
&#?;
<
>
&
"
®
®
©
©
(donde ? es el código ISO 8859-1)
Información completa:
Lista completa en <http://www.uni-passau.de/%7Eramsch/iso8859-1.html>
Formularios (generalmente requiere un script en el servidor)
Un formulario es una parte del documento que contiene elementos comunes y además contiene
elementos especiales llamados controles, y, opcionalmente sus etiquetas.
Los usuarios generalmente completan o modifican los valores de los controles de un formulario para
luego enviárselo a un agente capaz de procesar esa información (WEB server, mail server, etc.). En la
declaración de un formulario hay un atributo que indica a que URL se le va a enviar los datos (atributo
ACTION), y solo puede ser enviado a través de un botón especial (tipo de botón SUBMIT).
En HTML un documento puede contener mas de un formulario a la vez, pero solo se enviará la
información del formulario al cual se le presiona el botón SUBMIT.
Definición de formulario
<FORM ACTION="URL" METHOD=GET|POST></FORM>
Subir archivos (4.0)
<FORM ENCTYPE="multipart/form-data"></FORM>
Campo de entrada de datos
<INPUT TYPE="TEXT| PASSWORD| CHECKBOX| RADIO| FILE| BUTTON| IMAGE|
HIDDEN| SUBMIT| RESET">
8
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Nombre del campo
<INPUT NAME="***">
Valor del campo
<INPUT VALUE="***">
Marcado?
<INPUT CHECKED> (checkboxes y radio boxes)
Tamaño del campo
<INPUT SIZE=?>
(en caracteres)
Largo máximo
<INPUT MAXLENGTH=?> (en caracteres)
Botón
<BUTTON></BUTTON>
Nombre (4.0)
<BUTTON NAME="***"></BUTTON>
Tipo de botón (4.0)
<BUTTON TYPE="SUBMIT|RESET|BUTTON"></BUTTON>
Valor por defecto
<BUTTON VALUE="***"></BUTTON>
Etiquetas (4.0)
<LABEL></LABEL>
Elemento etiquetado (4.0)
<LABEL FOR="***"></LABEL>
Lista de selección
<SELECT></SELECT>
Nombre de la lista
<SELECT NAME="***"></SELECT>
Número de opciones
<SELECT SIZE=?></SELECT>
Selección múltiple
<SELECT MULTIPLE> (se puede seleccionar mas de uno)
Opción (de las listas desplegables)
<OPTION>
(items que se pueden seleccionar)
Opción por defecto
<OPTION SELECTED>
Valor de la opción
<OPTION VALUE="***">
Grupo de opciones (4.0)
<OPTGROUP LABEL="***"></OPTGROUP>
Área de texto
Tamaño
<TEXTAREA ROWS=? COLS=?></TEXTAREA>
Nombre
<TEXTAREA NAME="***"></TEXTAREA>
Grupo de elementos
<FIELDSET></FIELDSET>
Leyenda (4.0)
<LEGEND></LEGEND> (texto para grupo de elementos)
Alineación
<LEGEND ALIGN="TOP|BOTTOM|LEFT|RIGHT"></LEGEND>
9
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Tablas
Definición de tablas
<TABLE></TABLE>
Alineación de la tabla (4.0)
<TABLE ALIGN=LEFT|RIGHT|CENTER>
Bordes
<TABLE BORDER></TABLE> (activado o desactivado)
<TABLE BORDER=?></TABLE> (asignar valor)
Espacio entre celda y tabla
<TABLE CELLSPACING=?>
Espacio entre celda y texto
<TABLE CELLPADDING=?>
Ancho de tabla
<TABLE WIDTH=?>
(en pixels)
Ancho en porcentaje
<TABLE WIDTH=%>
(porcentaje de la página)
Color de tabla (4.0)
<TABLE BGCOLOR="$$$$$$"></TABLE>
Contorno de la tabla (4.0)
<TABLE FRAME=VOID|ABOVE|BELOW|HSIDES|LHS|RHS|
VSIDES|BOX|BORDER></TABLE>
Reglas (4.0)
<TABLE RULES=NONE|GROUPS|ROWS|COLS|ALL></TABLE>
Color de borde (Internet explorer)
<TABLE BORDERCOLOR="$$$$$$"></TABLE>
Borde oscuro (Internet Explorer)
<TABLE BORDERCOLORDARK="$$$$$$"></TABLE>
Borde claro (Internet Explorer)
<TABLE BORDERCOLORLIGHT="$$$$$$"></TABLE>
Fila
<TR></TR>
Alineación
<TR ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM>
Celda
<TD></TD>
(deben aparecer dentro de una fila)
Alineación
<TD ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM>
Sin corte de línea
<TD NOWRAP>
Columnas a unir
<TD COLSPAN=?>
Filas a unir
<TD ROWSPAN=?>
Ancho deseado (4.0)
<TD WIDTH=?> (en pixels)
Porcentaje de ancho (Netscape 3)
<TD WIDTH="%"> (porcentaje de la tabla)
Color de celda (4.0)
<TD BGCOLOR="#$$$$$$">
Celdas de encabezado
10
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
<TH></TH> (es igual que TD pero el texto es negrita y centrado)
Alineación
<TH ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM>
Sin corte de línea
<TH NOWRAP>
Columnas a unir
<TH COLSPAN=?>
Filas a unir
<TH ROWSPAN=?>
Ancho deseado (4.0)
<TH WIDTH=?> (en pixels)
Porcentaje de ancho
<TH WIDTH="%"> (porcentaje de la tabla)
Color de celda
<TH BGCOLOR="#$$$$$$">
Cuerpo de tabla
<TBODY>
Pie de tabla (4.0)
<TFOOT></TFOOT> (debe venir antes de THEAD>
Encabezado de tabla (4.0)
<THEAD></THEAD>
Caption de la tabla
<CAPTION></CAPTION>
Alineación
<CAPTION ALIGN=TOP|BOTTOM|LEFT|RIGHT>
Columna (4.0)
<COL></COL>
(atributos de grupo de columnas)
Columnas unidas (4.0)
<COL SPAN=?></COL>
Ancho de columna (4.0)
<COL WIDTH=?></COL>
Porcentaje de ancho (4.0)
<COL WIDTH="%"></COL>
Grupo de columnas (4.0)
<COLGROUP></COLGROUP> (estructura de grupo de columnas)
Columnas agrupadas (4.0)
<COLGROUP SPAN=?></COLGROUP>
Ancho de grupo
<COLGROUP WIDTH=?></COLGROUP>
Porcentaje de ancho
<COLGROUP WIDTH="%"></COLGROUP>
Marcos (Frames). Define y manipula regiones especificas de la pantalla
Documento frame (4.0)
<FRAMESET></FRAMESET>
(en vez de <BODY>)
Alto de filas (4.0)
<FRAMESET ROWS=,,,></FRAMESET>
(pixels o %)
<FRAMESET ROWS=*></FRAMESET> (* = tamaño relativo)
Ancho de columnas (4.0)
<FRAMESET COLS=,,,></FRAMESET>
(pixels o %)
11
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
<FRAMESET COLS=*></FRAMESET> (* = tamaño relativo)
Bordes (4.0)
<FRAMESET FRAMEBORDER="yes|no"></FRAMESET>
Ancho
<FRAMESET BORDER=?></FRAMESET>
Color
<FRAMESET BORDERCOLOR="#$$$$$$"></FRAMESET>
Espacio entre frames (Netscape 3)
<FRAMESET FRAMESPACING=?></FRAMESET>
Definición del frame (4.0)
<FRAME>
(contiene un frame individual)
Mostrar documento (4.0)
<FRAME SRC="URL">
Nombre (4.0)
<FRAME NAME="***"|_blank|_self|_parent|_top>
Ancho de margen (4.0)
<FRAME MARGINWIDTH=?> (márgenes izquierdo y derecho)
Alto de margen (4.0)
<FRAME MARGINHEIGHT=?> (márgenes superior e inferior)
Barras de desplazamiento? (4.0)
<FRAME SCROLLING="YES|NO|AUTO">
No modificar el tamaño del frame (4.0)
<FRAME NORESIZE>
Bordes (4.0)
<FRAME FRAMEBORDER="yes|no">
Color de bordes (4.0)
<FRAME BORDERCOLOR="#$$$$$$">
Contenidos sin frame
<NOFRAMES></NOFRAMES> (para navegadores sin frames)
Frames inmediatos (4.0)
<IFRAME></IFRAME> (tiene los mismos atributos que FRAME)
Dimensiones
<IFRAME WIDTH=? HEIGHT=?></IFRAME>
<IFRAME WIDTH="%" HEIGHT="%"></IFRAME>
Scripts y Java
Script
<SCRIPT></SCRIPT>
Ubicación
<SCRIPT SRC="URL"></SCRIPT>
Tipo
<SCRIPT TYPE="***"></SCRIPT>
Lenguaje
<SCRIPT LANGUAGE="***"></SCRIPT>
Otro contenido (4.0)
<NOSCRIPT></NOSCRIPT> (si los scripts no son soportados)
Applet
<APPLET></APPLET>
Nombre de archivo
<APPLET CODE="***">
12
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
Parámetros
<APPLET PARAM NAME="***">
Ubicación
<APPLET CODEBASE="URL">
Identificación
<APPLET NAME="***">
(para referencias)
Texto altenativo
<APPLET ALT="***">
(para navegadores no Java)
Alineación
<APPLET ALIGN="LEFT|RIGHT|CENTER">
Tamaño
<APPLET WIDTH=? HEIGHT=?> (en pixels)
Espaciado
<APPLET HSPACE=? VSPACE=?> (en pixels)
Scripts en el servidor (Netscape 4)
<SERVER></SERVER>
Misceláneos
Comentarios
<!-- *** -->
(el navegador no lo muestra)
Prólogo
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
Dirección URL de este archivo
<BASE HREF="URL"> (debe incluirse en el header)
Nombre base de la ventana
<BASE TARGET="***">( debe incluirse en el header)
Relaciones
<LINK REV="***" REL="***" HREF="URL"> (en el header)
Archivo vinculado (4.0)
<LINK TYPE="***" SRC="***"></LINK>
Información Meta
<META>
(debe incluirse en el header)
Hojas de estilos
<STYLE></STYLE>
HTML - Tabla Cronológica
·
1986. Publicación de la ISO 8879 que presenta el Standard General Markup Language, origen
del HTML.
·
1989. Tim Berners-Lee, a la sazón en el Centro Europeo de Investigaciones Nucleares
presenta su artículo Information Management: A Proposal dedicándose de lleno al desarrollo
de un sistema que permitiera el acceso en línea de manera uniforme a la información
disponible en muchos recursos distintos, y que pudiese funcionar en máquinas que conectadas
por redes basadas en TCP/IP.
·
1990-1991. Tim Berners-Lee define el HTML como un subconjunto de SGML (Standard
Generalized Markup Language), que más tarde se llamará nivel 0; soporta encabezados, listas
y anclas. Se crea el nombre World Wide Web.
13
Universidad de Mendoza
Teleinformática I – Lenguaje HTML
·
1991. Tim Berners-Lee introduce el primer visor de HTML, LineMode, que trabaja en modo
texto y sólo en plataformas UNIX. El Centro Europeo de Investigaciones Nucleares realiza la
apertura del primer sitio con acceso público de World Wide Web el 17 de mayo
(http://info.cern.ch).
·
1992. Dan Connolly produce la primera Definición de Tipo de Documento (DTD) para el
lenguaje, llamada HTML 1.0, agregando a la definición original atributos para modificar el
estilo físico del texto. Se distribuye Viola, primer visor gráfico de Web y disponible sólo para
X.11.
·
1993. Un nuevo visor que soporta un mayor nivel, Lynx, es producido por la Universidad de
Kansas, si bien lee sólo texto. Aparece Mosaic, desarrollado por el Centro Nacional para
Aplicaciones de Supercomputadoras, es el primer visor de Web en entorno gráfico que se hace
disponible para computadoras personales, lo que lo hace inmediatamente popular. A fines de
año, comienzan a aparecer los primeros artículos sobre WWW en diarios y revistas de
circulación masiva. Tim Berners-Lee utiliza el trabajo del año anterior de Connolly para
presentar el borrador de la primera norma (RFC -Recommendation for Comments) de HTML
para Internet.
·
1994. La Universidad Técnica de Graz desarrolla un servidor y clientes con mayores
prestaciones para HTML, Hyper-G, que no tiene gran éxito. Cello, primer visor de HTML que
no requiere TCP/IP presentado por la Escuela de Leyes de la Universidad de Cornell. Dan
Connolly y Karen Olson Muldrow redefinen el HTML para el nivel 2.0, que ahora soporta
formularios. Un grupo de programadores que desarrollaran el Mosaic producen un nuevo visor
de World Wide Web, Netscape (también conocido como Mozilla), que tiene una amplia
aceptación entre los usuarios, pero que soporta elementos de programación que equivalen a
una degeneración del HTML (tamaños de letra, fondos). Se define un equivalente para los
modelos en tres dimensiones del HTML, el VRML (Virtual Reality Modeling Language), que
permite moverse dentro de los ambientes definidos. En este mismo año se realizan la Primera
y Segunda conferencias internacionales de WWW, en Ginebra y Chicago, respectivamente. Se
crea la W3 Organization.
·
1995. Dave S. Raggett (Hewlett-Packard, Inglaterra) comienza a compilar la normativa del
nuevo nivel del lenguaje, el HTML 3.0, cuya principal novedad es el soporte de tablas.
Microsoft produce su primer visor de Internet, el cual también utiliza elementos de HTML
degenerados. Una nueva versión de Netscape, Navigator 2.0, agrega soporte de encuadres. Sun
Microsystems produce el primer visor de World Wide Web con soporte de un lenguaje de
programación, HotJava. Se celebran la Tercera y Cuarta conferencias internacionales de
WWW, en Boston y Darmstadt respectivamente, y la conferencia de WWW para Asia y el
Pacífico en Wagga-Wagga..
·
1996. Netscape Communications y Microsoft presentan las nuevas versiones de sus visores
que soportan gran parte del nivel de HTML 3.0. Aparecen visores no comerciales que
implementan la norma completa de HTML 3.0. Se formaliza un nuevo nivel para la
modelación en tres dimensiones, VRML 3.0, que permite interactuar con los objetos definidos.
Se celebra la Quinta conferencia internacional de WWW en Rocquencourt.
·
1997. D. Raggett presenta, en enero, la versión normalizada del 3.2. En julio, aparece la
versión 4.0, experimental.
·
1998. HTML 4.0.
14
Universidad de Mendoza
Teleinformática I – Lenguaje PHP
¿Que es PHP?
Es un lenguaje de scripts embebido dentro del lenguaje HTML. PHP fue creado por Rasmus Lerdorf
en 1994 con la idea de mejorar las prestaciones que hasta ese momento brindaba la WWW, en un
comienzo se lo llamaba Personal Home Pages Tools. En un principio era un lenguaje muy limitado y
solo parseaba unos cuantos macros, y funciones básicas. Posteriormente le agrego un interprete y así
surgió el PHP FI versión 2 (tenía soporte para la base de datos mSQL). Luego Zeev Suraski y Andi
Gutmans se unieron al equipo y re escribieron el parser surgiendo la versión 3. La Ultima versión (la
4) cuenta con el motor de de scripts de Zend, haciéndolo más potente y rápido.
Tipo de lenguaje
Interpretado o compilado
Scripts del lado del cliente o del servidor
Orientado a objetos o no orientado a objetos
Principales características del lenguaje del Lenguaje
Permite hacer debug (con productos comerciales).
Se puede compilar a código intermedio (con productos comerciales), lo que lo hace
más rápido e inviolable.
No permite que el usuario final pueda ver el código fuente una vez ejecutada la
aplicación, pero el código fuente queda en el servidor, por lo que el administrador del
sistema si tiene acceso.
Se puede utilizar con clientes livianos y universales.
Las actualizaciones en el sistema quedan a disposición automáticamente para todos
los usuarios.
Soporte para múltiples bases de datos (aproximadamente 21).
Se puede instalar en múltiples plataformas (Unix, Linux, OS/2, Windows).
Esta muy bien amalgamado con Apache.
Alta curva de aprendizaje del lenguaje, sobre todo para los programadores del
lenguaje C.
Es de libre distribución.
Ampliamente conocido.
Gran cantidad de funciones, lo que lo hace muy potente.
Soporta orientación a objetos.
Como se instala en apache
Primero se instala apache –la instalación depende de la plataforma donde se lo instales -, luego se
deben modificar los siguientes parámetros del archivo httpd.conf
ServerRoot "C:/Archivos de programa/Apache Group/Apache" Donde esta instalado el servidor.
ServerName localhost
Nombre del server.
DocumentRoot "C:/Archivos …. /Apache/htdocs"
Directorio principal de archivos.
DirectoryIndex index.html
Archivo por defecto del servidor.
Una vez que se haya modificado los datos se agrega el soporte para PHP
ScriptAlias /php/ "C:/Archivos de programa/Apache Group/php/"
Action php3-script /php/php.exe
AddHandler php3-script .php3 .html .htm .phtml
Entorno de desarrollo, ejecución, server y debugger
Desarrollo: Editor común o editor de html (FrontPage, GoLive, HomeSite)
15
Universidad de Mendoza
Teleinformática I – Lenguaje PHP
Ejecucion: Cliente de HTML (Netscape, Internet Explorer)
Server: IIS, apache
Debugger: www.zend.com
Como se agregan scripts de PHP en HTML
Formas de incluir codigo PHP:
<script languaje="PHP"> ......... </script>
<?PHP ..... ?> Esta es la forma estandar
<? ..... ?>
Pautas generales del PHP
comentarios de una línea y de varias
// comentarios de una línea
/* comentario de varias líneas */
Fin de sentencias
Pueden haber casos en que una sentencia con texto tenga varios renglones la
delimitación debe hacerse entre comillas y luego finalizar con ;
; fin de líneas
Salida por pantalla
echo variable;
echo “string”;
16
Universidad de Mendoza
Teleinformática I – Tipos de datos primitivos
Tipos de datos Primitivos
¿Cómo son las variables en PHP?
Las variables se definen con el signo $ adelante del nombre de la variable, por ejemplo:
$variable = 1;
El nombre de variables puede tener cualquier largo y debe comenzar con una letra o el guión bajo
(underscore), seguido de cualquier letra de la a-z o A-Z, guión bajo, carácter ascii desde 127 a 255, o
un número. Las variables son case sensitive.
Tipos de datos primitivos
Números enteros (integer)
La definición de los números enteros depende de la plataforma donde se ejecuta el interprete PHP,
generalmente es un número de 32 bits con signo.
Formas de declarar números enteros:
$numero = 100;
$numero = -100;
$numero = o100;
$numero = 0x100;
// número 100 positivo
// número 100 negativo
//64 en decimal (octal 100)
//256 en decimal (hexadecimal 100)
Números flotantes (double)
El tamaño de los números flotantes depende de la plataforma en que se ejecuta el PHP pero por lo
general el número máximo aproximado es 1.8e208 con una precisión de 14 cifras decimales (64 bits)
La forma de definir los números flotantes son:
$numero = 1.234;
$número = 1.2e3;
Hay que tener en cuenta que algunos números no pueden ser convertidos a números binarios sin evitar
la perdida de precisión y esa perdida de precisión puede generar errores no esperados.
Cadenas (strings)
Los strings pueden ser definidos por dos tipos de delimitadores:
Comilla doble: $cadena = “esta es una cadena”;
Comilla simple:
$cadena = ‘esta es una cadena’;
Las variables que están entre comillas dobles son evaluadas (sujeto a ciertas restricciones), el símbolo
de escape que se utiliza es la barra invertida “\”. Los caracteres que se permiten escapar son los
siguientes:
\n
Retorno de carro
\r
Avance de línea
\t
Tabulador
\\
barra invertida \
17
Universidad de Mendoza
Teleinformática I – Tipos de datos primitivos
\$
\”
signo $
comillas dobles
En el caso de la definición de strings con comillas simples, no se evalúan las variables y los únicos
caracteres que se pueden escapar son los siguientes \’ y \\
Existe otra forma de delimitar strings que es el uso de la sintaxis “here doc”. La forma en que se
define es la siguiente:
"«<" más un identificador proporcionado por nosotros, al finalizar se termina con el mismo
delimitador y ;.
Por ejemplo:
$str = «<CADENA
Hola, buenos dias
CADENA;
El comportamiento de la sintaxis “here doc” es similar a la definición de string con comillas dobles.
Los strings se concatenan con el punto (.), no con el más (+).
Los caracteres dentro de un string pueden ser accedidos tratándolos como un arreglo indexado
numéricamente.
Conversión de strings
$numero = 1 + ”2” ;
$numero = 1 + “1.1e3”;
$numero = 1 + “texto + 1”;
$numero = 1 + “texto”;
$numero = 1 + “10 años”;
$numero = “10 años” + 1 ;
$numero = “10 años” + 1.0 ;
// igual a 3
// igual a 1101
// igual a 1
// igual a 1
// igual a 11
// igual a 11
// igual a 11
Comportamiento de variables (Type Juggling)
PHP no requiere ni soporta definición explícita en la declaración de variables. El tipo de variable
depende del contexto en el que se la usa. Si se le asigna a una variable un número entero entonces esa
variable tendrá el tipo entero, pero si se le asigna a continuación a la misma variable un string
entonces dejara de ser un entero para ser un string.
Ejemplos de cambios de variables
$variable = “0”;
$variable++;
$variable = $variable + 1;
$variable = $variable + 1.3;
$variable = 1 + “10 años”;
es un string (“0”)
es un string (“1”)
es un entero (2)
es un flotante (3.3)
es un entero (11)
Forzado de variables (Type Casting)
El forzado de variables consiste en forzar un tipo dado de una variable, independientemente de la
18
Universidad de Mendoza
Teleinformática I – Tipos de datos primitivos
operación que se esté realizando.
Para realizar el forzado de variables se indica entre paréntesis el tipo antes de la variable. El siguiente
ejemplo fuerza una variable para que sea un número flotante:
$entero = 200;
$flotante = (int) $entero;
Los tipos válidos de forzados son los siguientes:
(int), (integer) – fuerza a entero
(real), (float), (double) – fuerza a double
(string) – fuerza a string
(array) – fuerza a arreglo
(object) – fuerza a objeto
Cuando se fuerza una variable a un objeto la variable quedará almacenada en el atributo “scalar” del
objeto, cuando se transforma a arreglo el valor será el primer elemento del arreglo.
19
Universidad de Mendoza
Teleinformática I - Variables
Variables
Fundamentos
Las variables se definen con el signo $ adelante del nombre de la variable, por ejemplo:
$variable = 1;
El nombre de variables puede tener cualquier largo y debe comenzar con una letra o el guión bajo
(underscore), seguido de cualquier letra de la a-z o A-Z, guión bajo, carácter ascii desde 127 a 255, o
un número. Las variables son case sensitive.
Asignación de variables
En la versión 3 de PHP se asignan las variables solamente por valor, esto quiere decir que si asigno
una variable por valor
$a=4; $b=$a; $b=5;
al cambiar el valor de alguna de las dos variable no va a afectar a la otra.
PHP 4 ofrece otro modo de asignar variables, este modo se llama asignación de variables por
referencia. De esta forma la nueva variable hace referencia a la variable vieja, en otras palabras se
convierte en un “alias de” o “apunta a” la otra variable. Cualquier cambio que haga a cualquiera de las
dos variables, va a repercutir en la otra.
El modo de asignar variables por referencia es anteponer el carácter & a la variable cuando se está
haciendo la asignación.
$b=&$a;
Algo importante de destacar es que solo se puede asignar variables por referencia a variables
declaradas, no se puede hacer sobre funciones, ni asignaciones de números u operaciones matemáticas.
$variable = &(45+3); Incorrecto
$variable = &5;
Incorrecto
$variable = &funcion();
Incorrecto
Variables predefinidas
PHP nos proporciona una gran cantidad de variables predefinidas, pero hay que tener en cuenta que
existen algunas variables que dependen del entorno donde se ejecuta el PHP.
Variables de Apache
Estas variables son creadas por el servidor web Apache, si se utiliza un servidor web distinto al apache
no hay garantía de que estas variables estén disponibles, puede que algunas no existan o que hayan
otras nuevas.
SERVER_NAME: es el nombre del host donde se está ejecutando el script de PHP. Si el
script se está ejecutando en un host virtual, será el nombre del servidor virtual.
SERVER_PROTOCOL: Es el nombre y la versión del protocolo con el cual se requirió la
página por ejemplo ’HTTP/1.0’
REQUEST_METHOD: Cual fue el método con el que se accedió la página, por ejemplo
’GET’, ’HEAD’, ’POST’, ’PUT’.
HTTP_REFERER: La dirección de la página – si existiera- de la cual fue referida la página
20
Universidad de Mendoza
Teleinformática I - Variables
actual en el navegador, esta se coloca por el navegador del usuario, no todos los navegadores
lo hacen.
REMOTE_ADDR: es la dirección IP desde donde se está viendo la página actual.
REMOTE_PORT: es el puerto IP desde donde se está viendo la página actual.
SERVER_PORT: el puerto IP que utiliza el servidor WEB
REQUEST_URI: es la URI que fue dado para poder acceder a la página actual por ejemplo
’/index.html’.
Variables de entorno
Estas variables se importan al espacio de nombres global del PHP desde el ambiente donde se ejecuta
el parser de PHP. Muchas de ellas son provistas por el shell donde se está ejecutando el PHP, como
existen diferentes tipos de shell es prácticamente imposible listar las variables de entorno.
Variables de PHP
Estas variables son creadas por el mismo PHP.
argv: Es un arreglo de argumentos que han sido pasados al script. cuando se llama al PHP
desde la linea de comandos, nos da un estilo similar al C para acceder a los datos pasados al
script. Cuando se lo llama a través del método GET, este contendrá el string de petición.
argc: si se lo ejecuta desde la linea de comandos, contendrá el número de parámetros que se le
enviaron al script.
PHP_SELF: Indica el nombre del script que se está ejecutando actualmente, se presenta en
forma relativa al documento raíz, si se esta ejecutando desde la linea de comandos la variable
no está disponible.
HTTP_COOKIE_VARS: es un arreglo asociativo de variables pasado al script actual a través
de cookies HTTP.
HTTP_GET_VARS: es un arreglo asociativo de variables pasado as script actual a través del
método HTTP GET.
HTTP_POST_VARS: es un arreglo asociativo de variables pasado as script actual a través del
método HTTP POST.
HTTP_POST_FILES: es un arreglo asociativo de variables que contiene información a cerca
de archivos subidos al servidor a través del método HTTP_POST
HTTP_ENV_VARS: es un arreglo asociativo de variables pasadas al script actual a traves del
entorno pariente
HTTP_SERVER_VARS: es un arreglo asociativo de variables pasado as script actual a través
del servidor HTTP, estas variables son análogas a las variables de entorno previamente
mencionado.
Ambito de las variables
El ámbito de las variables está determinado por el contexto donde se han definido. La mayor parte de
las variables tienen un ámbito simple. Este ámbito simple también abarca a los archivos incluidos y
requeridos.
$var = 1;
include(“archivo.php3”);
Function probar()
{
echo $var;
21
Universidad de Mendoza
Teleinformática I - Variables
}
probar();
echo $var;
En este script se define la variable $var, a diferencia del lenguaje C – donde las variables globales
están disponibles dentro de las funciones- la variable $var no estará disponible dentro de la función
probar(), la función hace referencia a la variable $var que es local a la función, para hacer que las
variables globales se puedan acceder desde adentro de una función se deberá hacer lo siguiente:
Function probar()
{
global $var;
$var = 4;
}
echo $var;
global
//el resultado por pantalla va a ser 4 ya que se hicieron cambios sobre la variable
Otra forma de acceder a las variables globales dentro de una función es:
Function probar()
{
echo $GLOBALS[“var”];
}
La variable $GLOBALS es un arreglo asociativo cuyas claves son los nombres de las variables
globales.
Cuando se crean las variables dentro de un ámbito se asigna una porción de la memoria del sistema
para almacenar el valor de la misma, al abandonar o salir de ese ámbito la variable se “destruye” y se
libera la memoria asignada, otra característica del ámbito de variables es el modificador static, este
modificador hace que cuando se salga del contexto en que se creó la variable no se “destruya” y pueda
ser utilizada la próxima vez que se trabaje dentro de ese ámbito (generalmente en el llamado a
funciones).
Por ejemplo:
Function probar()
{
static $var=0;
$var++;
}
Esta función inicializará la variable $var en cero y luego conservará el valor que vaya tomando a
medida que se ejecuta la función.
Variables variables
Existen ocasiones en que es muy útil tener variables de nombres variables. Dicho de otro modo, son
nombres de variables que se pueden establecer y usar dinámicamente.
22
Universidad de Mendoza
Teleinformática I - Variables
Suponiendo que se han definido las siguientes variables:
$variar = “valor”;
$valor = “auto”;
$color = “rojo”;
Para utilizar variables variables se utiliza el signo pesos ($) delante de la variable.
echo $variar; //produce como salida: valor
echo $valor;
//produce como salida: auto
echo $$variar; //produce como salida: auto
En el tercer caso se utilizó una variable variable, como $nombre tiene como dato “valor” hacer
$$nombre equivale a hacer $valor. Por ende, es evidente que $variable es el nombre de la variable;
Si se asignara a $variar = “color” cuando se haga
echo $$variar; dará como resultado “rojo”
Para usar variables variables con arreglos, hay que resolver un problema de ambigüedad. Si se escribe
$$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía
utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta
ambiguedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo.
Variables externas a PHP
Formularios HTML (Métodos GET y POST)
Cuando se envía un formulario a un script de PHP todas los objetos del formulario automáticamente
pasan a ser variables en el script de PHP.
Se puede enviar arreglos desde HTML a PHP de la siguiente forma:
<form action=”siguiente.php3” method=”post”>
<input type=”text” name=”direccion[calle]”>
<input type=”text” name=”direccion[nro]”>
<input type=”submit”>
</form>
En PHP versión 3 se pueden trabajar arreglos unidimensionales, en el caso del PHP 4 no existe esa
restricción.
HTTP Cookies
Las cookies son un mecanismo de almacenamiento de datos en el cliente remoto, y de esa forma poder
realizar diversos controles. PHP provee una forma de asignar cookies a través de la función SetCookie.
Dado que las cookies son parte de del encabezado del HTTP las llamadas a la función SetCookie
deben hacerse antes de enviar cualquier dato al navegador. Esta es la misma restricción que para la
función header(). Las cookies que se reciben son transformadas automáticamente a variables en el
PHP.
23
Universidad de Mendoza
Teleinformática I - Variables
Variables de entorno
Puntos en los nombres de variables
Como el punto es un carácter que se utiliza para concatenar cadenas, todos los puntos que vienen con
variables serán transformadas a guión bajo.
Determinando el tipo de variable
PHP convierte los datos automáticamente al tipo que más le conviene según la operación que se está
utilizando. Algunas veces para el usuario no es tan obvio de que tipo de dato se trata, para ello PHP
incluye las siguientes funciones para poder determinar el tipo de dato:
gettype()
is_long()
is_double()
is_string()
is_array()
is_object()
24
Universidad de Mendoza
Teleinformática I - Constantes
Constantes
PHP define varias constantes y además proporciona un mecanismo para definir más constantes en
tiempo de ejecución. Las constantes son similares a las variables, pero se diferencian en ciertos
puntos:
Para declararlas se debe utilizar la función define().
Una vez que se ha definido no puede cambiarse el valor originalmente asignado.
Las constantes no tienen el signo $ precediendolas.
Se pueden acceder desde cualquier lugar sin tener en cuenta el ámbito de las variables.
Solo pueden evaluar valores escalares.
Declaración de constantes:
define(“Nombre”, “valor”)
Ejemplo:
define("CONSTANTE", "esta es una constante");
echo CONSTANTE;
Constantes que siempre están presentes en PHP
__FILE__: Es el nombre del archivo que se está siendo interpretado actualmente. Si se usa
dentro de un archivo que ha sido incluido o requerido nos dará el nombre del archivo incluido
o requerido y no el del padre.
__LINE__: Es el número de línea dentro del archivo que se está interpretando, si se utiliza
dentro de un archivo incluido o requerido entonces la posición será la del archivo incluido o
requerido.
PHP_VERSION: Es un string que representa la versión del intérprete de PHP que está
ejecutando el script que produjo el llamado a la constante, por ejemplo ‘3.0.8-dev’.
PHP_OS: Es el nombre del sistema operativo en el cual se esta ejecutando el PHP, por
ejemplo: ‘Linux’.
TRUE: valor verdadero.
FALSE: valor falso.
E_ERROR: Denota un error distinto de un error de interpretación del cual no es posible
recuperarse.
E_WARNING: Denota una condición en la que PHP sabe que hay un error, pero de todas
formas puede continuar; este puede ser capturado por el mismo script.
E_PARSE: El interprete encontró sintaxis inválida en el archivo de comandos. La
recuperación no es posible.
E_NOTICE: Ocurrió algo que pudo ser o no un error. La ejecución continúa. Los ejemplos
incluyen usar una cadena sin comillas como un índice "hash", o acceder a una variable que no
ha sido inicializada.
Las constantes E_* se usan típicamente con la función error_reporting() para configurar el nivel de
informes de error.
25
Universidad de Mendoza
Teleinformática I - Operadores
Operadores
Operadores aritméticos
Ejemplo
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
Operación
Suma
Resta
Multiplicación
División
Módulo
Resultado
La suma de $a y $b
La diferencia entre $a y $b
El producto entre $a y $b
El cociente entre $a y $b
El resto del cociente entre $a y $b
Operador de asignación
El operador de asignación es el “=”.
PHP permite hacer algunos trucos al realizar asignaciones:
$a = $b = 5;
$a = ($b = 4) + 5;
//$a y $b tienen valor 5
//$a tiene el valor 9 y $b el valor 4
Además del operador básico de asignación, pueden utilizarse “operadores combinados” para todos los
operadores binarios aritméticos y de strings que permiten, de una sola vez, usar una variable en una
expresión y luego establecer el valor de esa variable al resultado de la expresión.
Ejemplo:
$a = 10;
$a += 20;
$a = “Buenos “;
$a .= “días”;
//$a tendrá un valor de 10
//$a tendrá un valor de 30
//$a tendrá un valor “Buenos dias”
Operadores a nivel de bits
Ejemplo
Operación
Resultado
$a & $b
And
Los bits que estén en 1 en $a y $b permanecerán en 1
$a | $b
Or
Los bits que estén en 1 en $a o $b permanecerán en 1
$a ^ $b
Xor
Los bits que estén en 1 o 0 a la vez en $a y $b se pondrán en 1
~$a
Not
Todos los bits en 1 pasan a cero y los que están en cero pasan
a1
$a « $b
Desplazar a la izquierda
Se desplazan los bits hacia la izquierda (equivale a
multiplicar por 2)
$a » $b
Desplazar a la derecha Se desplazan los bits hacia la derecha (equivale a dividir por
2)
Operadores de comparación
Ejemplo
Operación
$a == $b
Igual
$a === $b
Idéntico
mismo tipo de dato (PHP4)
$a != $b
No igual
$a !== $b
No idéntico
diferentes (PHP4)
Resultado
Verdadero si $a es igual a $b
Verdadero si $a es igual a $b y además si son del
Verdadero si $a es distinto a $b
Verdadero si $a es distinto a $b o si sin de tipos de dato
26
Universidad de Mendoza
Teleinformática I - Operadores
$a < $b
$a > $b
$a <= $b
$a >= $b
Menor que
Mayor que
Menor o igual que
Mayor o igual que
Verdadero si $a es menor que el valor de $b
Verdadero si $a es mayor que el valor de $b
Verdadero si $a es menor o igual que el valor de $b
Verdadero si $a es mayor o igual que el valor de $b
Otro operador de comparación es el operador ternario ?:
Ejemplo:
(expresión 1) ? (expresión 2) : (expresión 3)
En este caso se evalúa la expresión 1, si es verdadera entonces se evalúa la expresión 2, si la expresión
1 es falsa entonces se ejecuta la expresión 3.
Los operadores se pueden dividir en operadores unarios y binarios. Los operadores unarios aquellos
que operan sobre un término p.e. ~$a, los operadores binarios operan sobre 2 términos p.e. $a - $b.
Operador de control de errores
PHP tiene un solo operador de control de errores que es la arroba “@”. Para utilizarlo se antepone el
carácter @ a la expresión que queremos controlar, si la expresión produce un error se ignorará el error
generado.
Si la opción track_errors fue habilitada en la configuración de PHP entonces se cargará el error en la
variable global $php_errormsg. Esta variable contendrá solo el último error por lo que si se desea
saber cual fue el error debemos asegurarnos de leerlo antes que otra línea de código genere un nuevo
error y sobreescriba la variable.
Hay que tener cuidado cuando se utiliza la @, ya que incluso deshabilita los errores críticos que
detienen la ejecución de los scripts, esto quiere decir que si se utiliza la @ para suprimir errores que
puedan llegar a producir algunas expresiones puede que se interrumpa la ejecución del script y no
podamos saber cual fue el error.
Operador de ejecución
PHP tiene un solo operador de ejecución que es la comilla simple invertida “ ` ”, hay que aclarar que
NO es la comilla simple. Cuando PHP encuentre una expresión entre comillas simples invertidas
tratará de ejecutarla como una llamada al sistema operativo y se devolverá el resultado, este resultado
puede ser asignado a una variable.
Ejemplo
En Unix o Linux:
$salida = `ls -l`;
echo “<PRE>$salida</PRE>”;
En Windows
$salida = `dir`;
echo “<PRE>$salida</PRE>”;
Operadores de incremento y decremento
Ejemplo
++$a
Operación
Preincremento
Resultado
Devuelve $a después de haber incrementado en 1 su valor
27
Universidad de Mendoza
Teleinformática I - Operadores
$a++
--$a
$a--
Postincremento
Predecremento
Postdecremento
Devuelve $a, y después incrementa en 1 su valor
Devuelve $a después de haber decrementado en 1 su valor
Devuelve $a, y después decrementa en 1 su valor
Ejemplos
<?php
echo "<h3>Postincremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a++ . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Preincremento</h3>";
$a = 5;
echo "Debería ser 6: " . ++$a . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Postdecremento</h3>";
$a = 5;echo "Debería ser 5: " . $a-- . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
echo "<h3>Predecremento</h3>";
$a = 5;
echo "Debería ser 4: " . --$a . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
?>
Operadores lógicos
Ejemplo
$a and $b
And
$a or $b
$a xor $b
Xor
al mismo tiempo
!$a
Not
$a && $b
And
$a || $b
Or
Operación
Or
Resultado
Verdadero si $a y $b son verdaderos
Verdadero si $a o $b son verdaderos
Verdadero si $a o $b son verdaderos, pero no si $a y $b lo son
Verdadero si $a no es verdadero
Verdadero si $a y $b son verdaderos
Verdadero si $a o $b son verdaderos
La diferencia entre las dos formas distintas de operadores AND y OR es la precedencia de operadores
que se explica más tarde.
Precedencia de operadores
La precedencia de operadores especifica cómo se agrupan las expresiones. Por ejemplo, en la
expresión 1 + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicación ("*") tiene una
mayor precedencia que el de adición ("+").
La siguiente tabla lista la precedencia de operadores, indicándose primero los de menor precedencia.
Asociatividad Operadores
izquierda
,
izquierda
or
28
Universidad de Mendoza
Teleinformática I - Operadores
izquierda
izquierda
derecha
izquierda
izquierda
izquierda
izquierda
izquierda
izquierda
izquierda
no asociativo
no asociativo
izquierda
izquierda
izquierda
derecha
derecha
no asociativo
xor
and
print
= += -= *= /= .= %= &= |= ^= ~= <<= >>=
?:
||
&&
|
^
&
== != ===
< <= > >=
<< >>
+-.
*/%
! ~ ++ -- (int) (double) (string) (array) (object) @
[
new
Operadores de strings
Hay dos operadores de strings. El primero es el operador de concatenación punto “.”, el cual
devuelve como resultado la concatenación de los argumentos a la derecha y a la izquierda del
argumento. El segundo operador de concatenación es el operador de concatenación y asignación “.=”
el cual agrega y asigna el argumento de la derecha en el de la izquierda.
29
Universidad de Mendoza
Teleinformática I – Estructuras de control
Estructuras de control
IF
La construcción IF es una de las construcciones más importantes de los lenguajes de programación, y
en PHP no es la excepción. Permite ejecutar fragmentos de programas en forma condicional. La
estructura de IF es similar al lenguaje C.
Estructura:
if (expresión)
sentencia
En la definición se evalúa la condición de verdadero de la expresión, si es verdadero se ejecutará la
sentencia, en caso de ser falso se ignorará.
Ejemplo
if ($a < $b)
echo ‘$a es menor que $b’;
Siempre que se cumpla que $a sea menor que $b se ejecutará el la porción de código.
Pueden anidarse las estructuras IF dentro de otras, de esta forma si pueden armar estructuras muy
complejas.
ELSE
Si se quiere ejecutar una porción de código cuando cierta expresión es verdadera se utiliza la
estructura IF, pero si quisiéramos ejecutar una porción de código cuando no se cumple la condición se
utiliza la estructura ELSE. ELSE extiende la funcionalidad a la estructura IF.
Ejemplo:
if ($a < $b)
echo ‘$a es menor que $b’;
else
echo ‘$a es mayor que $b’;
ELSEIF
Es una combinación entre else y el if, como el else extiende al if cuando la condición del if no se
cumple. Pero la diferencia es que el elseif se ejecuta si la condición dentro del elseif es verdadera.
Ejemplo:
if ($a < $b)
echo ‘$a es menor que $b’;
elseif ($a == $b)
echo ‘$a es igual a $b’;
30
Universidad de Mendoza
Teleinformática I – Estructuras de control
else
echo ‘$a es mayor que $b’;
WHILE
El lazo while es el más simple en PHP, el comportamiento es igual al del lenguaje C.
La estructura básica del lazo while es la siguiente:
while (expresión) sentencias
El funcionamiento del lazo while es muy simple, se ejecutará el bloque de sentencias anidadas
sentencias hasta que la expresión sea verdadera. La expresión sólo se evalúa cada vez que se reinicia
el lazo de sentencias, por lo tanto por más que se cumpla la condición de la expresión en medio de la
ejecución no se terminará de ejecutar el bloque de sentencias hasta que se evalúe la expresión al
finalizar el bloque (antes de comenzar una nueva iteración del ciclo).
Puede ocurrir que la expresión evalúe a verdadero en la primera iteración, por lo tanto no se ejecutará
el bloque de sentencias.
Ejemplo
$i = 1;
while ($i <= 10)
{
print $i++;
}
DO .. WHILE
do
{sentencias;}
while (expresión);
El lazo do .. while es similar al bloque while, la principal diferencia es que la condición de la
expresión se evalúa al finalizar el bloque de sentencias. De esta forma nos aseguramos que por lo
menos se ejecute una vez el bloque de sentencias.
$i =1;
do
{
print $i++;
}
while ($i <= 10);
Existe una forma de interrumpir la ejecución de un bloque de sentencias de manera inmediata y así
abandonarlo y continuar con la siguiente sentencia a continuación del lazo do .. while. La intrucción
que nos permite realizar esto es break.
Ejemplo
31
Universidad de Mendoza
Teleinformática I – Estructuras de control
$i =1;
do
{
print $i++;
if ($i == 5)
{break;}
}
while ($i <= 10);
print $i;
En el ejemplo cuando $i valga 5 la condición del if será verdadera y se ejecutará la sentencia break, a
continuación se ejecutará la sentencia print $i.
FOR
El lazo For es el más complejo en PHP, el comportamiento es similar al del lenguaje C.
For (expresión 1; expresión 2; expresión 3) sentencias
La expresión 1 se ejecuta UNA SOLA VEZ de manera incondicional al principio del lazo, estas
sentencias se utilizan por lo general para inicializar variables.
La expresión 2 se evalúa cada vez que se inicia el ciclo de sentencias, y se seguirá haciendo siempre y
cuando la expresión 2 sea evaluada como verdadera. Al finalizar el bloque de sentencias, se ejecuta la
expresión 3 y a continuación se vuelve a evaluar la expresión 2.
Cada expresión puede ser vacía (expresión 1 o expresión 2 o expresión 3), en el caso en que la
expresión 2 sea vacía será evaluada siempre verdadera. A primera vista esto puede resultar inútil, ya
que nunca terminará el lazo for, pero se podría terminar la ejecución haciendo una evaluación con las
sentencias if y break.
Ejemplos:
Ejemplo 1
for ($i = 1; $i <= 10; $i++)
{
print $i;
}
Ejemplo 2
for ($i = 1;;$i++)
{
if ($i > 10)
{
break;
}
print $i;
}
Ejemplo 3
$i = 1;
for (;;)
32
Universidad de Mendoza
Teleinformática I – Estructuras de control
{
if ($i > 10)
{
break;
}
print $i;
$i++;
}
Ejemplo 4
for ($i = 1; $i <= 10; print $i, $i++) ;
Estos 4 ejemplos dan el mismo resultado, pero da una muestra de cómo se puede utilizar los lazos for
de formas diferentes.
FOREACH
El lazo foreach se introdujo en la versión 4 de PHP. Es una forma corta y sencilla de recorrer los
elementos de un arreglo.
Existen 2 formas de declarar los lazos foreach, que se describen a continuación:
foreach(arreglo as $valor) sentencias
foreach(arreglo as $clave => $valor) sentencias
En cada iteración del lazo la variable $valor va conteniendo el valor de cada uno de los elementos del
arreglo y el puntero que indica el elemento actual se va incrementando. Cada vez que se inicie el lazo
foreach el puntero del arreglo inicia desde el primer elemento, por lo que no hay que reestablecer el
puntero cada vez que queramos leer los elementos del arreglo.
La diferencia entre la primer forma de declarar el lazo de la segunda es que en la última se irá
almacenando cada elemento (clave o key) en la variable $clave.
Hay que aclarar que el lazo foreach trabaja sobre una copia del arreglo y no sobre el propio arreglo,
por lo que si se realizan cambios a los elementos el arreglo original no se verá afectado.
Ejemplos:
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}
foreach ($arr as $value) {
echo "Value: $value<br>\n";
}
reset ($arreglo);
33
Universidad de Mendoza
Teleinformática I – Estructuras de control
while (list($clave, $valor) = each ($arreglo)) {
echo "Clave: $clave; Valor: $valor<br>\n";
}
foreach ($arreglo as $clave => $valor) {
echo "Clave: $clave; Valor: $valor<br>\n";
}
Estos son ejemplos de cómo se leen elementos de un arreglo con foreach y como se hacía en PHP
versión 3. Los ejemplos corresponden a las dos formas en las que se pueden declarar los lazos foreach.
BREAK
La sentencia break permite detener la ejecución de los lazos for, while y switch. Opcionalmente se le
puede pasar un argumento que indicará cuantos niveles de anidamiento queremos detener.
Ejemplo:
$i = 0;
while (++$i)
{
switch ($i)
{
case 5:
echo "At 5<br>\n";
break 1; /* Sale solamente del switch. */
case 10:
echo "En 10; salir <br>\n";
break 2; /* Sale del switch y del while. */
default:
break;
}
}
CONTINUE
La sentencia continue permite saltear la ejecución del resto de una iteración y continua ejecutando
desde el comienzo de la próxima iteración.
La diferencia con break es que continua la ejecución del lazo que contiene la sentencia y break la
interrumpe. Al igual que break acepta un parámetro opcional que permite saltear varios niveles de
iteraciones.
SWITCH
La sentencia switch equivale a hacer una serie de comparaciones con la sentencia if, pero sobre el
mismo valor, de hecho la sentencia switch fue hecha para esto. En muchas ocasiones uno desea hacer
comparaciones de una misma variable con un cierto número de valores y en función de cada una de las
comparaciones ejecutar una porción de código distinto.
34
Universidad de Mendoza
Teleinformática I – Estructuras de control
if ($i == 0)
{
print "i es igual a 0";
}
if ($i == 1)
{
print "i es igual a 1";
}
if ($i == 2)
{
print "i es igual a 2";
}
switch ($i)
{
case 0:
print "i es igual a 0";
break;
case 1:
print "i es igual a 1";
break;
case 2:
print "i es igual a 2";
break;
}
El funcionamiento de switch es muy sencillo: el programa busca alguna sentencia case en la que
coincida el valor con el valor de la variable $i, una vez encontrada ejecutará el código asociado al case
y se detendrá en la sentencia break. Si no se escribe la sentencia break al final del bloque seguirá
ejecutando hasta terminar con los case que siguen o hasta que encuentre la sentencia break. Muchas
veces se desea ejecutar la misma porción de código para uno o más valores de la variable $i, para este
caso se hará lo siguiente:
switch ($i)
{
case 0:
case 1:
case 2
print "i es menor o igual que 2";
break;
case 3
print "i es mayor que 2";
break;
}
Existe una opción dentro de la declaración del switch que sirve para ejecutar una porción de código
cuando ninguna de las opciones se han cumplido. Para este caso se utiliza la sentencia default.
Ejemplo:
switch ($i)
{
case 0:
35
Universidad de Mendoza
Teleinformática I – Estructuras de control
print "i es igual a 0";
break;
case 1:
print "i es igual a 1";
break;
default:
print "i es distinto de 0 y de 1";
break;
}
36
Universidad de Mendoza
Teleinformática I – Tipos de datos no primitivos
Tipos de datos no primitivos
Arreglos (arrays)
Un arreglo es un conjunto ordenado de elementos del mismo tipo. Los arreglos pueden ser de una
dimensión o de múltiples dimensiones.
En PHP se pueden referenciar los arreglos como tablas de comparaciones (arreglo asociativo) –
también llamadas hash tables– o como vectores, esto no significa que existan dos tipos de arreglos
sino que a los arreglos se los puede acceder de las dos formas.
Arreglos de una dimensión
Sintaxis
$arreglo[clave]=valor; //en forma de vector
Para poder leer o escribir un dato de un arreglo como vector la clave deberá ser un número entero.
$arreglo[‘clave’]=valor;
//en forma de arreglo asociativo
Para poder leer o escribir un dato de un arreglo como arreglo asociativo la clave deberá ser un una
palabra (string).
Ejemplo:
$arreglo[0]=1;
$arreglo[1]=20;
$arreglo[‘texto’]=300;
Si el programador quisiera agregar datos en la última posición (en el caso del ejemplo $arreglo[2]) no
debería preocuparse en averiguar cual fue el último elemento cargado previamente, existe una forma
que consiste en lo siguiente:
$arreglo[]=25; //equivale a $arreglo[2]=25;
$arreglo[]=122;
//equivale a $arreglo[3]=122;
De esta forma se simplifica enormemente el código de la aplicación ya que no se tiene que hacer
controles ni llevar variables extras para saber cuál será el último elemento.
Existe una gran cantidad de sentencias que hacen que PHP sea un lenguaje muy poderoso en el manejo
de arreglos, como por ejemplo:
Funciones de ordenamiento
asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), y uksort()
Funciones de conteo
count(), sizeof()
Funciones para recorrer arreglos
next(), prev(), each()
Funciones de para unir arreglos
37
Universidad de Mendoza
Teleinformática I – Tipos de datos no primitivos
array_merge(), array_merge_recursive()
Función de mezclado
shuffle()
Arreglos multidimensionales
Los arreglos de múltiples dimensiones son muy fáciles de definir, simplemente se agrega una clave por
cada dimensión deseada.
Ejemplo
$arreglo[0]=1;
$arreglo[1]=0;
//arreglo de una dimensión
$arreglo[0][0]=1;
$arreglo[0][1]=2;
//arreglo de dos dimensiones
$arreglo[‘accion’][0]=2;
$arreglo[‘accion’][1]=3;
$arreglo[0][‘color’]=3; //arreglo de 2 dimensiones mezcla de arreglo asociativo y vectorial
$arreglo[0][0][0]=1;
//arreglo de 3 dimensiones
Puede verse en los ejemplos que se pueden mezclar arreglos asociativos con arreglos vectoriales y
ordenarlo de cualquier forma que deseemos.
En la versión 3 de PHP no es posible referenciar un arreglo multidimensional, en forma directa dentro
de los strings. Es evidente que en el siguiente ejemplo:
$arreglo[‘color’][0]=”amarillo”;
echo “El color seleccionado es $arreglo[‘color’][0]”;
Esto no funcionará en la versión 3 de PHP, en su lugar deberíamos hacer lo siguiente:
$arreglo[‘color’][0]=”amarillo”;
echo “El color seleccionado es “.$arreglo[‘color’][0]”; //Se quita la expresión fuera del string y se
concatena
Esta limitación del intérprete de PHP en la versión 3 fue solucionada en la versión 4 haciendo lo
siguiente:
$arreglo[‘color’][0]=”amarillo”;
echo “El color seleccionado es {$arreglo[‘color’][0]}”;
Se pueden llenar los arreglos de distintas maneras, una muy ingeniosa es utilizar la sentencia array().
Ejemplo:
$arreglo["color"] = "rojo";
$arreglo["gusto"] = "dulce";
$arreglo["forma"] = "redonda";
38
Universidad de Mendoza
Teleinformática I – Tipos de datos no primitivos
$arreglo["nombre"] = "manzana";
$arreglo[3] = 4;
el mismo arreglo puede llenarse utilizando array() de la siguiente forma:
$arreglo = array(
“color” => “rojo” ,
“gusto” => “dulce” ,
“forma” => “redonda” ,
“nombre” => “manzana” ,
3 => 4);
También se pueden llenar arreglos multidimensionales con la sentencia array() anidándolos. Ejemplo
$arreglo = array(
“manzana” => array(
“color” => “rojo” ,
“gusto” => “dulce” ,
“forma” => “redonda”
)
“naranja” => array(
“color” => “anaranjado” ,
“gusto” => “acido” ,
“forma” => “redonda”
)
)
al hacer
echo arreglo[‘manzana’][‘gusto’];
El resultado será dulce.
Clases y objetos
Definición de clases
class Fruta
{
var color;
var gusto;
var forma;
function cargar_datos($c, $g, $f)
{$this->color=$c;
$this->gusto=$g;
$this->forma=$f;
}
function mostrar_datos()
{echo “Color: “.$this->color.”<br>”;
echo “Gusto: “.$this->gusto.”<br>”;
echo “forma: “.$this->forma.”<br>”;
}
39
Universidad de Mendoza
Teleinformática I – Tipos de datos no primitivos
}
$manzana= new Fruta;
$manzana->cargar_datos(“rojo”, ”dulce”, ”redonda”);
Para crear un objeto de la clase Fruta se debe utilizar la sentencia new. La sentencia new se utiliza
para crear una variable nueva.
Una clase puede heredar de otra clase o dicho de otra forma una clase puede extender a otra. Para
hacerlo posible se utiliza el modificador extends.
Al extender una clase la nueva clase hereda las propiedades y métodos de la clase padre, y a esta le
podemos agregar nuevas propiedades y métodos.
Constructores
El constructor de una clase es un método que lleva el mismo nombre de la clase y se ejecuta
automáticamente cuando se crea un nuevo objeto de la clase.
class Fruta
{
var color;
var gusto;
var forma;
function Fruta($c, $g, $f)
{$this->color=$c;
$this->gusto=$g;
$this->forma=$f;
}
function cargar_datos($c, $g, $f)
{$this->color=$c;
$this->gusto=$g;
$this->forma=$f;
}
function mostrar_datos()
{echo “Color: “.$this->color.”<br>”;
echo “Gusto: “.$this->gusto.”<br>”;
echo “forma: “.$this->forma.”<br>”;
}
}
$manzana= new Fruta;
$manzana->cargar_datos(“rojo”, ”dulce”, ”redonda”);
Creación de un objeto del tipo Fruta utilizando el constructor de la clase
40
Universidad de Mendoza
Teleinformática I – Tipos de datos no primitivos
$manzana= new Fruta (“rojo”, ”dulce”, ”redonda”);
41
Universidad de Mendoza
Teleinformática I – Funciones de Filesystem
Funciones de FileSystem
Es un conjunto de funciones que permite la manipulación de archivos y directorios del servidor.
A continuación se detalla la lista de funciones mas comunes.
copy
Copia un archivo
int copy(string origen, string destino)
Hace una copia del archivo origen al archivo destino (ambos pueden contener el path del archivo).
Devuelve TRUE si la copia tiene éxito, y FALSE en otro caso.
Ejemplo
if (!copy($file, $file.'.bak')) {
echo("Error al copiar el archivo $file...<br>\n");
}
rename
Renombra un archivo
int rename(string archivo_viejo, string archivo_nuevo)
Trata de renombrar archivo_viejo como archivo_nuevo.
Devuelve TRUE en caso de éxito y FALSE en caso de fallo.
dirname
Devuelve la parte del path correspondiente al directorio
string dirname(string path)
Dada una cadena (string) conteniendo el path a un archivo, esta función devolverá el nombre del
directorio.
En Windows, tanto la barra (/) como la barra inversa (\) son usadas como separadores de caracteres.
En otros entornos, debe usarse la barra directa (/).
Ejemplo:
$path = "c:\\windows\\win.ini";
$archivo = dirname($path); // $archivo toma el valor "c:\\windows"
file_exists
Verifica si un archivo existe
int file_exists(string archivo_nombre)
Devuelve TRUE si el archivo especificado por archivo_nombre existe; y FALSE en otro caso.
unlink
Borra un archivo
int unlink(string archivo_nombre)
Borra el archivo archivo_nombre. Es similar a la función unlink() del C Unix. Devuelve 0 o FALSE
en caso de error.
is_file
Dice si el archivo nombrado es un archivo regular
42
Universidad de Mendoza
Teleinformática I – Funciones de Filesystem
bool is_file(string archivo_nombre)
Devuelve TRUE si el archivo_nombre existe y es un archivo regular.
Los resultados de esta función son cacheados. Ver clearstatecache() para más detalles.
fopen
Abre un archivo o una URL
int fopen(string archivo_nombre, string modo [, int use_include_path])
Devuelve una referencia a un archivo abierto (file pointer o fp) para luego ser utilizado por las
funciones de lectura y escritura.
Si archivo_nombre comienza con "http://" (no es sensible a mayúsculas), se abre una conexión HTTP
1.0 hacia el servidor especificado y se devuelve un apuntador de archivo al comienzo del texto de
respuesta.
No maneja redirecciones HTTP, por eso se debe incluir una barra final cuando se trata de directorios.
Si archivo_nombre comienza con "ftp://" (no es sensible a mayúsculas), se abre una conexión ftp hacia
el servidor especificado y se devuelve un apuntador al archivo requerido. Si el servidor no soporta ftp
en modo pasivo, esto fallará. Se pueden abrir archivo via ftp para leer o para escribir (pero no ambas
cosas simultáneamente).
Si archivo_nombre no comienza con nada de lo anterior, el archivo se abre del sistema de archivos, y
se devuelve un apuntador al archivo abierto.
Si el abrir el archivo falla, la función devuelve FALSE.
modo puede ser cualquiera de lo siguiente:
'r' - Abre para sólo lectura; sitúa el apuntador del archivo al comienzo del mismo.
'r+' - Abre para lectura y escritura; sitúa el apuntador del archivo al comienzo del archivo.
'w' - Abre para sólo escritura; sitúa el apuntador del archivo al comienzo del archivo y trunca el
archivo con longitud cero. Si el archivo no existe, trata de crearlo.
'w+' - Abre el archivo para lectura y escritura; sitúa el apuntador del archivo al comienzo del archivo y
trunca el archivo con longitud cero. Si el archivo no existe, trata de crearlo.
'a' - Abre sólo para escribir (añadir); sitúa el apuntador del archivo al final del mismo. Si el archivo no
existe, trata de crearlo.
'a+' - Abre para lectura y escritura (añadiendo); sitúa el apuntador del archivo al final del mismo. Si el
archivo no existe, trata de crearlo.
Además, modo puede contener la letra 'b'. Esto es útil para sistemas que diferencian entre archivos
binarios y de texto (ej. es inútil en Unix). Si no se necesita, será ignorado.
Puede usarse el tercer parámetro opcional y fijarlo a "1", si también se quiere buscar el archivo en el
include_path.
$fp = fopen("c:/windows/ file.txt", "r");
$fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@ejemplo.com/", "w");
Si se experimentan problemas a la hora de leer y escribir a archivos y se esta usando la versión de PHP
como módulo para el servidor, hay que recordar que debes asegurar que los archivos y directorios que
estas usando son accesibles al proceso servidor.
En la plataforma Windows, hay que tener de escribir correctamente las barras invertidas en el path del
archivo (poniéndolas dobles), o usa barras directas.
$fp = fopen("c:\\data\\info.txt", "r");
fread
Lee archivos en modo binario
string fread(int fp, int largo)
43
Universidad de Mendoza
Teleinformática I – Funciones de Filesystem
fread() lee hasta largo bytes del apuntador de archivo referenciado por fp. La lectura acaba cuando
largo bytes se han leído o se alcanza EOF, lo que ocurra primero.
fclose
Cierra el apuntador a un archivo abierto
int fclose(int fp)
Se cierra el archivo apuntado por fp.
Devuelve TRUE en caso de éxito y FALSE en caso de fallo.
fgets
Obtiene una línea del archivo apuntado
string fgets(int fp, int largo)
Devuelve una cadena de como mucho (largo- 1 bytes) leídos del archivo apuntado por fp. La lectura
acaba cuando son leídos (largo - 1 bytes), cuando se llega a una nueva línea (el caracter de nueva línea
se incluye en el valor devuelto), o cuando se llega a un EOF (lo que ocurra primero).
Si ocurre un error, devuelve FALSE.
Fallos Comunes:
Los que hayan usado la semántica de 'C' de la función fgets deben darse cuenta de la diferencia que
hay en como el EOF es devuelto por esta función.
fgetc
Obtiene un caracter del archivo apuntado
string fgetc(int fp)
Devuelve una cadena (string) conteniendo un simple caracter leído del archivo apuntado por fp.
Devuelve FALSE para EOF (como hace feof()).
feof
Verifica si el apuntador a un archivo está al final del archivo (end-of-file)
int feof(int fp)
Devuelve TRUE si el apuntador del archivo está en EOF o si ocurre un error; en otro caso devuelve
FALSE.
fwrite
Escribe archivos en formato binario
int fwrite ( int fp, string cadena [, int largo])
fwrite() escribe el contenido de cadena al archivo apuntado por fp. Si se da el argumento largo, la
escritura acaba antes de que largo bytes sean escritos o se alcance el final de cadena, lo que ocurra
primero.
fputs
Escribe en el archivo apuntado
int fputs(int fp, string str [, int length])
fputs() es un alias de fwrite(), y es idéntico a él en todo. Notar que el parámetro largo es opcional y si
no se pone la cadena entera será escrita.
file
lee un archivo completo hacia un array
44
Universidad de Mendoza
Teleinformática I – Funciones de Filesystem
array file(string archivo_nombre [, int use_include_path])
Idéntica a readfile(), excepto que file() devuelve el archivo en un array. Cada elemento del array
corresponde a una línea del archivo, con el caracter de nueva línea incluido.
Se puede utilizar el segundo parámetro opcional y ponerle el valor "1", si también se quiere buscar el
archivo en el include_path.
45
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
Acceso a bases de datos MySQL
Nociones básicas de bases de datos MySQL
MySQL es un gestor de bases de datos SQL (Structured Query Language). Es una implementación
Cliente-Servidor que consta de un servidor y diferentes clientes (programas/librerías).
En el mundo GNU, una de las bases de datos que se reseña en cualquier referencia de aplicaciones de
éste tipo bajo LINUX, es MySQL aunque no está incluida en ninguna distribución ya que no tiene
licencia GNU como tal, para comercializarla a ella o a cualquier software que la utilice o se sirva de
ésta habrá que adquirir una licencia.
Esta base de datos es considerada (en su propia documentación así lo reseña) como la más rápida y
robusta tanto para volúmenes de datos grandes como pequeños (siempre, claro está, comparada con las
de su categoría), aunque como veremos más adelante está rapidez es a costa de no implementar ciertos
aspectos del SQL.
Principales Características
·
El principal objetivo de MySQL es velocidad y robustez.
·
Escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU autoconf para potabilidad.
·
Clientes C, C++, JAVA, Perl, PHP, TCL.
·
Multiproceso, es decir puede usar varias CPU si éstas están disponibles.
·
Puede trabajar en distintas plataformas y S.O. distintos.
·
Sistema de contraseñas y privilegios muy flexible y segura.
·
Todas la palabras de paso viajan encriptadas en la red.
·
Registros de longitud fija y variable.
·
16 índices por tabla, cada índice puede estar compuesto de 1 a 15 columnas o partes de ellas
con una longitud máxima de 127 bytes.
·
Todas las columnas pueden tener valores por defecto.
·
Utilidad (Isamchk) para chequear, optimizar y reparar tablas.
·
Todos los datos están grabados en formato ISO8859_1.
·
Los clientes usan TCP o UNIX Socket para conectarse al servidor.
·
El servidor soporta mensajes de error en distintas lenguas.
·
Todos los comandos tienen -help o -? Para las ayudas.
·
Diversos tipos de columnas como enteros de 1, 2, 3, 4, y 8 bytes, coma flotante, doble
precisión, carácter, fechas, enumerados, etc.
46
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
·
ODBC para Windows 95 (con fuentes), se puede utilizar ACCESS para conectar con el
servidor.
SQL y MySQL
Como indicamos en la introducción, este servidor de bases de datos está considerada como las más
rápida entres las de sus misma categoría tanto para volúmenes de datos grandes como pequeños, pero
como también indicamos al principio es a base de no implementar ciertos aspectos de las
especificación SQL éstos aspectos, que a mi entender, son importantes son por una lado los Triggers y
por otro lado la Lógica Transaccional.
Los triggers no es nada más que una porción de código almacenado que se "dispara" o se ejecuta
cuando se realiza una operación ( actualización, borrado, etc.) con la base de datos. Naturalmente
comprobar la propia existencia de disparador y ejecutarlo si existe consume recursos y tiempo y es
como su propio manual indica, la única razón por la que los triggers no están soportados.
Un aspecto muy importante en cualquier base de datos relacional es la consistencia de las diferentes
tablas que la componen, para conseguir esto de una forma más o menos fácil es utilizando la "Lógica
Transaccional" , será el propio gestor de base de datos el que proporcione mecanismos de bloqueo de
ficheros y consolidación o retroceso en la operaciones con las tablas. Pues bien Mysql no soporta las
transacciones en aras simplemente de la velocidad (o por lo menos así lo indican en sus comentarios) ,
sólo nos podemos ayudar con los comandos LOCK tables /UNLOCK tables que permiten bloquear
tablas impidiendo que otros usuarios puedan acceder a ellas pero sin la posibilidad de deshacer las
operaciones realizadas con los datos.
Pasos para realizar una consulta
1- Establecer conexión
2- Ejecutar query (consulta)
3- Leer resultado
4- Cerrar conexión
Establecer conexiones
mysql_connect
int mysql_connect ([string hostname [:puerto] [:/camino/al/socket] [, string usuario [, string
password]]])
Devuelve: Un identificador de enlace positivo si tiene éxito, o falso si error.
mysql_connect() establece una conexión a un servidor MySQL. Todos los argumentos son
opcionales, y si no hay , se asumen los valores por defecto ('localhost', usuario propietario del proceso
del servidor, password vacía).
El hostname puede incluir tambien un número de puerto . ej. "hostname:puerto" o un camino al socket
ej. ":/camino/al/socket" para localhost.
El enlace al servidor se cerrará tan pronto como la ejecución del script finalice, a menos que se cierre
antes explícitamente llamando a mysql_close().
Ejemplo:
<?
$host = "10.3.3.6";
$usuario = "root";
$passw = "";
$conexion = mysql_connect($host, $usuario, $passw);
?>
mysql_pconnect
47
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
mysql_pconnect() actúa como mysql_connect() con dos diferencias fundamentales.
Primero, durante la conexión, la función intenta encontrar un enlace persistente abierto con el mismo
host, usuario y password. Si lo encuentra, devuelve el identificador de enlace en lugar de abrir otra
conexión.
Segundo, la conexión no se cerrará cuando acabe la ejecución del script. El enlace permanecerá abierta
para ser usado en el futuro (mysql_close() no cerrará el enlace establecido con mysql_pconnect()).
Ejemplo:
<?
$host = "10.3.3.6";
$usuario = "root";
$passw = "";
$conexion = mysql_pconnect($host, $usuario, $passw);
?>
Ejecutar consultas
mysql_db_query
Envia una sentencia MySQL al servidor
int mysql_db_query (string base_de_datos, string sentencia [, int identificador_de_enlace])
Devuelve: Un identificador de resultado positivo o falso si ocurre un error.
mysql_db_query() selecciona una base y ejecuta una sentencia en ella. Si el identificador de enlace
no ha sido especificado, la función intenta encontrar un enlace abierto al servidor MySQL y si no lo
encuentra, intentará crear uno como si fuera llamado mysql_connect() sin argumentos.
Ejemplo:
<?
$sql_query = "select * from personas";
$baseDeDatos = "personal";
$consulta = mysql_db_query($baseDeDatos, $sql_query, $conexion);
?>
mysql_query
Envía una sentencia SQL a MySQL
int mysql_query (string sentencia [, int identificador_de_enlace])
mysql_query() envía una sentencia a la base activa en el servidor asociado al identificador de enlace.
Si no es especificado un identificador_de_enlace, se asumirá el ultimo enlace abierto. Si no hay
ningún enlace abierto, la función intenta establecer un enlace como si se llamara función
mysql_connect() sin argumentos, y lo utiliza.
La sentencia no puede terminar por punto y coma.
mysql_query() devuelve TRUE (no-cero) o FALSE para indicar si la sentencia se ha ejecutado
correctamente o no. Un valor TRUE significa que la sentencia era correcta y pudo ser ejecutada en el
servidor. No indica nada sobre el numero de fila devueltas. Es perfectamente posible que la sentencia
se ejecute correctamente pero que no devuelve ninguna fila.
Ejemplo:
<?
48
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
$baseDeDatos = "personal";
$sql_query = "select * from personas";
mysql_select_db($baseDeDatos);
$consulta = mysql_query($sql_query, $conexion);
?>
Mostrar consultas
mysql_fetch_row
Devuelve una fila de resultado como matriz
array mysql_fetch_row (int id_resultado)
Devuelve: Una matriz que corresponde a la fila seleccionada, o falso si no quedan más líneas.
mysql_fetch_row() selecciona una fila de datos del resultado asociado al identificador de resultado
especificado. La fila es devuelta como una matriz. Cada columna del resultado es guardada en un
offset de la matriz, empezando por el offset 0.
La llamada a mysql_fetch_row() debería devolver la próxima fila del resultado, o falso si no quedan
más filas.
Ejemplo:
<?
...
while ($row=mysql_fetch_row($consulta))
{echo "Campo 1: ".$row[0];
echo "Campo 2: ".$row[1];
}
...
?>
mysql_fetch_array
Extrae la fila de resultado como una matriz asociativa
array mysql_fetch_array (int id_resultado [, int tipo_de_resultado])
Devuelve una matriz que corresponde a la sentencia extraída, o falso si no quedan más filas.
mysql_fetch_array() es una versión extendida de mysql_fetch_row(). Además de guardar los datos en
el índice numérico de la matriz, guarda también los datos en los índices asociativos, usando el nombre
de campo como clave.
Si dos o más columnas del resultado tienen el mismo nombre de campo, la última columna toma la
prioridad. Para acceder a la(s) otra(s) columna(s) con el mismo nombre, se debe especificar el índice
numérico o definir un alias para la columna.
Ejemplo
<?
En este ejemplo se supone que la tabla "personas" tiene por lo menos dos campo de los cuales
uno se llama "nombre" y otro "apellido"
...
while ($row=mysql_fetch_array($consulta))
{echo "Nombre: ".$row['nombre'];
echo "Apellido: ".$row['apellido'];
}
...
?>
Funciones más comunes de MySQL
mysql_select_db
49
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
Selecciona un base de datos MySQL
int mysql_select_db (string base_de_datos [, int identificador_de_enlace])
Devuelve : true si se ejecutó con éxito, false si dio error.
mysql_select_db() establece la base activa que estará asociada con el identificador de enlace
especificado. Si no se especifica un identificador de enlace, se asume el ultimo enlace abierto. Si no
hay ningun enlace abierto, la función intentara establecer un enlace como si se llamara a
mysql_connect().
Toda llamada posterior a mysql_query() utilizará la base activa.
Ejemplo:
<?
$baseDeDatos = "personal";
mysql_select_db($baseDeDatos);
?>
mysql_fetch_field
Extrae la información de una columna y la devuelve como un objeto.
object mysql_fetch_field (int id_resultado [, int salto])
Devuelve un objeto que contiene la información del campo.
Puede usarse mysql_fetch_field() para obtener información sobre campos en un resultado. Si no se
especifica el salto, se extrae el siguiente campo que todavía no ha sido extraído. con
mysql_fetch_field().
Las propiedades del objeto son:
name - nombre de la columna
table - name de la tabla a la que pertenece la columna
max_length - longitud máxima de la columna
not_null - 1 si la columna no puede contener un valor nulo
primary_key - 1 si la columna es clave primaria
unique_key - 1 si la columna es clave única
multiple_key - 1 si la columna es clave no única
numeric - 1 si la columna es numérica
blob - 1 si la columna es un BLOB
type - el tipo de la columna
unsigned - 1 si la columna es unsigned
zerofill - 1 si la columna es zero-filled
mysql_num_fields
Devuelve el numero de campos de un resultado
int mysql_num_fields(int id_resultado)
Por razones de compatibilidad puede usarse también mysql_numfields().
mysql_num_rows
Devuelve el numero de filas de un resultado
50
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
int mysql_num_rows(int id_resultado)
Por razones de compatibilidad puede usarse también mysql_numrows().
51
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
Como guardar y recuperar una imagen desde una base de datos
Para poder guardar y recuperar imágenes en una base de datos, debemos tener preparada una tabla para
almacenar las imágenes. La tabla debe contener un campo del tipo texto largo, o BLOB (que nos va a
dar espacio suficiente como para guardar imágenes grandes).
Pasos para almacenar una imagen:
Página que pide los datos
Dentro de esa página debemos agregar un control del tipo archivo, que será el que nos permitirá
seleccionar el archivo para enviarlo. Además debemos cambiarle la forma de envío de datos al
formulario que contiene el control de archivo. La forma de hacerlo es agregar como atributo del tag
<form> lo siguiente:
ENCTYPE="multipart/form-data"
Quedando el tag <form> de la siguiente forma:
<FORM METHOD=POST ENCTYPE="multipart/form-data" ACTION="imagen_agregar.php">
Generalmente se trabaja sin este atributo, pero en este caso debemos hacerlo ya que si no
especificamos, no lograremos nuestro objetivo.
Al no colocar el atributo el comportamiento será el siguiente: al enviar los datos del formulario pasará
de una página a otra la dirección del archivo en la máquina cliente; si quisiéramos por ejemplo enviar
el archivo imagen.jpeg ubicada en el directorio raíz del disco C de nuestra máquina pasará el path del
archivo (pasará c:\imagen.jpeg).
En cambio si agregamos el atributo el navegador enviará el archivo al servidor, el servidor lo almacena
en un lugar temporal (que está configurado en Apache) y el valor que tendremos en la variable será el
path del archivo dentro del servidor, por ejemplo podría ser algo así c:\temp\temp0034.tmp
Página que recibe los datos.
En esta página tenemos el dato de cual fue el archivo que se le envió, para poder acceder a los datos
que contiene el archivo debemos abrirlo y leerlo con fopen() y fread().
Los datos que leemos del archivo puede ser de formato texto o binario, en el caso de ser binario es
recomendable que se los trasforme o codifique por que no todas las bases de datos soportan grabar
datos binarios directamente en sus campos (como por ejemplo en la base de datos Access). PHP nos
brinda dos funciones para codificar la información en base64, tales funciones son base64_encode() y
base64_decode().
Ejemplo:
<?
$dsn="php";
$user="";
$password="";
$conexion=odbc_connect($dsn,$user,$password);
$arch=fopen($archivo,'rb');
$lectura=fread($arch,2000000);
$imagen64=base64_encode($lectura);
$query="insert into imagen (imagen) values ('".$imagen64."')";
$lectura=odbc_exec($conexion,$query);
odbc_close($conexion);
?>
En el ejemplo podemos ver tres etapas bien diferenciadas, la primera abre la conexión a la base de
datos (en nuestro caso una base de datos ODBC), la segunda parte lee el archivo temporal y
codificamos su contenido para pasar a la tercera parte donde armamos el query y lo almacenamos en el
52
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
campo imagen la tabla imagen.
Pasos para recuperar una imagen:
En este caso debemos contar con dos scripts:
Script que pide la imagen
Este script será el encargado de seleccionar la imagen que queremos mostrar y hará el llamado al
segundo script, que es el que se encarga de mostrar los datos.
El llamado a la imagen se hará de la misma forma con la trabajamos las imágenes a lo largo de este
capítulo.
<img src="imagen.php">
Podemos pasar los datos de dos formas: la primera es pasar como parámetro el registro de la tabla que
contiene la imagen al script que muestra los datos, una vez dentro del script buscamos los datos en la
base y después los mostramos por pantalla. La segunda consiste en pasar como parámetro el campo
que contiene los datos y luego simplemente mostrarlos. La segunda forma puede causar que Netscape
no muestre los datos y en Internet Explorer si, por lo tanto es recomendable leer y mostrar los datos
dentro del segundo script.
La diferencia entre este script y el script que veíamos con los gráficos dinámicos es que en gráficos
dinámicos hacemos los llamados a funciones gráficas y en la imagen recuperadas desde base de datos
solamente mostramos el contenido del archivo.
Script que muestra los datos
Este script puede recibir como parámetro un Id de registro o los datos a mostrar. Para ambos casos lo
que tenemos que tener en cuenta es que la primer salida por pantalla que se haga debe ser el siguiente
comando:
Header("Content-type: Image/jpeg");
Después de hacer esta salida podemos sacar por pantalla los datos de la imagen (si fueron enviados
como parámetro) o leer los datos desde la base y luego enviar por pantalla los datos leídos. Hay que
aclarar que se pueden ejecutar líneas de código anteriores a la línea de header(), pero siempre y
cuando no saquen cosas por pantalla y que de esa forma cambien el tipo mime del archivo.
Hay que recordar que comentábamos mas temprano que había que codificar el contenido del archivo
para evitar posibles inconvenientes, pues bien antes de sacar por pantalla los datos debemos
decodificarlos utilizando la función base64_decode().
Ejemplo:
<?
$dsn="php";
$user="";
$password="";
$conexion=odbc_connect($dsn,$user,$password);
$query="select imagen from imagen where Id=$datos";
$lectura=odbc_exec($conexion,$query);
odbc_fetch_into($lectura,&$row);
Header("Content-type: Image/jpeg");
echo base64_decode($row[0]);
?>
En este ejemplo podemos ver que en la variable $datos recibo el Id del registro de la tabla imagen, lo
leo y luego envío por pantalla a través de la función echo (previamente decodificado).
El ejemplo los hago sobre una base de datos ODBC.
53
Universidad de Mendoza
Teleinformática I – Acceso a base de datos MySQL
Finalmente podemos comentar que el documento hace referencia en algunos puntos al formato JPEG,
pero en realidad se puede hacer perfectamente con otros formatos gráficos, incluso se pueden guardar
archivos de texto o binarios de cualquier formato, indudablemente que el tipo de tratamiento que le
hagamos al archivo dependerá del formato.
54
Universidad de Mendoza
Teleinformática I – Sesiones
Sesiones
Una sesión en PHP permite mantener información dentro de un sitio sin necesidad de tener que
moverla forzadamente de una página a otra. Esto nos permite diseñar sitios con menos código fuente,
de una forma más ordenada, además permite configurar ciertos aspectos del sitio tales como
apariencia, funcionalidades, etc. que de otra forma sería muy complicado.
El manejo de sesiones en PHP fue agregado en la versión 4 de PHP, y es similar al que se hacía con las
PHPLIB en la versión 3.
Una sesión se crea cuando ingresamos al sitio y finaliza cuando se especifique explícitamente, cuando
se abandona el sitio, o cuando cerramos el navegador. Mientras la sesión esté activa podremos visitar
una y otra vez las páginas y las variables de sesión mantendrán sus valores.
A cada usuario que ingresa a nuestro sitio se le asigna un número de sesión único.
Existen dos formas de propagar las variables de sesión con PHP, la primera es a través de cookies, la
segunda es embeber las variables en la URL. El primer método es más efectivo y transparente, pero el
hecho de trasladarse como cookie genera desconfianza en un sector de usuarios que no están
dispuestos a aceptar cookies en sus navegadores.
Existen dos parámetros de configuración de PHP que me harán determinar como se propagan las
variables de sesión. Estos parámetros son track_vars y register_globals.
Si se activó el parámetro track_vars y desactivó el parámetro register_globals se podrá escribir y leer
datos en el arreglo asociativo $HTTP_SESSION_VARS.
Ejemplo:
<?
session_register(“dato”);
$HTTP_SESSION_VARS[‘dato’]++;
?>
Si el parámetro register_globals está habilitado y track_vars desabilitado entonces las variables se
podrán acceder directamente como lo hacemos con variables comunes.
Ejemplo:
<?
session_register(“dato”);
$dato++;
?>
En el caso que estén los dos parámetros se hayan activado entonces se podrá acceder indistintamente
de una forma u otra.
Funciones
session_start
Inicia una nueva sesión, o continua una sesión basada en el número de sesión que fue pasado como
parámetro desde una página anterior.
55
Universidad de Mendoza
Teleinformática I – Sesiones
bool session_start ()
Esta función devuelve siempre verdadero.
Hay que tener cuidado cuando se ejecuta esta función ya que hay que hacerlo antes de enviar algún
dato al navegador (incluso antes de enviar el tag <HTML>). Por lo general se recomienda ejecutar la
función en primer lugar.
Ejemplo
<?session_start();?>
<HTML>
<BODY>
…
session_destroy
Destruye todos los datos asociados a una sesión.
bool session_destroy ()
session_name
Recupera o asigna el nombre a una sesión.
string session_name ([string nombre])
Si quisiéramos recuperar cuál es el nombre de la sesión actual entonces debemos llamar a la función
session_name sin pasarle parámetros. En caso de querer asignar un nuevo nombre de sesión a la sesión
actual debemos especificarlo como parámetro de la función.
El nombre de sesión referencia al id de sesión que viaja como cookie o como parte de la URL. Debe
contener solamente caracteres alfanuméricos.
Ejemplo:
<?
$viejoNombre=session_name(“sesionprueba”);
echo $viejoNombre;
?>
En este ejemplo se almacena en la variable $viejoNombre el nombre original de la sesión y a
continuación le asigna un nuevo nombre.
session_save_path
Recupera o asigna el directorio de trabajo de la sesión.
string session_save_path ([string ruta])
Los datos de sesión se almacenan en el servidor en un directorio predeterminado, de esta forma
podemos asignarle a cada sesión o grupo de sesiones un directorio de trabajo en particular.
Si quisiéramos recuperar cuál es el directorio de trabajo de la sesión actual entonces debemos llamar a
la función session_save_path sin pasarle parámetros. En caso de querer asignar un nuevo directorio de
trabajo a la sesión actual debemos especificarlo como parámetro de la función.
session_id
Recupera o asigna el id de la sesión.
string session_id ([string id])
56
Universidad de Mendoza
Teleinformática I – Sesiones
Si quisiéramos recuperar cuál es el id de la sesión actual entonces debemos llamar a la función
session_id sin pasarle parámetros. En caso de querer asignar un nuevo id a la sesión actual entonces
debemos especificarlo como parámetro de la función.
session_register
Registra una o más variables en la sesión actual.
bool session_register (mixed name [, mixed ...])
El parámetro que recibe es un string conteniendo el nombre de la variable, o puede ser un arreglo, si el
parámetro es un arreglo registrara los nombres de cada un de los elementos del arreglo.
session_unregister
Elimina una variable de la sesión (deja de estar registrada).
bool session_unregister (string name)
Esta función retorna verdadero si se ejecuta bien la función
session_unset
Elimina todas las variables de sesión que fueron previamente registradas.
void session_unset ()
session_is_registered
Verifica si hay una variable de sesión registrada.
bool session_is_registered (string nombre)
Esta función permite averiguar si ya hay una variable nombre registrada en la sesión. Devolverá
verdadero si ya fue registrada y falso si no esta registrada.
57
Universidad de Mendoza
Teleinformática I – Indice
58
Descargar