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:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
  
// PHP program to illustrate headers_sent() function
if(!headers_sent()) {
    header("Location:https://en.wikipedia.org/wiki/Main_Page");
    exit();
}
  
?>

chevron_right


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:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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>

chevron_right


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.

filter_none

edit
close

play_arrow

link
brightness_4
code

<?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>

chevron_right


OUTPUT:

hello world


Explaination:
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:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
  
// Function to retrive 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");
  
?>

chevron_right


Output:

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



My Personal Notes arrow_drop_up

I am unrecognized crazy being with random thoughts

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.