2009-04-10 30 views
11

¿Cómo paneo una página durante una cierta cantidad de segundos antes de redirigir al usuario a otra página HTML/PHP usando PHP?Pausa de redirección de PHP

+0

nunca he entendido por qué tengo que esperar x número de segundos para que me redirigir a otra página por qué habría de hacerlo ? – Thomaschaaf

+0

Becose browser - o la configuración del navegador - no permitirá que la redirección ... y que muestre una página intermedia sea claramente para el usuario, luego la página de carga múltiple sin comprender lo que está sucediendo ... los X (generalmente 5) segundos están ahí para dejar el usuario leyó el mensaje;) – Strae

+0

@Thomaschaaf: Hay algunas razones posibles, a) porque no se dan cuenta de que no hay necesidad, b) publicidad, mientras el usuario 'espera' puede ver un complemento y hacer clic, c) conformidad, todo el mundo lo hace para que todos esperen una página intermitente (es decir, mi jefe me hizo implementar una, aunque nuestro sitio no genera ingresos publicitarios solo porque estaba acostumbrado a verlo y pensaba que nuestros usuarios también lo harían). – Louis

Respuesta

1

Actualización: esto funciona, pero puede no ser la solución más adecuada para esta situación. Ver comentarios.

¿Podría ser esto lo que estás buscando?

<?php 
sleep(5); 
header("Location: http://www.example.com/"); 
exit(); 
?> 
+1

¿realmente funcionan? Pensé que con la función de suspensión el navegador simplemente dejaba de cargar la página para (en tu ejemplo) 5 segundos ... pero sin tirar la salida – Strae

+0

@DaNieL No he probado esto, por lo que puede estar en lo cierto funciona o no funciona según la configuración del servidor o la hora/lugar a la que llama este código. – Daan

+0

Acabo de probar, funciona, pero evito que todos los demás salgan también .. afaik la función sleep sleep() mantiene en pausa todo el renderizado php, por lo que no debería ser usado para este tipo de problemas – Strae

3

Las otras 2 opciones son un redireccionamiento de JavaScript usando setTimeout() o una etiqueta meta de actualización con un tiempo de espera.

15

solución de baja tecnología que no requiere Javascript o incluso PHP:

<html> 
<head> 
    <title>Redirecting...</title> 
    <meta http-equiv="refresh" 
content="10;URL=http://www.newsite.com"> 
</head> 
<body> 
    You are being automatically redirected to a new location.<br /> 
    If your browser does not redirect you in 10 seconds, or you do 
    not wish to wait, <a href="http://www.newsite.com">click here</a>. 
</body> 
</html> 

La ventaja de esta solución sobre el uso de la "Ubicación:" encabezado es que no es necesario detener la ejecución del script, que se aparecer al usuario como si el servidor estuviera ocupado o su conexión se hubiera colgado.

Esta solución también le da al usuario la opción de pasar a la nueva página inmediatamente en lugar de tener que esperar x número de segundos mientras su navegador no muestra información.

Editar: Creo que también vale la pena señalar que si decide utilizar el método del encabezado(), debe asegurarse de que la duración de su suspensión() no sea demasiado larga. Creo que la mayoría de los navegadores generan una conexión con tiempo de espera agotado después de no recibir ningún dato del servidor durante 1 minuto.

+0

Sea cuidadoso - algunos navegadores (como Chrome y Opera) no tomarán esta dirección correctamente – Strae

+0

¿De verdad? No sabía eso. Bueno, al menos tienen el enlace para hacer clic en. – Calvin

+0

Sí, no recuerdo exactamente si el navegador que no lo manejó correctamente es Safari, Opera o Chrome. Recuerdo que como 2 de ellos ... pero tal vez arreglaron este problema en el tiempo – Strae

33

Esto se debe obras:

<?php 
header('Refresh: 5; URL=http://yoursite.com/page.php'); 
//other code 
?> 

y le permitirá a su usuario ver cualquier tipo de salida que desee (Vas a ser redirigido después de segundos, haga clic Yere si no haga, etc ..)

+2

Realmente me gusta esta solución mucho mejor de lo que publiqué. +1 – Calvin

+0

Esto no funciona con todos los navegadores. – Gumbo

+1

realmente? Probé en cromo, ff, es decir, opera y safari, todo en el entorno de Windows, y todo funciona igual. ¿En qué sistema operativo lo intentó? ¿No podría haber ningún tipo de ajuste del navegador? – Strae

8

nunca utilice dormir de esta manera. Incluso bajo una ligera carga, su servidor se quedará sin conexiones http. Peor si se acaba el firewall.

El parámetro de retraso en el encabezado de redirección se realiza exactamente por el mismo motivo.

0

Probar:

<?php 
$url=base_url().'page_you_want_to_go_to' 
header('Refresh: X; URL=$url'); 
?> 

esto le dará mayor flexibilidad en el intercambio entre el servidor host local y remota.

0

poner esto en el encabezado.

<meta http-equiv="refresh" content="0.01;makensucces.html" /> 

en el lugar 0.01 debes poner los segundos, he usado un número decimal.

y en el lugar de makensucces.html debe poner el nombre del archivo que desea.

3

Si quieres esperar y luego volver a la página anterior aquí es cómo

$referrer = $_SERVER['HTTP_REFERER']; 

header ("Refresh: 2;URL='$referrer'");