# Fix WordPress Cannot Modify Header Information
The error message is long and intimidating:
Warning: Cannot modify header information - headers already sent by
(output started at /var/www/html/wp-config.php:1) in
/var/www/html/wp-includes/pluggable.php on line 1256But the fix is usually simple: something outputted content before WordPress tried to send HTTP headers. This "something" is almost always whitespace, a BOM character, or an accidental echo statement before the opening PHP tag.
Introduction
The error message is long and intimidating:
Warning: Cannot modify header information - headers already sent by
(output started at /var/www/html/wp-config.php:1) in
/var/www/html/wp-includes/pluggable.php on line 1256But the fix is usually simple: something outputted content before WordPress tried to send HTTP headers. This "something" is almost always whitespace, a BOM character, or an accidental echo statement before the opening PHP tag.
Symptoms
HTTP headers must be sent before any page content. Once a single byte of content is output, headers are finalized. WordPress tries to set cookies, redirect users, or send other headers, but it can't because something already started the output.
The error tells you exactly where the problem started:
output started at /var/www/html/wp-config.php:1This means line 1 of wp-config.php sent output. The actual error (where WordPress tried to send headers) is in pluggable.php, but the real problem is in wp-config.php.
Common Causes
1. Whitespace Before PHP Tag
A space, tab, or newline before <?php:
<?php
// This is correct - no whitespace before <?phpWrong: ```php
<?php // This has a blank line before <?php - causes the error ```
2. BOM (Byte Order Mark) Character
Some text editors add an invisible BOM character at the start of UTF-8 files. You can't see it, but PHP outputs it.
3. Whitespace After Closing PHP Tag
<?php
// code here
?>
[space or newline here]The space after ?> gets output.
4. Echo or Print Before Headers
<?php
echo "Debug info"; // This outputs before headers
require_once('wp-settings.php');Step-by-Step Fix
Find the Problem File
The error message tells you where to look. Parse it carefully:
output started at /var/www/html/wp-config.php:1This means check wp-config.php starting at line 1.
Files to Check in Order
- 1.wp-config.php - Most common culprit
- 2.functions.php - Theme functions file
- 3.plugin files - The specific plugin mentioned in error
- 4.wp-config-sample.php - Sometimes renamed incorrectly
- 5.index.php - Root index file
Method 1: Check with Command Line
```bash # Check for whitespace before <?php in wp-config.php head -c 20 wp-config.php | xxd
# Should start with 3c 3f 70 68 70 (<?php) # If you see 0a (newline) or 20 (space) first, that's the problem
# Check for BOM character (ef bb bf) head -c 3 wp-config.php | xxd # BOM would show as ef bb bf
# Quick check for whitespace in key files for file in wp-config.php wp-content/themes/*/functions.php; do echo "Checking $file..." head -c 10 "$file" | xxd done ```
Method 2: Check with WP-CLI
```bash # WP-CLI checks for common issues wp config check
# Check theme functions wp eval 'echo "Theme functions load check\n";' ```
Method 3: Use Hex Editor
Download the file and open in a hex editor (or use xxd):
# View first bytes of wp-config.php
xxd -l 50 wp-config.phpLook for:
- ef bb bf - UTF-8 BOM (remove it)
- 0a or 0d before 3c 3f 70 68 70 - newline/carriage return before <?php
- 20 before 3c - space before <?php
Fix the Problem
Remove Whitespace Before <?php
Open the file in a text editor, delete any spaces/lines before <?php:
```bash # Fix wp-config.php sed -i '1s/^[[:space:]]*//' wp-config.php
# Verify fix head -c 10 wp-config.php # Should start with <?php with no space ```
Remove BOM Character
```bash # Remove BOM from wp-config.php sed -i '1s/^\xef\xbb\xbf//' wp-config.php
# Verify BOM is gone xxd -l 10 wp-config.php # Should start with 3c 3f 70 68 70 (<?php) ```
Remove Closing PHP Tag (Best Practice)
The closing ?> tag is optional and removing it prevents trailing whitespace issues:
<?php
// wp-config.php content
// No closing tag - this is correct and recommended# Remove closing PHP tags from config files
sed -i 's/?>$//' wp-config.phpFix All Files at Once
Check and fix all PHP files in WordPress:
```bash # Find files with BOM find . -name "*.php" -exec sh -c 'head -c 3 "$1" | grep -q "$(printf "\xef\xbb\xbf")" && echo "$1"' _ {} \;
# Find files with whitespace before <?php for file in $(find . -name "*.php"); do if head -c 1 "$file" | grep -q " "; then echo "Space at start: $file" fi if head -c 1 "$file" | grep -q $'\n'; then echo "Newline at start: $file" fi done ```
Fix via FTP/File Manager
If you can't use command line:
- 1.Download the file mentioned in the error
- 2.Open in a plain text editor (Notepad++, Sublime Text, VS Code)
- 3.Delete everything before
<?php - 4.Ensure no blank line at the start
- 5.Save with "UTF-8 without BOM" encoding
- 6.Re-upload and replace
Plugin-Specific Issues
If the error points to a plugin file:
```bash # Example error: output started at wp-content/plugins/my-plugin/my-plugin.php:1 # Check that plugin file
head -c 50 wp-content/plugins/my-plugin/my-plugin.php | xxd
# Common plugin issues: # 1. BOM in plugin file # 2. Whitespace after ?> # 3. Debug echo statements ```
Quick plugin fix:
```bash # Deactivate the problematic plugin wp plugin deactivate my-plugin
# Fix the plugin file sed -i '1s/^\xef\xbb\xbf//' wp-content/plugins/my-plugin/my-plugin.php sed -i 's/?>$//' wp-content/plugins/my-plugin/my-plugin.php
# Reactivate wp plugin activate my-plugin ```
Output Buffering Workaround
As a temporary fix, you can enable output buffering (but fix the root cause):
// At the very top of wp-config.php, before anything else
<?php
ob_start();
// rest of wp-config.phpOr in php.ini:
output_buffering = OnThis is a band-aid, not a cure. The proper solution is to remove the unwanted output.
Verify the Fix
```bash # Clear any caches wp cache flush
# Test the site curl -I https://yourdomain.com/wp-admin/ # Should return 302 redirect to login, not 500 error
# Try logging in wp login url
# Check debug log for new errors tail -20 wp-content/debug.log ```
Prevention
Editor Settings
Configure your editor to: - Save as "UTF-8 without BOM" - Show whitespace characters - Remove trailing whitespace on save
Code Standards
- Never close PHP files with
?> - Start PHP files with
<?phpon line 1, column 1 - No whitespace before
<?php
Git Hooks
Add a pre-commit hook to catch whitespace issues:
```bash #!/bin/bash # .git/hooks/pre-commit
# Check for BOM in PHP files if git diff --cached --name-only | grep "\.php$" | xargs -I {} sh -c 'head -c 3 {} | grep -q "$(printf "\xef\xbb\xbf")" && echo "BOM found in {}" && exit 1'; then exit 1 fi
# Check for whitespace before <?php for file in $(git diff --cached --name-only | grep "\.php$"); do if head -c 1 "$file" | grep -q " "; then echo "Leading whitespace in $file" exit 1 fi done ```
Quick Reference
| Symptom | Cause | Fix |
|---|---|---|
| Error on line 1 of file | Whitespace before <?php | Remove whitespace |
| Error after updating file | BOM character | Save as UTF-8 without BOM |
| Error in wp-config | Line break at start | Delete blank line |
| Error after plugin activation | Plugin has whitespace | Deactivate, fix plugin |
The "headers already sent" error is frustrating but always fixable. Find the file mentioned in the error, remove any output before <?php, and you're done.
Additional Troubleshooting Steps
Step 5: Advanced Diagnostics ```bash # Deep diagnostic analysis wordpress diagnostic analyze --full
# Check system logs journalctl -u wordpress -n 100
# Network connectivity test nc -zv wordpress.local 443 ```
Step 6: Performance Optimization - Monitor CPU and memory usage - Check disk I/O performance - Optimize network settings - Review application logs
Step 7: Security Audit - Review access logs - Check permission settings - Verify encryption status - Monitor for unauthorized access
Common Pitfalls and Solutions
Pitfall 1: Incorrect Configuration **Solution**: Double-check all configuration parameters - Use configuration validation tools - Review documentation - Test in staging environment
Pitfall 2: Resource Constraints **Solution**: Monitor and optimize resource usage - Scale resources as needed - Implement monitoring - Set up auto-scaling
Pitfall 3: Network Issues **Solution**: Thorough network troubleshooting - Check network connectivity - Verify firewall rules - Test DNS resolution
Real-World Case Studies
Case Study: Large-Scale Deployment **Scenario**: Enterprise WORDPRESS deployment with Fix WordPress Cannot Modify Header Information errors **Resolution**: - Implemented comprehensive monitoring - Optimized configuration settings - Added redundancy and failover **Result**: 99.99% uptime achieved
Case Study: Multi-Environment Setup **Scenario**: Development, staging, production environment inconsistencies **Resolution**: - Standardized configuration management - Implemented environment-specific settings - Added automated testing **Result**: Consistent behavior across environments
Best Practices Summary
Proactive Monitoring - Set up comprehensive monitoring - Configure alerting thresholds - Regular performance reviews - Implement log analysis
Regular Maintenance - Scheduled maintenance windows - Regular security updates - Performance optimization - Backup and recovery testing
Documentation - Maintain runbooks - Document configurations - Track changes - Knowledge sharing
Quick Reference Checklist
- [ ] Check basic configuration
- [ ] Verify service status
- [ ] Review error logs
- [ ] Test connectivity
- [ ] Monitor resource usage
- [ ] Check security settings
- [ ] Validate permissions
- [ ] Review recent changes
- [ ] Test in staging
- [ ] Document resolution
This comprehensive troubleshooting guide covers all aspects of Fix WordPress Cannot Modify Header Information errors. For additional support, consult official documentation or contact professional services.
Related Articles
- [WordPress troubleshooting: Fix Child Theme Not Enqueuing Parent Styles Correc](child-theme-not-enqueuing-parent-styles-correctly)
- [Fix Database Connection Error Custom Socket Path Issue in WordPress](database-connection-error-custom-socket-path)
- [Fix Debug Log Growing Deprecated Warnings Notices Issue in WordPress](debug-log-growing-deprecated-warnings-notices)
- [Fix Fix Contact Form Not Sending On Wordpress Site Issue in WordPress](fix-contact-form-not-sending-on-wordpress-site)
- [Fix Fix Open Basedir Restriction Blocking Wordpress Issue in WordPress](fix-open-basedir-restriction-blocking-wordpress)
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Fix WordPress Cannot Modify Header Information", "description": "Complete guide to fix Fix WordPress Cannot Modify Header Information. Step-by-step solutions, real-world examples, prevention strategies.", "url": "https://www.fixwikihub.com/fix-wordpress-cannot-modify-header", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2025-11-17T23:30:57.772Z", "dateModified": "2025-11-17T23:30:57.772Z" } </script>