Soy bastante nuevo en php, investigué un poco y probé la solución de otra persona, pero no funcionó para mí. Quiero redirigir a los usuarios a otra página después de que se haya ejecutado cierto código. Me di cuenta de que no hay mensajes de error y el sitio no cambia. Así que eliminé casi todo del código y lo puse en un pequeño archivo test.php. El mismo problema persiste.
<!DOCTYPE html> <html> <body> <h1>Tes2</h1> <?php // Execute some code here sleep(10); // Give the user 10 seconds to read the output of my code // redirect the user with php or trigger a JS script to do that header("Window-target: _parent"); header("Location: https://www.w3schools.com/"); ?> </body> </html>Expectativa: la página debe ejecutar el script php principal (visualizado por el comentario) y activar un temporizador. Cuando termine el temporizador, debería redirigirme a "www.w3schools.com". No debe haber errores u otros mensajes. La redirección debe realizarse mediante el código php, si es posible (JS sería una forma posible de resolver esto, pero aún necesitaría iniciar el código JS después de que se haya ejecutado mi código php).
Resultado: la página aparece y carga el código html. El sitio permanece y no cambia. No hay errores.
Entorno: se ejecuta en Chromium versión 96.0.4664.45 (compilación de Offizieller) para Linux Mint (64 bits) El sitio web es funcional y ejecutó el código PHP como se esperaba, pero no este.
¿Existe una solución ligera y universal (para los navegadores más populares) que redirija a los usuarios a otra página?
Los encabezados deben configurarse antes de que se transmitan los datos, por lo que no puede simplemente pegarlos en el medio de un archivo. Citando el manual :
Recuerde que se debe llamar a header() antes de enviar cualquier salida real, ya sea mediante etiquetas HTML normales, líneas en blanco en un archivo o desde PHP.
Entonces, como mínimo, deberá volver a escribir su archivo para:
<?php header("Window-target: _parent"); header("Location: https://www.w3schools.com/"); ?> <!doctype html> ... Además, nunca sleep() en una respuesta http(s): esa respuesta debería terminar lo más rápido posible, sin importar el contenido que necesite generar. El sueño no tiene cabida en (realmente ningún) código PHP.
Una combinación de PHP y JS parece ser la solución más fácil. Pero eso podría ser sólo mi opinión. Traté de documentar el código lo mejor posible, para que otros puedan entenderlo:
<?php function redirect() { // Create some JS code which will pause for 3 seconds and execute the move function afterwards. This Function will redirect the user echo "<script>"; echo "function move() {window.location.replace('http://www.w3schools.com');}"; echo "setTimeout(move, 3000);"; echo "</script>"; } ?> <!DOCTYPE html> <html> <head> </head> <body> <h1>Test2</h1> <?php echo "<p>You will be redirected after the code has been executed!</p>"; // Run actual code redirect(); // Redirect using JS code ?> </body> </html>