Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2006, 12:07
fids
 
Fecha de Ingreso: abril-2006
Mensajes: 4
Antigüedad: 18 años, 1 mes
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