Ver Mensaje Individual
  #11 (permalink)  
Antiguo 16/12/2008, 17:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Cita:
Iniciado por GatorV Ver Mensaje
En otras palabras si envias un header() con el location, luego algo ya sea un echo "y"; empieza la redireccion y las siguientes lineas son ignoradas.
Cuidado ahí, que te quemas . Las líneas siguientes no son ignoradas en absoluto. El código sigue la ejecución verdaderamente hasta que el script termina (ya sea al final o que sea terminado).

Una vez que un header (o varios) se envía al navegador, entonces todos los demás se ignoran. Esto no significa que ahí el script se detenga. El código PHP ubicado después de la salida que produce el envio de headers aún se ejecuta.

Ejemplo:

Código php:
Ver original
  1.  
  2. sleep(1); // Procesos
  3.  
  4. header('Location: index2.php?foo=1'); // Redirección 1
  5.  
  6. flush(); // Salida al navegador
  7. echo 'a'; // Otra salida al navegador
  8.  
  9. sleep(2); // Procesos
  10.  
  11. header('Location: index2.php?foo=2'); // Redirección 2
  12. header('Content-Type: text/plain'); // cabecera de tipo de contenido
  13.  
  14. $_SESSION['abcdef'] = headers_sent(); // Variables de sesión abcdef
  15.  
  16. echo 'b'; // Otra salida al navegador

A index2.php me llega los siguientes datos:

Código:
_SESSION: array(1) {
  ["abcdef"]=>
  bool(true)
}
_GET: array(1) {
  ["foo"]=>
  string(1) "1"
}
En resumen. Se hizo la primera redirección establecida, pues luego de ella se hicieron salidas al navegador y la cabecera fue enviada. Esto no detiene la ejecución del script en absoluto. Prueba de ello es que la variable de sesión establecida al final se crea normalmente. Lo que sí es ignorado son otros headers, como el de tipo de contenido, que se envían después de que el de redirección ya ha sido enviado al navegador.

Confuso eh?

Cita:
Iniciado por Keysher Ver Mensaje
después de un header, puedes seguir haciendo operaciones con PHP hasta que finalice el script o se mande algo al navegador... ¿correcto?
Según lo último que dije, se ejecuta igualmente todo el código.

Cita:
Iniciado por Keysher Ver Mensaje
Y si hay headers después, se irán reemplazando.
Siempre y cuando los headers aún no se hayan enviado al navegador, y sean del mismo tipo (Location, content-type, etc.).