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
)
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.
atomheader('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.
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.phpheader('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 redireccionamientoheader("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']; ?>