La función headers_sent() es una función incorporada en PHP que se usa para determinar si el encabezado se envía con éxito o no. La función headers_sent() devuelve True si el encabezado se envió correctamente y False en caso contrario.
Sintaxis:
bool headers_sent( $file, $line )
Parámetros: esta función acepta dos parámetros, como se mencionó anteriormente y se describe a continuación:
- $archivo: este parámetro contiene el nombre del archivo. Es un parámetro opcional.
- $line: este parámetro contiene el número de línea donde comenzó la salida. También es un parámetro opcional.
La función headers_sent() colocará el nombre del archivo fuente de PHP y el número de línea donde comenzó la salida en las variables de archivo y línea si los parámetros de archivo y línea están configurados.
Valor de retorno: esta función devuelve True si se han enviado encabezados y false en caso contrario.
Ejemplo 1:
PHP
<?php // PHP program to illustrate headers_sent() function if(!headers_sent()) { header("Location:https://en.wikipedia.org/wiki/Main_Page"); exit(); } ?>
Producción:
En este ejemplo, no se envió ningún encabezado previamente, por lo que !headers_sent() será VERDADERO y luego el encabezado («Ubicación: https://en.wikipedia.org/wiki/Main_Page»); enviará la información del encabezado y, según el encabezado, se redirigirá al sitio web que está en el parámetro.
Nota: el encabezado no se puede agregar una vez que se ha enviado el bloque de encabezado. Así que esta función se ha implementado para evitar errores como.
Warning: Cannot modify header information - headers already sent by (output started at /storage/ssd3/798/438108/public_html/gfg/header.php:1) in /storage/ssd3/798/438108/public_html/gfg/header.php on line 4
Ejemplo 2:
PHP
<?php header("Expires: Sun, 25 Jul 1997 06:02:34 GMT"); ?> <html> <body> <p>hello world</p> <?php // header is being sent after header is // sent and after output has been started. header("Cache-Control: no-cache"); header("Pragma: no-cache"); ?> </body> </html>
Nota: El ejemplo que se muestra aquí no se ejecutará en el IDE en línea, ya que no admite la redirección ni la modificación de encabezados. Entonces, intente ejecutarlo en el servidor de alojamiento o en localhost.
Producción:
hello world
Advertencia:
Warning: Cannot modify header information - headers already sent by (output started at /storage/ssd3/798/438108/public_html/gfg/header.php:4) in /storage/ssd3/798/438108/public_html/gfg/header.php on line 9
Advertencia: no se puede modificar la información del encabezado: los encabezados ya se enviaron
(la salida comenzó en /storage/ssd3/798/438108/public_html/gfg/header.php:4)
en /storage/ssd3/798/438108/public_html/gfg/header. php en la línea 10
Este error se puede resolver usando la función headers_sent().
Ejemplo 3: Después de resolver el error anterior.
PHP
<?php header("Expires: Sun, 25 Jul 1997 06:02:34 GMT"); ?> <html> <body> <p>hello world</p> <?php //if the header is has not been sent yet then new header will be sent if(!headers_sent()){ header("Cache-Control: no-cache"); header("Pragma: no-cache"); } ?> </body> </html>
Producción:
hello world
Explicación:
la función headers_sent() verifica si el encabezado ya se envió o no. por lo tanto, !headers_sent() devuelve falso para el cual el encabezado no se envía nuevamente, evitando los errores.
NOTA: El ejemplo que se muestra aquí no se ejecutará en el IDE en línea, ya que no admite la redirección ni la modificación de encabezados. Entonces, intente en algún servidor de alojamiento o en localhost.
Ejemplo 4:
PHP
<?php // Function to retrieve relative url to create // full url with provided relative url function server_url() { $proto = "http" . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "s" : "") . "://"; $server = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; return $proto . $server; } // Function to redirecting relative url function redirect_rel($relative_url) { $url = server_url() . dirname($_SERVER['PHP_SELF']) . "/" . $relative_url; // Check whether the header is sent or not if (!headers_sent()) { // If header not sent then sending header header("Location: $url"); } else { // If header sent then echo "<meta http-equiv=\"refresh\" content=\"0;url=$url\">\r\n"; } } redirect_rel("server.php"); ?>
Producción:
Referencia: http://php.net/manual/en/function.headers-sent.php