Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

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

La función header posee 3 parámetros de los cuales 2 son opcionales($repalace y $http_response_code)

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

$string

Debe contener el encabezado en formato cadena(string).

$replace:

Es un valor opcional dentro de la función header, el cual indica si un encabezado previo, 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)


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');

Hay un ejemplo bastante bueno sobre header('Content-Type: application/json'); en Consultas con PDO extension en PHP si es que quieres ver como utilizarlo.

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');

¿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.

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

404 Not Found

Ejemplo de cuando, no existe una página.

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

Redireccionamiento

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

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'];
?>

Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category