PHP headers_sent Function
last modified April 4, 2025
The PHP headers_sent
function checks if HTTP headers were sent.
It helps prevent header-related errors in web applications.
Basic Definition
headers_sent
determines if headers were already sent to client.
Headers must be sent before any output for proper HTTP protocol.
Syntax: headers_sent(string &$file = null, int &$line = null): bool
.
Returns true if headers sent, false otherwise. Optional params show where.
Basic Header Check
This example shows the simplest usage of headers_sent
.
<?php declare(strict_types=1); if (!headers_sent()) { header('Location: https://example.com'); exit; } echo "Headers already sent, cannot redirect";
This checks if headers were sent before attempting a redirect. If headers were sent, it shows an error message instead.
Finding Output Location
This demonstrates using headers_sent
to find where output started.
<?php declare(strict_types=1); echo "Some output before headers\n"; if (headers_sent($file, $line)) { echo "Headers sent in $file on line $line\n"; } header('Content-Type: text/plain');
This shows where premature output occurred. The variables capture file and line. This helps debug header-related issues in larger applications.
Conditional Header Setting
This example shows how to conditionally set headers based on headers_sent
.
<?php declare(strict_types=1); function safeHeader(string $header): bool { if (!headers_sent()) { header($header); return true; } return false; } safeHeader('X-Custom-Header: Value');
This wrapper function safely sets headers only if possible. It returns success status. This pattern prevents header-related warnings in applications.
Output Buffering with headers_sent
This shows how output buffering interacts with headers_sent
.
<?php declare(strict_types=1); ob_start(); echo "Content before headers\n"; if (!headers_sent()) { header('Content-Type: text/html'); echo "Headers set successfully\n"; } ob_end_flush();
Output buffering delays sending headers until buffer flush. This allows setting headers even after output. The buffer collects output until processed.
Error Handling with headers_sent
This demonstrates proper error handling when headers are already sent.
<?php declare(strict_types=1); echo "Accidental early output\n"; try { if (headers_sent($file, $line)) { throw new RuntimeException( "Headers already sent in $file on line $line" ); } header('Cache-Control: no-cache'); } catch (RuntimeException $e) { error_log($e->getMessage()); // Fallback behavior }
This shows structured error handling for header issues. It logs the error and provides fallback behavior. This maintains application stability.
Best Practices
- Early Checks: Verify headers_sent before setting headers
- Output Control: Use output buffering when needed
- Error Handling: Implement graceful fallbacks
- Debugging: Use file/line parameters to find issues
- Structure: Separate output from business logic
Source
PHP headers_sent Documentation
This tutorial covered the PHP headers_sent
function with practical
examples for header management and debugging in web applications.