Open In App

PHP | headers_sent() function

Last Updated : 07 Aug, 2021
Improve
Improve
Like Article
Like
Save
Share
Report

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




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




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




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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads