Foros del Web » Programando para Internet » PHP »

problemas con header de php

Estas en el tema de problemas con header de php en el foro de PHP en Foros del Web. Hola! Hace tiempo que vuestro foro me sirve de gran ayuda para consultar dudas o resolver problemas. Ahora realmente tengo un problema. Ya he revisado ...
  #1 (permalink)  
Antiguo 07/04/2008, 08:25
 
Fecha de Ingreso: abril-2008
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
problemas con header de php

Hola!

Hace tiempo que vuestro foro me sirve de gran ayuda para consultar dudas o resolver problemas. Ahora realmente tengo un problema. Ya he revisado el foro de arriba a abajo y no encuentro la solución a mi problema. Es por eso que me he decidido a escribiros.

El problema es con el header de PHP. He mirado todos los problemas que puede dar, he modificado código (eliminar etiquetas HTML que haya anteriormente, eliminar espacios, etc, etc) pero me sigue sin redirigir a la página.

Tampoco entiendo a que se refieren cuando dicen que ya se han pasado unas cabeceras. ¿Cómo o mediante que orden se han pasado ya las cabeceras?

Os adjunto el código PHP, que cuando se ejecuta, no dan ningún error, tan solo no hace la redirección. y la dirección donde está ubicada la web

www.aseiba.org seccion contacto, alta cliente


Gracias!
  #2 (permalink)  
Antiguo 07/04/2008, 09:11
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 meses
Puntos: 5
Re: problemas con header de php

Ten en cuenta que si tu construyes tu página usando include de otros scripts, esos scripts que incluyas tampoco deben de devolver ninguna salida al navegador antes de lanzar header...

Y ten en cuenta tb que no sólo la función header da errores de headers already sent, si por ejemplo usas setcookie o session_start() habiendo enviado salida al navegador tb te dará ese error.

Solución revisar que no haya salida al navegador antes de header, setcookie session_start

O usar buffer de la página

Al inicio de la página

Código PHP:
<?
ob_start
();
?>
Y al final
Código PHP:
<?
ob_end_flush
();
?>
Y cuando digo al inicio de la página, me refiero a que si tienes la función header en un script que incluyes en tu página(con un include), no valdría con poner este código en ése script, sino que hay que ponerlo en el script principal y antes de cualquier cosa.

Lo digo porque a veces la gente se equivoca con eso...

Las cabeceras se envian automáticamente.

Pero no es ese el problema...

La cosa está básicamente en que si tu tienes alguna salida antes de una función que requiere modificar las cabeceras, esa salida, requiere también que se envien unas cabeceras...

Y como php interpreta línea a línea, si en la línea 1 encuentra que ha de mandar algo a la salida del navegador, pués entonces envia antes las cabeceras.

Si luego en la línea 5 le pides que modifique las cabeceras que ya ha enviado previamente, pues te da error.

Y la solución de usar el buffer, lo explica perfectamente, digamos que toda la salida al navegador se guarda en el buffer, sólo envia una vez las cabeceras que proceda y por tanto puede poner en la cabecera las peticions necesarias para redireccionar.

Más o menos es eso...

Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 07/04/2008 a las 09:27
  #3 (permalink)  
Antiguo 07/04/2008, 09:25
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 meses
Puntos: 5
Re: problemas con header de php

He duplicado mensaje sin querer, sorry...

Es que no sé por qué no tengo opción de borrar...

Salu2 ;)
__________________
[+]
[+]
  #4 (permalink)  
Antiguo 07/04/2008, 10:00
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 5 meses
Puntos: 11
Re: problemas con header de php

Hola rafamele,

Excelente comentario y muy completo te han hecho.

Suponte que tu programas una página web o una aplicación con php.

Cuando cualquier visitante llegue a tu web, ya sea con firefox, internet explorer, nestcape, etc, en fin, cualquier navegador, y escriba tu URL (el de tu pagina o sitio web), entonces se envía una petición desde tu navegador al servidor.

El servidor procesa la peitción, ejecuta el motor php para interpretar tus script y devuelve al navegador del visitante una respuesta.

Pues bien, "la respuesta" se envía (didácticamente hablando) en dos partes,

- Primero las cabeceras

- Luego texto html, javascript, css, etc, todo lo que conponga tu web (el resultado de la ejecución del php tambien que es en html).

Se debe respetar ese orden si o si. Si ya has enviado algun caracter html o simplemente un espacio, ya no se pueden enviar cabeceras.

Desde php las cabeceras se envían con la función header().

Si haces un header() depsues que ya enviaste algun caractes o espacio al navegador te da el error.

Se entiende?

Ahora... si quieres olvidarte del problema y hacer salidas html y al final hacer un header() sin errores entonces hay una forma:


En el comienzo de tu script pon esto:

ob_start("ob_gzhandler");

y al final por esto:

ob_end_flush();

quedaría así:

Código PHP:
<?php
ob_start
("ob_gzhandler");
 
// TODO TU CODIGO...
 
ob_end_flush();
?>
Lo que estamos haciendo es, además de comprimir toda la salida al navegador, es indicarle que no envie nada de html, espacios hasta termionar de ejecutarse el script (porque esta comprimiendo la salida). Entonces en este caso donde pongas el header() va a funcionar bien.

Espero haber sido util...

Salud!
  #5 (permalink)  
Antiguo 08/04/2008, 04:03
 
Fecha de Ingreso: abril-2008
Mensajes: 49
Antigüedad: 16 años
Puntos: 0
Re: problemas con header de php

muchísimas gracias por vuestro comentarios. Ahora ya funciona perfectamente.
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 16:24.