[PHP]Que ha pasado con los header?

elfito

Veamos hace cosa de 10 meses probé a trastear con un webspell en el que modifique un par de cosillas. Sin mas era un trozito de codigo ke redireccionaba a una web 404 personalizada en el caso que no existiera la web en la raiz.

Code del index.php

<?
      if(!isset($site)) $site="news";
      $invalide = array('/','/\/',':','.');
      $site = str_replace($invalide,' ',$site);
      if(!file_exists($site.".php")) header('Location: 404.shtml');
	  if($site=="forum") header('Location: foro.php?site=forum');
      include($site.".php");
      ?>

Resulta que ahora no me redirige al 404 :/

Lei algo por ahi del header pero no vi nada en claro. Alguien sabe como hacerlo? He probado con javascript y nanai tampoco xD

Saludos :P

erdanblo

¿Aparece algún error?

Si no..., pon error_reporting(E_ALL); al principio del script.

elfito

Warning: Cannot modify header information - headers already sent by (output started at index.php:43) in /index.php on line 220

Warning: include(neasd.php) [function.include]: failed to open stream: No such file or directory

Warning: include() [function.include]: Failed opening 'neasd.php' for inclusion (include_path='.:/usr/lib/php5')

Los 2 segundos son precisamente lo que intento evitar con el el header...

Y por lo que interpreto del primero... que no se puede hacer un header despues de haberle enviado ya uno?

Osea que han cambiado el header? Porque esto antes me funcionaba :(

Hay algun manera de hacerlo?

saludos ^^

Gracias erdanblo :P ^^

Shock

Simplemente has mandado ya el header antes que le digas al PHP que mande otro header, es decir ya has mandado otro header desde otro lado del código.

Hay veces que no se puede hacer una redirección por header porque te tocaría cambiar varias partes del código, así que la solución más rápida es hacerlo por javascript:

<? if (!file_exists($site.".php")) { ?> 
 <script>window.location.href = "404.shtml";</script> 
<? } ?>
elfito

#4 vale ^^ lo acabo de leer no se puede enviar un header ya enviado en php. Lo cambiaron de 10 meses para aki por un posible atake de inyeccion xDDD

vale ^^ pues pruebo lo ke dices y ya te comento :P gracias shock tambien :P ^^

erdanblo

Era lo que me imaginaba.

Ya sabes el problema y como solucionarlo, nada mas que decir.

elfito

nada ;(

Tanto lo tuyo shock como otra cosa ke he leido :

<?php
ob_start();
header ("Location: http://www.lawebdonderedireccionamos.com");
ob_end_flush();
?>

tanto como

echo '<script languaje="Javascript">location.href="url"</script>';

Y nada ;(

erdanblo

El javascript si deberia de funcionar. De todos modos es chapuza.

elfito

#8 No. El codigo de shock no tira. Hace siempre la redireccion aunque exista en la raiz el archivo .php. Y bueno sera chapuza pero es la unica manera de que tengo de hacerlo.

Otra cosa ke he leido:

Si no pueden mandar las cabeceras
Header(Location: URL);
Vayan a Php.ini y modifiquen esta línea

output_buffering = On

Sirve para enviar headers y cookies, deben ponerla en ON.

Hay algun inconveniente en activar eso? :/

saludos :P

erdanblo

¿Tienes acceso al php.ini?

Con una etiqueta <meta> también se puede redireccionar.

edit.

<html>
<head>
<title>Descarga</title>
<META HTTP-EQUIV="Refresh" CONTENT="3; URL=archivo.zip">
</head>
<body>
En 3 segundos comenzará la descarga. Si no empieza, pulsa <a href='archivo.zip'>aquí</a>
</body>
</html>
Shock

#9 Es que no lo tienes que poner en un echo, tienes que cerrar el php y abrirlo y entre medio poner la instrucción de javascript como te he puesto en el ejemplo, sino no funcionará ya que el navegador no procesa el script porque lo considera texto plano

elfito

#11 eso ya lo he probado y no tira ;(

FUUUU

Bueno con un echo y un meta HTML parece ke va aunke bueno... carga la web y luego se refresca pero bueno es lo de menos xD

Shock

Tienes que hacerlo en un php que esté dentro de etiquetas head o html, si es puro html como una clase evidentemente no te irá

elfito

#13 es un .php y esta justo en medio de un codigo html normal :(

Shock
echo '<script languaje="Javascript">location.href="url"</script>';

¿Has puesto la línea exactamente así?

S

#4
estas mezlando conceptos, nada tiene que ver el tag <head> de html con un HTTP header

El problema que tienes es bastante común, has enviado algún tipo de texto o incluso una linea vacía antes de usar la función header(). Mira todos los archivos implicados y asegurate de que no envías nada antes de usar dicha funcion. Incluso elimina las lineas vacias despues del ?> de otros archivos que hayas usado. Tambien puede ser que un error/warning/notice al saltar antes del uso de la función header() te lo interrumpa.

EDIT: la opción de usar ob_start() es inutil, puesto que lo que has enviado ha sido antes de esa linea.

Shock

Si, #16 tiene razón, lo del <head> de HTML no tiene nada que ver.

Incluso lo que puede pasar es que estés codificando tu archivo como UTF-8 con BOM y esos dos bytes del principio te estén jodiendo los header, pero ya sería raro aunque puede pasar, siempre puedes probar a codificar el archivo en UTF-8 sin BOM si es el caso.

Sino lo del javascript te debería ir, yo estoy cansado de hacerlo en mis proyectos y me funciona vamos xD

NeB1

iba a contestar lo que te ha dicho #16 comprueba tus documentos.php y mira que antes del <html> no hay ningun espacio ni linea en blanco ni NADA

willsmith

con .htaccess

Options FollowSymLinks
RewriteEngine on
ErrorDocument 404 /error.php

Usuarios habituales