PHP | headers_sent() function
The headers_sent() function is an inbuilt function in PHP which is used to determines whether the header is successfully sent or not. The headers_sent() function returns True if header sent successfully and False otherwise.
Syntax:
bool headers_sent( $file, $line )
Parameters: This function accepts two parameters as mentioned above and described below:
- $file: This parameter holds the filename. It is an optional parameter.
- $line: This parameter holds the line number where output started. It is also optional parameter.
The headers_sent() function will put the PHP source file name and line number where output started in the file and line variables if the file and line parameters are set.
Return Value: This function returns True if headers has been sent and false otherwise.
Example 1:
<?php
// PHP program to illustrate headers_sent() function
if(!headers_sent()) {
header("Location:https://en.wikipedia.org/wiki/Main_Page");
exit();
}
?>
<?php
// PHP program to illustrate headers_sent() function
if(!headers_sent()) {
header("Location:https://en.wikipedia.org/wiki/Main_Page");
exit();
}
?>
Output:

In this example, no header is sent previously so !headers_sent() will be TRUE and then header("Location:https://en.wikipedia.org/wiki/Main_Page"); will send the header information and as per the header it will redirect to the website that is in parameter.
Note: Header cannot be add once header block has been sent. So this function has implemented to avoid errors like.
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
Example 2:
<?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>
<?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>
Note: The example shown here will not run in online IDE as it doesn't support redirecting and modifying headers. So, try to run it on hosting server or on localhost.
Output:
hello world
Warning:
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
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 10
This error can be solved by using headers_sent() function.
Example 3: After resolving the above error.
<?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>
<?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>
Output:
hello world

Explanation:
headers_sent() function checking whether header has already been sent or not. so !headers_sent() returns false for which header are not being sent again, avoiding the errors.
NOTE: The example shown here will not run in online IDE as it doesn't support redirecting and modifying headers. So, try in some hosting server or on localhost.
Example 4:
<?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");
?>
<?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");
?>
Output:

Reference: http://php.net/manual/en/function.headers-sent.php