Comunidad de diseño web y desarrollo en internet online

confilcto header Vs class en php Ayuda!

Citar            
MensajeEscrito el 03 Ago 2007 03:20 pm
hola Clabers

lo que tengo es una clase que captura un xml y lo pasa a un array, hasta ahy todo normal

el caso es que yo le envio datos a una pagina php y dentro de ella llamo esa clase para capturar el archivo y luego lo modifico y algunas cosas mas, por ultimo en la ultima linea tengo un

header("Location: ../listado.php?msg=".$msg);

que deberia devolver al php y ya

la cuestion es que me dice

Código :

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\modelo\xml_class.php:33) in C:\xampp\htdocs\modelo\archivo.php on line 41


aca les envio la clase para que vean que hace (tambien les puede servir)

Código :

<?
 class xml {
    var $matriz = array();
    var $resultado;
    var $informacion;
    function xml($contenido) {
            $this->resultado = xml_parser_create ();
            xml_set_object($this->resultado,$this);
            xml_set_element_handler($this->resultado, "abrir", "cerrar");
            xml_set_character_data_handler($this->resultado, "info");
            $this->informacion = xml_parse($this->resultado,$contenido);
            xml_parser_free($this->resultado);
            return $this->matriz;
    }
    function abrir($parser, $nombre, $atributos) {
        $etiqueta = array("nombre"=>$nombre,"atributos"=>$atributos);
        array_push($this->matriz,$etiqueta);
    }
    function info($parser, $etiqueta_info) {
        if(trim($etiqueta_info)) {
            if(isset($this->matriz[count($this->matriz)-1]['info'])) {
               $this->matriz[count($this->matriz)-1]['info'] .= $etiqueta_info;
            }else {
               $this->matriz[count($this->matriz)-1]['info'] = $etiqueta_info;
            }
        }
    }
    function cerrar($parser, $nombre) {
       $this->matriz[count($this->matriz)-2]['hijo'][] = $this->matriz[count($this->matriz)-1];
        array_pop($this->matriz);
    }
 }
?>

alguna pista de donde rayos esta el error?

ha! en el archivo padre no hego ningun echo, ni print, ni nada de eso!

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 03 Ago 2007 05:30 pm
EL header siempre debe de ir antes de arrojar cualquier salida. Un echo es una salida.

Esto da error:

Código :

echo "hola";
header("Location: index.php");


Esto no da error:

Código :

header("Location: index.php");
echo "hola";


saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 04 Ago 2007 11:00 pm

Dano escribió:

Esto no da error:

Código :

header("Location: index.php");
echo "hola";


Cierto no da error, pero es riesgoso por lo que es recomendable colocar un exit() luego de un header con Location.

jpcw toma el ejemplo que te da Dano, y revisa que el archivo donde tengas la clase no tenga espacios innecesarios(espacios en blanco, salto de lineas, etc.) , con esto me refiero a que revises si tienes algo antes o despues de las etiquetas <? y ?>.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 05 Ago 2007 02:36 am
Obviamente después de un location, no tiene sentido poner un echo, la idea era orientar al amigo con el uso de header(para que viera lo problemático que es poner un output de algo antes de usar el header.

Yo no uso exit, cuando uso Location, se me hace redundante. Obviamente en mi lógica de desarrollo, cuando implemento Location, garantizo no hacer ningún output.

Saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 05 Ago 2007 04:18 pm
si comprendo lo que dicen, pero si quieren hagan la prueba, tomen la clase y guardenla como xml.class.php
y luego desde otro archivo en limpio coloquen esto:

Código :

<?php
require_once("xml.class.php");
header("Location: index.php");
?>


y veran que da error

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  



Ultima edición por jpcw el 06 Ago 2007 02:36 pm, editado 1 vez

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 05 Ago 2007 05:28 pm

Código :

eader("Location: index.php");


header, lleva h inicial, no se si sea eso :P

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 05 Ago 2007 08:17 pm

jpcw escribió:

si comprendo lo que dicen, pero si quieren hagan la prueba, tomen la clase y guardenla como xml.class.php
y luego desde otro archivo en limpio coloquen esto:

Código :

<?php
require_once("xml.class.php");
eader("Location: index.php");
?>


y veran que da error


Insisto, si te da el error que dices con eso solamente, revisa el archivo xml.class.php y verifica que antes y despues de la etiquetas <? y ?> respectivamente no haya nada. No puedo haber ningun tipo de espacio en blanco, que es lo que sospecho que tienes.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 06 Ago 2007 02:12 pm
Ten encuenta que antes de la funcion header() no debe haber ninguna salida a pantalla (ya sea texto, espacios en blanco, etc)

Revisa eso... ya que deberia funcionar

Sino de ultima... siempre esta el Javascritp q nos ayuda

Código :

<?php
require_once("xml.class.php");
?>
<script>
   window.location.href="index.php";
</script>



Saludos

Por 3w

145 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Ago 2007 02:41 pm
bueno, despues de tanto intentar no logro encontrar la respuesta!!!!

Gracias A los BOFH, DANO me comi la h en el post pero no en el codigo creeme, Maikel el codigo que ves posteado en la parte superior es el de la clase, esta exactamente igual y como veras no teine ni un salto de linea volando y como dices tu 3w toco recurrir a JS para saltar ese problemilla.

el caso es que aun no puedo dormir :sueno: por este error, y eso que ye entre el proyecto XD

Por jpcw

Claber

1715 de clabLevel

1 tutorial

Genero:Masculino  

AlgoritmicBrainDesigner

firefox
Citar            
MensajeEscrito el 07 Ago 2007 05:12 am
por cierto antes de la etiqueta

Código :

<?php
no debe haber ningún espacio pues se considera una salida (output).

¡¡Y SORPRESAAA!! comúnmente ciertos editores arrojan ciertos inocentes pero molestos caracteres ocultos, siempre antes de la etiqueta mencionada, sobre todo cuando se cambia de codificación (casi siempre la cambio de ANSI a UTF8 ) las maneras en que he podido sacarlos es abriendo el codigo php en aptana (que tambien reconoce php) o amaya, donde simplemente le elimino el jodidito ?>>

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 07 Ago 2007 11:50 pm
pues copie y pegue la clase, y el archivo de ejemplo y nada, no puedo reproducir el error, la redirección se hace perfectamente.
Use, edit plus 2.21, como editor de texto, con php 4.4.4, sobre apache 2.0.X, en localhost (WIN xp)

Por cierto, una pequeña duda, si el archivo se llama xml.class.php, la clase, que no debe de llamarse "xml.class", o (Segun parece acepta ambas; por las pruebas que hice)

Por rolv

Claber

2000 de clabLevel

3 tutoriales

 

firefox
Citar            
MensajeEscrito el 08 Ago 2007 11:18 pm

ramiro_olvera escribió:

Por cierto, una pequeña duda, si el archivo se llama xml.class.php, la clase, que no debe de llamarse "xml.class", o (Segun parece acepta ambas; por las pruebas que hice)


En php es independiente como llames el archivo donde tienes la clase y puedes tener más de una clase si asi lo deseas. Aunque no recomiendo ninguna de las 2 opciones "liberales", es mejor establecer un estandar propio para ello.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.