Foros del Web » Programando para Internet » PHP »

Problema con Sesiones o con SimpleXML ???

Estas en el tema de Problema con Sesiones o con SimpleXML ??? en el foro de PHP en Foros del Web. 10:22 AM 4/8/2006 Señores, tengan un buen dia. Me gustaria saber que es lo que pasa con mi pagina, que estoy haciendo en Php 5.0. ...
  #1 (permalink)  
Antiguo 08/04/2006, 12:07
 
Fecha de Ingreso: abril-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Problema con Sesiones o con SimpleXML ???

10:22 AM 4/8/2006

Señores, tengan un buen dia.
Me gustaria saber que es lo que pasa con mi pagina, que estoy haciendo en Php 5.0.

Estoy trabajando con:
* Apache 2.0.54
* Php 5.0

tanto en Windows como en Linux...

Mi problema surge cuando trabajo con sesiones (aunque dudo que sea realmente por eso) pues me salen los siguientes errores...

Warning: session_start() [function.session-start]: Node no longer exists in <path>\modules\system\menubar.php on line 1
( este error me sale 32 veces seguidas )

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at <path>\modules\system\menubar.php:1) in <path>\modules\system\menubar.php on line 1

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at <path>\modules\system\menubar.php:1) in <path>\modules\system\menubar.php on line 1

En otras paginas, me sale este error agregado al final de la web

Warning: Unknown: Node no longer exists in Unknown on line 0

//////////////////////////////////////////////////

Revise por todo mi proyecto algunos funciones "echo" que pudieran estar saliendo antes del session_start(), pero aun asi seguia el mismo rollo...

De repente.... (de ahi que pienso que no sean exactamente las sesiones)

Me di con la sorpresa que este error NO salia, siempre y cuando, dejo de llamar a una funcion, que me permite, recuperar un archivo XML y retornarlo como un array...

Pero....... ahi la otra gran duda....

Siempre y cuando esa misma funcion sea llamada desde un archivo particular, pues esa funcion, la llamo desde otros archivos incluidos en la pagina...

Confundi ??? Lo explicare mejor, con un escenario

//////////////////////////////////////////////////////////

[Archivos]
<path>/lib/xmlhelper.php (conteniene la funcion OpenXmlRecordset)
<path>/web/index.php (pagina principal)
<path>/modules/encuesta.php (modulo encargado de las encuestas)
<path>/modules/avisos.php (modulo encargado de los avisos)
<path>/modules/usuario.php (modulo encargado de la info del user)
<path>/modules/system/menubar.php (modulo que muestra el menu)
<path>/xml/datos.xml (xml que cargo desde OpenXmlRecordset)
<path>/xml/avisos.xml (xml que cargo desde OpenXmlRecordset)
<path>/xml/encuesta.xml (xml que cargo desde OpenXmlRecordset)

[Descripciones Clave]
* funcion OpenXmlRecordset -> me permite recuperar un archivo XML y retornalo como un array(), que en realidad es un recordset

* <path>/web/index.php -> contiene las sgtes lineas de inclusion

<?php
include("../modules/system/menubar.php");
include("../modules/encuesta.php");
include("../modules/usuario.php");
include("../modules/avisos.php");
include("../ll/xmlhelper.php");
?>

* <path>/modules/system/menubar.php -> tiene en su codigo:
1:<?php
2:session_star();
3:?>
4,5,...: codigo html y php embebido

* Tanto en encuesta.php, avisos.php, usuario.php y menubar.php uso el session_star(), de lo contrario no me muestra los datos que quiero en cada archivo php independiente.

* La funcion OpenXmlRecordset es llamada desde encuesta.php, usuario.php y avisos.php

* Todos Los archivos XML, tienen la misma estructura, pero con diferentes datos. su formato es el siguiente:

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<recordset>
<field name="{campo de la tabla}">{valor del campo}</field>
</recordset>
</root>

[Errores]
Cuando cargo index.php, me salen los errores (warnings para ser mas exactos)antes descritos, pero como se dan cuenta, en la linea 1 de menubar.php

[Intentos de Solucion]
* A todos esos archivos incluidos los he revisado y ninguno tiene una funcion echo que pueda adelantarse al session_star() y he revisado muy bien, que no haya nada antes o despues del <?php ?> pero sigue con lo mismo

* Como me salian 32 veces el error de "No Longer no se que..." casualmente verifique mi Archivo XML datos.xml, y tenia 32 entradas. Oh Sorpresa... Por ahi venia el problema...

