Blog de programación, errores, soluciones

La función header() y el redireccionamiento en PHP

La función header() en PHP nos permite enviar encabezados sin formato HTTP.

Antes de empezar a utilizar esta función, tenemos que aclarar algo. Esta función debe ser llamada antes de mostrar algo en pantalla, no debe tener espacios en blanco antes de esta función y tampoco comentarios.

sintaxis

header(string $string[,bool $replace=true[,int $http_response_code]])

$string

Debe contener el encabezado en formato cadena(string).

hay 2 casos particulares, cuando queremos asegurar el tipo de mensaje, cunado hay un error.

Ejemplo de cuando, no existe una página.

<?php
header("HTTP/1.0 404 Not Found");
?>

Cuando queremos redireccionar y usamos location:

Ejemplo de redireccionamiento a index.php
header('Location: /index.php');

Nos redireccionará a nuestro index.php

El encabezado de respuesta Location, le indica a la URL a redireccionar la página a la página especificada, solo provee un significado cuando se especifica con 3xx o 201.

Ejemplo de redireccionamiento
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: {$x}"); 
exit();

En este caso $x sería la nueva ruta de nuestra página

Content types más usados en $string.


atom

header('Content-Type: application/atom+xml');

css

header('Content-Type: text/css');

javascript

header('Content-Type: text/javascript');

jpeg image

header('Content-Type: image/jpeg');

json

header('Content-Type: application/json');

pdf

header('Content-Type: application/pdf');

rss

header('Content-Type: application/rss+xml; charset=ISO-8859-1');

text

header('Content-Type: text/plain');

xml

header('Content-Type: text/xml');

$replace:

Es un valor opcional dentro de la funcion header, el cual indica si un encabezado prebio, ha de ser remplazado o añadir un segundo encabezado, su valor por defecto es TRUE por lo cual remplazara el encabezado.

$http_response_code:

Este valor opcional fuerza el valor del código de respuesta. Por ejemplo los siguientes valores ( 404, 405, 403, 500). Para saber más de estos valores puede ver la siguiente documentación (EN | ES)

¿Cuándo usaría header()?

Por ejemplo cuando procesamos un formulario, y tenemos que devolver llevar el usuario a una página.

Otro ejemplo sería el Login. Una vez ingresado el usuario, podríamos querer que lo redirija a su perfil.

Un Caso es cuando nuestra página ya no se puede encontrar por cierta url, y en ese caso se ha movido permanentemente a otra url. Ya vimos este caso anteriormente.

También cuando queremos asegurar que le dé el error correcto al usuario.

Ejemplos

El siguiente es un ejemplo de redireccionamiento al, ingresar un nombre de usuario y un password.

Este ejemplo es una simulación de Login tenga en cuenta que para ser un login real hace falta usar bases de datos, por ello simplemente chequearemos si hemos puesto el nombre y el password que queremos que ponga.

  • (carpeta)
    • index.php
    • logged_in.php

Username: marcos

Password: elmarquitos3674

index.php
<!doctype html>
<html lang="es">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <title>Ejemplo de función header()</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="css/main.css">
    </head>
    <body>
        <style>
            .form_item{    
                width:100%;
                margin-bottom:10px;
            }
            .form_item label{
                display:inline-block;
                width:100%;
            }
            .form_item input{
                display:inline-block;
                width:100%;
            }
            .login{
                width:400px;
            }
        </style>
        <h2>LOGIN</h2>
        <form class="login" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <div class= "form_item">
                <label for="fusername">UserName: </label>
                <input type="text" id="fusername" name="username"/>
            </div>
            <div class="form_item">
                <label for="fpassword">Password: </label>
                <input type="password" id="fpassword" name="password"/>
            </div>
            <input type="submit" value="confirm">
        </form>
        <?php
        if(isset($_POST['username'],$_POST['password'])):
            if($_POST['username']=="" || $_POST['password']==""){
                echo "el password o el nombre de usuario no ha sido ingresado.";
            }else if($_POST['username'] == "marcos" && $_POST["password"] =="elmarquitos3674"){
                session_start();
                $_SESSION['user'] = "marcos";
                header("Location:logged_in.php");
            }else{
                echo "No se encontro el usuario o el password";
            }
        endif;
        ?>
    </body>
</html>

El siguiente archivo es a donde redireccionara, mi index.php

logged_in.php
<?php
session_start();
echo "Wellcome ".$_SESSION['user'];
?>
Somethig wrong? If you found an error or mistake on the content you can contact me on twitter | @luisg2249_luis.
Last 4 post in same category