Curso de PHP IV
1.- Sesiones
1.1.- ¿Qué son las sesiones?
De acuerdo al manual de PHP:
Las sesiones en PHP constituyen el método para preservar ciertos datos a los largo de accesos sucesivos.
A cada visitante le es asignado un id único, llamado id de sesión. Este id es guardado en un cookie en el lado del cliente o se propaga en la URL.
El soporte de sesiones permite registrar un número arbitrario de variables que se preservan a lo largo de sucesivas peticiones. Cuando un visitante accede al sitio, PHP le asigna automáticamente (si session.auto_start esta en 1) o a petición (a través de la instrucción session_start() o implícitamente a través de session_register()).
1.2.- ¿Ahora, cómo se utilizan?
1.2.1.- Configuración de php.ini
La verdad, el uso de sesiones es muy sencillo. El principal problema radica en la configuración del php.ini.
Como ya se ha señalado, el id de la sesión se almacena en el cliente; ahora, el contenido de las variables debe guardarse en el lado del servidor. El método por defecto es almacenarlas en un archivo, aunque si así se desea, se puede usar otro método, como almacenarlas las sesiones en base de datos.
Entonces, se debe definir en que parte del servidor almacenaremos las sesiones. Por defecto, la configuración de php tiene el path /tmp, que es válido para linux, pero no para windows. Entonces, deberemos configurar el php.ini para que apunte a un directorio definido por nosotros; uno adecuado sería el directorio de temporales de windows.
Para Windows 95 y derivados
session.save_path = c:/windows/temp
para Windows NT y derivados
session.save_path = c:/winnt/temp
1.2.2.- Funcionalidad básica
Un ejemplo sencillo de trabajo con sesiones sería el siguiente
- session_start();
- // Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
- if (!isset($HTTP_SESSION_VARS['count'])) {
- $HTTP_SESSION_VARS['count'] = 0;
- } else {
- $HTTP_SESSION_VARS['count']++;
- }
- echo "Esta es la vez número ".$HTTP_SESSION_VARS['count']." que accedes a esta página";
- if ($HTTP_SESSION_VARS['count'] > 10) {
- echo "<br>¿No crees que está bueno, ya?";
- }
Como vemos, se inicia la sesión con la instrucción session_start(). Para escribir o recoger una variable, se debe usar el array $HTTP_SESSION_VARS si estamos en una versión de PHP inferior a 4.0.6 o $_SESSION, en una superior.Si ocupamos la primera forma, debemos tener cuidado de registrar la variable como global si la utilizamos dentro de una función.
En nuestro ejemplo, la variable es $HTTP_SESSION_VARS['count'], la cual incrementamos cada vez que se entra a la página. Incluso, si cambiamos a otra página y volvemos a esta, la variable se mantendrá, mientras mantengamos el session_start() al inicio.
Nota: Puede que la sesión se mantenga aunque se acceda a una página intermedia. Esto, si se utiliza el método de registro de id por cookies.
1.2.3.- Ejemplo de registro de usuario
PHP
Archivo: registro_usuario.php
- include_once("HTML/Template/IT.php");
- session_start();
- $tpl = new HTML_Template_IT("./");
- $tpl->loadTemplateFile("registro_usuario.html");
- $login = &$HTTP_SESSION_VARS['login'];
- if ($HTTP_GET_VARS["usuario"]) {
- $login = $HTTP_GET_VARS["usuario"];
- }
- if ($HTTP_GET_VARS["logout"]) {
- $tpl->touchBlock("logout");
- session_unset();
- session_destroy();
- } elseif (!isset($login)) {
- $tpl->touchBlock("registro");
- } else {
- $tpl->setCurrentBlock("registrado");
- $tpl->setVariable("LOGIN", $login);
- $tpl->parseCurrentBlock();
- }
- $tpl->parse();
- $tpl->show();
HTML
Archivo: registro_usuario.html
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
- <HTML>
- <HEAD>
- <link href="personas1.css" rel="stylesheet" type="text/css">
- <TITLE> Registro de usuario</TITLE>
- <META NAME="Generator" CONTENT="EditPlus">
- <META NAME="Author" CONTENT="">
- <META NAME="Keywords" CONTENT="">
- <META NAME="Description" CONTENT="">
- </HEAD>
- <BODY>
- <h1>Registro de usuario</h1>
- <!-- BEGIN registro -->
- <FORM METHOD=GET ACTION="">
- Login: <INPUT TYPE="text" NAME="usuario">
- <INPUT TYPE="submit"></FORM>
- <!-- END registro -->
- <!-- BEGIN logout -->
- Usted ha salido exitosamente del sistema<p>
- <a href="registro_usuario.php">Presione aquí para volver</a>
- <!-- END logout -->
- <!-- BEGIN registrado -->
- Bienvenido, usuario {LOGIN}
- <p><a href="registro_usuario.php?logout=1">Logout</a>
- <!-- END registrado -->
- </BODY>
- </HTML>
Como se ve, se ingresa la variable usuario enviada por el formulario a la variable de sesión $login, referencia a la variable de sesión $HTTP_SESSION_VARS['login']. Si se envía por GET la variable logout, destruimos la sesión.
2.- PHP y XML
2.1.- ¿Qué es XML?
Según la definición de W3C (la compañía encargada de crear los estándares para Internet):
Los documentos XML están compuestos de unidades de almacenamiento, denominadas entidades, que contienen datos datos procesados y no procesados. Los datos procesados están compuestos de caractéres, algunos de los cuales constituyen datos de caracteres, en tanto que otros conforman marcado. El marcado describe la estructura lógica y de almacenamiento. XML provee de mecanismos para imponer restricciones a la estructura lógica y de almacenamiento.
Un módulo de software llamado procesador de XML es usado para leer documentos XML y proveer acceso a su contenido y estructura. Se asume que el procesador XML trabaja para una aplicación.
En términos simples, un documento XML es similar a uno HTML, sólo que los tag utilizados pueden ser elegidos libremente, con algunas restricciones en relación al HTML.
Ejemplo de documento XML
- <?xml version='1.0' encoding='ISO-8859-1'?>
- <empresas>
- <empresa>
- <nombre>Salmones Inc.</nombre>
- <rubro>Alimentación</rubro>
- <telefono>222222</telefono>
- <sucursales>
- <sucursal id="san_pedro">San Pedro</sucursal>
- <sucursal id="concepcion">Concepcion</sucursal>
- <sucursal id="buenos_aires">Buenos Aires</sucursal>
- </sucursales>
- </empresa>
- <empresa>
- <nombre>Computadores S.A.</nombre>
- <rubro>Computación</rubro>
- <telefono>33333</telefono>
- <sucursales />
- </empresa>
- </empresas>
Como se ve, la sintaxis es muy similar a la de HTML. Debe destacarse el uso de la cabecera, la cual señala que la versión de XML a utilizar es la 1 (la única existente, hasta el momento), y el tipo de codificación de carácteres (en nuestro caso, la ISO-8859-1, ampliamente utilizada)
Cabe notar que en un documento XML todos los tags deben cerrarse y, si se define cual es su estructura a través de un documento DTD, deben encontrarse todos los tags que en el se especifican. Por ello, en la empresa de computación hemos debido incluir el tag de sucursales, aunque no contenga nada. La notación
2.2.- Formas de procesar XML
Los procesadores XML se dividen en dos tipos: SAX y DOM.
2.2.1.- SAX

Los procesadores SAX navegan en forma secuencial a través del archivo, generando callbacks a funciones determinadas por el desarrollador ante cada evento, como la apertura de un tag o su cierre. Su ventaja es que ocupan muy poca memoria y son muy rápidos. La desventaja es que todo el trabajo de determinar la estructura del archivo (ver que tag se incluye dentro de otro), corre por cuenta del desarrollador.
2.2.2.- DOM

Los procesadores DOM, en cambio, guardan toda la información de estructura y contenido en memoria. Su ventaja es que es muy fácil navegar a través del XML, subiendo o bajando a través de los nodos, pudiendo recopilar información de muchos tag en una sola instrucción. El problema radica en que son más lentos y que, dependiendo del tamaño del documento, almacenar la estructura completa puede requerir mucha memoria.
2.3.- PHP y XML vía DOM
Para nuestro curso, utilizaremos el método DOM para navegar a través de nuestro documento XML. Para ello, utilizaremos la librería Php-Xpath, la cual se puede obtener en http://sourceforge.net/projects/phpxpath/.
Esta librería utiliza el lenguaje Xpath para acceder al archivo XML, el cual representa al documento Xml como una estructura de archivos, siendo cada tag un 'archivo' dentro del sistema. Entre las querys más comunes tenemos
- //empresa: Devuelve todos los tag con nombre empresa
- /empresas[1]/empresa[1]: Devuelve el primer tag empresa que se encuentra dentro del primer tag empresas
- //sucursal[@id="san_pedro"] : Devuelve el o los tag sucursal que tengan como un atributo id igual a "san_pedro"
- /empresas/*: Devuelve todos los tag que son hijos de empresas
- //rubro | //telefono: Devuelte todos los tag rubro, más los telefono
Para probar el uso de Xpath, podemos utilizar el siguiente código, que tras una consulta, nos muestra los tags o nodos encontrados, sus atributos y cdata. El archivo XML a utilizar será el mismo que utilizamos de ejemplo, empresas.xml
Pueden encontrar este script en línea aquí
Archivo: xml.php
- <html>
- <head>
- <style>
- .nodo {
- border:1px solid black;
- background:#eee;
- margin:3px;
- padding:5px;
- }
- </style>
- </head>
- <body>
- El documento XML es:
- <div style='border:1px solid black; padding:5px'>
- // MUESTRO EL DOCUMENTO EN PANTALLA
- $file_xml="ejemplo.xml";
- $fuente=file($file_xml);
- foreach($fuente as $linea) {
- echo "<br>".htmlentities($linea);
- }
- </div>
- <FORM METHOD=GET ACTION="">
- Define tu consulta:<INPUT TYPE="text" NAME="consulta" VALUE=" echo $HTTP_GET_VARS["consulta"]">
- </FORM>
- include 'XPath.class.php';
- $xml = new XPath();
- $xml->importFromFile($file_xml);
- if (isset($HTTP_GET_VARS["consulta"])) {
- $consulta = $HTTP_GET_VARS["consulta"];
- $nodos = $xml->match($consulta);
- echo "<p>Tu consulta fue: <b>$consulta</b></p>";
- if ($nodos) {
- echo "<p>Tu consulta fue exitosa y arrojo los siguiente nodos:</p>";
- foreach($nodos as $nodo) {
- echo "<div class='nodo'>";
- echo "<p>Path:<b>$nodo</b></p>";
- $cdata = trim($xml->getData($nodo));
- if ($cdata) {
- echo "<p>Cdata:<b>".$xml->getData($nodo)."</b></p>";
- } else {
- echo "<p>No tiene Cdata</p>";
- }
- $atributos = $xml->getAttributes($nodo);
- if ($atributos) {
- echo "<p>Se encontraron los siguientes atributos:</p><ul>";
- foreach($atributos as $nombre => $valor) {
- echo "<li>$nombre:$valor</li>";
- }
- echo "</ul>";
- } else {
- echo "<p>No tiene atributos</p>";
- }
- echo "</div>";
- }
- } else {
- echo "No se obtuvieron nodos";
- }
- }
- 9909 lecturas

Hola a todos.
Estoy iniciando en la programacion de PHP por medio de Clases, y he abierto paginas php a atraves de la tecnologia Ajax (sin tener que recargar toda la pagina) sin embargo la funcion que utiliz Ajax.open, exige una ruta url. En este caso me gustaria utilizar las funciones de la clase (que se encuentran en la pagina) para obtener los resultados. ¿Es posible utilizar ajax para obtener info. de una clase, es decir pasarle el objeto->funcion al ajax en lugar de utilizra una url?
Gracias
.nodo {
border:1px solid black;
background:#eee;
margin:3px;
padding:5px;
}
Para más información sobre este ejemplo, dirigirse a Curso de PHP, par
Muy Buenas, Me muestra el siguiente error en la linea 18
Notice: Use of undefined constant XML - assumed 'XML' in D:\wwwroot\eparcel\admin\probar\cdata.php on line 18
es en la sentencia define (XML,"ejemplo.xml");
Por favor ayudenme con este error necesito ller un arcuivo XML con caracteres especiales del CDATA
Esperando Pronta syuda
Muchas Gracias.
Saludos Cordiales.
Ups, disculpa.
Debe decir
define ("XML","ejemplo.xml")no
define (XML,"ejemplo.xml")Hola a todos..
Alguien podria por favor ayudarme, estoy desesperada, necesito realizar una consulta de un documento xml utilizando PHP, utilice el ejemplo pero me sale un error en la linea con la sentencia:
Define tu consulta:
">Y el error dice que el index consulta no esta definida o algo asi, especificamente el error esta en: $HTTP_GET_VARS["consulta"] porque en lugar de eso le cambio por "" y no sale el error..
Porfa ayudenme..
Gracias.
F. Desesperada
hola hola
tengo un problema con las sesiones en mi pagina, ya configure el archivo php.ini poniendo la direccion correspondiente y no funciono asi k me recomendaron poner el siguiente codigo al principio de la pagina
<?php session_save_path("c:/winnt/temp ");
y al intentar iniciar sesin me marca estos errores
Warning: open(c:/winnt/temp \sess_b0b9befa67d49803313c456843b07b02, O_RDWR) failed: m (2) in c:\inetpub\wwwroot\bancomext.pachuca\login2.php on line 2
Warning: open(c:/winnt/temp \sess_b0b9befa67d49803313c456843b07b02, O_RDWR) failed: m (2) in Unknown on line 0
Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (c:/winnt/temp ) in Unknown on line 0
alguien me puede ayudar porfabor!!!!!!
hola estoy desesperada nunca he usado php y ahora en mi primer trabajo me piden hacer paginas utilizando php en el editor de dreamweaver en home site y no se ni por donde empezar.
quisiera saber como es que se mandan llamar las paginas con la extension .php porque no se
porfavor ayudenme
hola a todos es la primera vez que voy a utilizar php en dreamweaber en el editor de home site y no se como definir que quiero hacer un nuevo documento pero php por favor diganme como hacer paginas utilizando php y como es que se mandan llamar para que se ejecuten porque cuando inteno ejecutar alguna no me la muestra como pagina de internet
auxilio!!!!!!
Enviar un comentario nuevo