* Imagine que era un problema con los archivos xml que se cargaban desde la funcion OpenXmlRecordset, asi que deshabilite todas las llamadas a esa funcion... Oh Sorpresa, EL ERROR YA NO SALIA

* Contento y Frustrado, que pasa en realidad con la bendita funcion OpenXmlRecordset ???, decidi habilitar nuevamente las llamdas a esa funcion en todos los archivos que las llamaban menos en usuario.php. OH SORPRESA, NO HABIAN PROBLEMAS.

* Active el OpenXmlRecordset en usuario.php. WARNINGS por doquier

* Entre al Archivo datos.xml y borre 30 entradas. OH SORPRESA!!!, solo salian 2 Warnigs, de tipo "No Longer no se que...", los otros warnings que aludian a "Cannot send session cookie" y al "Cannot send session cache limiter" desaparecieron.

* Restableci las 32 entradas y seguia el problema...

* display_errors = Off -> De Maravilla, pero me asusta pensar que atras de eso hay cuchucientos mil warnigs...

[Duda PhpExistencial]

¿Porque me salen esos warnings en menubar.php si al parecer el problema esta en un archivo xml llamado desde usuario.php?

¿Porque salen los warnings justamente en un archivo xml, si todos tienen la misma estructura, y no salen warnings con los otros archivos xml?

¿Que tiene que ver el session_star() en todo esto?

¿Que tiene que ver el archivo datos.xml en todo esto, que de especial, tendria si tiene la misma estructura que los otros?

[Archivos Adjuntos]

datos.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<recordset>
<field name="code">43467598</field>
<field name="cic">1</field>
<field name="aul">2</field>
<field name="turn">T</field>
<field name="local">A</field>
<field name="ide">CNI</field>
<field name="apm">DEZA</field>
<field name="app">RIOS</field>
<field name="nombre">PATRICIA</field>
<field name="dia">30</field>
<field name="mes">03</field>
<field name="anio">1980</field>
<field name="tip">3</field>
<field name="doc">2</field>
<field name="sex">F</field>
<field name="egr">2004</field>
<field name="idc">3</field>
<field name="col">SIMON BOLVAR</field>
<field name="vecu">2</field>
<field name="otro">0</field>
<field name="finsc"></field>
<field name="fmatri"></field>
<field name="apo">NO ESPECIFICADO</field>
<field name="dir">JR AMAZONAS 1245</field>
<field name="telfd">999999</field>
<field name="telft"></field>
<field name="idp">1</field>
<field name="pro">NONE</field>
<field name="idd">1</field>
<field name="dis">NONE</field>
<field name="mer">0</field>
<field name="email"></field>
</recordset>
</root>

* cada <field> la considero como una "entrada"

avisos.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<recordset>
<field name="titulo">Close Testing</field>
<field name="content">I finish the test to class aviso!</field>
<field name="id_user"></field>
<field name="link"></field>
</recordset>
<recordset>
<field name="titulo">Resultados</field>
<field name="content">Relación de resultados del examen</field>
<field name="id_user"></field>
<field name="link">resultados.php</field>
</recordset>
</root>

* [Pregunta aparte: Como hago para que me muestre la tilde y no esa cochinada en la palabra Relación ????]

encuesta.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<recordset>
<field name="id_encuesta">1</field>
<field name="pregunta">¿Que es lo mas complicado de resolver en un examen?</field>
<field name="fecha">2005-10-03 10:21:56-05</field>
<field name="tipo">0</field>
</recordset>
</root>


Y lo que todos esperaban !!!

//
// Funcion que permite obtener un Recordset a partir de un Archivo XML
// Nota: Funciona siempre y cuando tenga un formato predeterminado
//
function OpenXmlRecordset($strFilePath)
{
// Verificamos si Existe el Archivo XML

if (file_exists($strFilePath))
{
// Cargamos el Archivo
$xml = simplexml_load_file($strFilePath);

// Declaramos las variables a utilizare
$key = array();
$value = array();
$rec = array();

// Recoriddo por todos los recordsets
foreach($xml->recordset as $rst)
{
// Recorrido por todos los campos del recordset
foreach($rst->field as $attr)
{
//echo $attr["name"] . '->' . $attr . '<br>';
array_push($key,$attr["name"]);
array_push($value,$attr);
}
array_push($rec,array_combine($key,$value));
}

// Retornamos el Array Obtenido
return $rec;
}
else
{
return false; // Archivo No Encontrado
}
}


