PHP Network headers_sent() Function
The PHP Network headers_sent() function is used to check if HTTP headers have already been sent. The headers are the initial component of the response sent to the browser. Once headers have been communicated, the header() function cannot be used to add new headers.
This function helps to avoid issues by confirming that headers are sent. You may also use it to find the file name and line number where the output started. It returns false if no headers are sent, true otherwise. This is useful for debugging and works well with output buffers. It supports PHP 4, 5, 7, and 8.
Syntax
Below is the syntax of the PHP Network headers_sent() function −
bool headers_sent ( string &$filename, int &$line )
Parameters
Here are the parameters of the headers_sent() function −
$filename − (Required) It is used to store the name of the PHP file where the headers were sent.
$line − (Optional) It is the line number where the output started.
Return Value
The headers_sent() function will return FALSE if no HTTP headers have been sent and TRUE otherwise.
PHP Version
First introduced in core PHP 4, the headers_sent() function continues to function easily in PHP 5, PHP 7, and PHP 8.
Example 1
This program simply checks if headers were sent and prints a message. It shows the most simple implementation of the PHP Network headers_sent() function.
<?php
// Check if headers are sent
if (headers_sent()) {
echo "Headers have already been sent!";
} else {
echo "Headers are not sent yet.";
}
?>
Output
Here is the outcome of the following code −
Headers are not sent yet.
Example 2
In the below PHP code we will use the headers_sent() function and try to send a header after checking if headers are already sent for avoiding errors.
<?php
// Check before sending headers
if (!headers_sent()) {
header("Content-Type: text/plain");
echo "Header sent successfully.";
} else {
echo "Cannot send headers, they are already sent!";
}
?>
Output
This will generate the below output −
Header sent successfully.
Example 3
Now the below code detects the file and line where headers were sent. So this program basically uses the optional parameters of headers_sent() to identify where output started.
<?php
// Output some text
echo "Hello, world!";
// Check where headers were sent
if (headers_sent($file, $line)) {
echo "Headers were sent in file $file on line $line.";
} else {
echo "Headers are not sent yet.";
}
?>
Output
This will create the below output −
Hello, world!Headers were sent in file /Users/abc
Example 4
In this program we are using output buffering to control header transmission and use headers_sent() function. So it uses output buffering to prevent accidental header transmission and shows how to control when headers are sent.
<?php
// Start output buffering
ob_start();
// Output some text
echo "This is buffered output.";
// Check if headers are sent
if (!headers_sent()) {
header("Content-Type: text/plain");
echo " Header sent with buffering.";
}
// End buffering and send output
ob_end_flush();
?>
Output
Following is the output of the above code −
This is buffered output. Header sent with buffering.