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()) {
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> |
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> |
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" );
?> |
Output:
Reference: http://php.net/manual/en/function.headers-sent.php