Espero Sinceramente, me ayuden !!!!!!!!! porque ME DEMORE 1 &&%%$# HORA PARA ESCRIBIR ESTo !!!
;)
Atte
>>Fids

11:32 AM 4/8/2006
  #2 (permalink)  
Antiguo 08/04/2006, 15:13
Avatar de bistoco  
Fecha de Ingreso: marzo-2006
Mensajes: 141
Antigüedad: 18 años, 1 mes
Puntos: 0
no lei el post completo...pero kiero saber en ke parte del codigo pones el session_start() ...saludos

podrias postear una parte del codigo tambien...
__________________
Share what you know...learn what you don't :si:
  #3 (permalink)  
Antiguo 10/04/2006, 20:04
 
Fecha de Ingreso: abril-2006
Mensajes: 4
Antigüedad: 18 años
Puntos: 0
Ya Solucione el Problema
Al parecer es un bug de PHP 5.0, puesto que cuando asignamos a una variable de sesion, un objeto SimpleXmlElement, entonces, genera ese warning de "Node No Longer exists", aunque si lo guarda.

La soluciones a este molestoso warning pueden ser 2:

1. Setear session.autostart = 1 en php.ini

o bien

2. Forzar el tipo de dato del Nodo SimpleXML a (string), esto llevado a mi codigo de recuperacion XML, seria...

// Recorrido por todos los campos del recordset
foreach($rst->field as $attr)
{
//echo $attr["name"] . '->' . $attr . '<br>';
array_push($key,$attr["name"]);
// AQUI SE DEBE AGREGAR EL FORZADO DE TIPO
array_push($value,(string)$attr);
// FIN DEL FORZADO DE TIPOS

}array_push($rec,array_combine($key,$value));
}


Lo que quedaria es preguntarnos porque deja de salirnos esos warnings cuando seteamos la directiva de php session.autostart = 1, puesto que (digo yo) no debe haber diferencia alguna cuando llamamos a la funcion session_start() en cada pagina...

Por cierto, que les parecio el codigo para levantar xml ??? se puede mejorar ??? o no es buena idea guardar archivos xml y levantarlos en ves de conectarse y consultar a la base de datos ???
  #4 (permalink)  
Antiguo 28/11/2007, 11:28
Avatar de MmSTOP  
Fecha de Ingreso: febrero-2003
Ubicación: Madrid
Mensajes: 84
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Problema con Sesiones o con SimpleXML ???

Cita:
Iniciado por fids Ver Mensaje
Ya Solucione el Problema
Al parecer es un bug de PHP 5.0, puesto que cuando asignamos a una variable de sesion, un objeto SimpleXmlElement, entonces, genera ese warning de "Node No Longer exists", aunque si lo guarda.

La soluciones a este molestoso warning pueden ser 2:

1. Setear session.autostart = 1 en php.ini

o bien

2. Forzar el tipo de dato del Nodo SimpleXML a (string), esto llevado a mi codigo de recuperacion XML, seria...

// Recorrido por todos los campos del recordset
foreach($rst->field as $attr)
{
//echo $attr["name"] . '->' . $attr . '<br>';
array_push($key,$attr["name"]);
// AQUI SE DEBE AGREGAR EL FORZADO DE TIPO
array_push($value,(string)$attr);
// FIN DEL FORZADO DE TIPOS

}array_push($rec,array_combine($key,$value));
}


Lo que quedaria es preguntarnos porque deja de salirnos esos warnings cuando seteamos la directiva de php session.autostart = 1, puesto que (digo yo) no debe haber diferencia alguna cuando llamamos a la funcion session_start() en cada pagina...

Por cierto, que les parecio el codigo para levantar xml ??? se puede mejorar ??? o no es buena idea guardar archivos xml y levantarlos en ves de conectarse y consultar a la base de datos ???

joder menos mal que he visto tu mensaje y que hay gente que se preocupa aunque solucione un problema lo pone como lo ha hecho,, llevo dias con el dichoso error. Muchas Gracias
__________________
--------------------------------
Gracias a la gente de WWW.FOROSDELWEB.COM que se preocupa de ayudar a la gente novatilla!! me incluyo :D
  #5 (permalink)  
Antiguo 22/10/2013, 12:31
Avatar de Simon_Echecopar  
Fecha de Ingreso: marzo-2012
Mensajes: 96
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con Sesiones o con SimpleXML ???

Primero creo que seria revisar los espacios en blanco, despues todo lo demás
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:24.