Những điểm chính
• Khái niệm: Hiểu rõ bản chất lỗi “Cannot modify header information”, giúp bạn nhanh chóng xác định nguyên nhân đến từ việc output dữ liệu trước khi xử lý header HTTP.
• Nguyên nhân gây lỗi: Nắm được các nguyên nhân phổ biến như khoảng trắng thừa, lệnh echo, file UTF-8 BOM hoặc file include sinh output ngoài ý muốn.
• Cách khắc phục: Biết cách kiểm tra mã nguồn, loại bỏ ký tự thừa, chỉnh encoding và sử dụng output buffering để xử lý lỗi hiệu quả.
• Lưu ý quan trọng: Hiểu các nguyên tắc cần tuân thủ khi xử lý header trong PHP để tránh lỗi phát sinh lại trong tương lai.
Lỗi Warning: Cannot modify header information là gì?
Lỗi Warning: Cannot modify header information – headers already sent by xuất hiện khi PHP cố gắng gửi HTTP header sau khi dữ liệu đã được xuất ra trình duyệt trước đó. Trong PHP, các hàm như:
đều cần được thực thi trước khi có bất kỳ output nào được gửi tới trình duyệt.
Nếu trước các hàm này đã tồn tại dữ liệu đầu ra như:
thì PHP sẽ không thể sửa đổi header nữa và sinh ra cảnh báo.

Thông báo lỗi thường có dạng:
Trong đó:
-
output started at cho biết file và dòng bắt đầu sinh output.
-
on line là vị trí PHP cố gắng gửi header nhưng thất bại.
Nguyên nhân gây ra lỗi Warning: Cannot modify header information
Nguyên nhân cốt lõi là dữ liệu output đã được gửi ra trước khi PHP xử lý header HTTP.
Khoảng trắng hoặc ký tự thừa trong file PHP
Các khoảng trắng hoặc ký tự nằm:
đều được xem là output.
Ví dụ lỗi:
Hoặc:
Khoảng trắng ở cuối file cũng có thể gây lỗi.
Sử dụng echo hoặc print trước header
Nếu bạn xuất dữ liệu ra màn hình trước khi gọi header() hoặc session_start() thì lỗi sẽ xuất hiện.
Ví dụ:
PHP đã gửi dữ liệu "Hello" tới trình duyệt nên không thể chỉnh sửa header nữa.
File include hoặc require sinh output
Nhiều trường hợp lỗi đến từ file được include.
Ví dụ:
Nếu config.php chứa:
thì vẫn phát sinh lỗi dù file chính không có output.
File lưu dưới định dạng UTF-8 BOM
Một số editor lưu file với định dạng UTF-8 with BOM.
Ký tự BOM là ký tự ẩn được gửi ra trình duyệt ngay khi file được đọc, khiến PHP hiểu rằng output đã bắt đầu.
Đây là nguyên nhân rất phổ biến trong WordPress hoặc PHP thuần.
Cách khắc phục lỗi Warning: Cannot modify header information
Xóa khoảng trắng thừa trong file PHP
Bạn cần mở file được báo lỗi và:
-
xóa khoảng trắng trước
<?php
Nếu file chỉ chứa PHP, tốt nhất nên bỏ luôn thẻ đóng ?>.
Ví dụ chuẩn:
Kiểm tra các lệnh xuất dữ liệu
Rà soát các lệnh như:
được đặt trước:
Nếu có, hãy:
-
hoặc tạm thời xóa bỏ khi debug.
Lưu file dưới dạng UTF-8 without BOM
Bạn mở file bằng:
sau đó chọn:
rồi lưu lại file.
Điều này giúp loại bỏ ký tự BOM ẩn gây output.
Kiểm tra các file include/require
Bạn cần kiểm tra toàn bộ file được include hoặc require trong stack lỗi.
Đặc biệt là các file:
để đảm bảo chúng không sinh output ngoài ý muốn.
Sử dụng Output Buffering
Nếu chưa tìm được vị trí gây output, bạn có thể sử dụng output buffering.
Ví dụ:
ob_start() sẽ tạm lưu output vào buffer thay vì gửi trực tiếp ra trình duyệt.
Sau khi header xử lý xong, dữ liệu mới được xuất ra.
Tuy nhiên, đây chỉ nên xem là giải pháp hỗ trợ chứ không nên lạm dụng.
Bật output_buffering trong php.ini
Nếu có quyền quản trị server, bạn có thể bật output buffering toàn cục.
Mở file php.ini:
Đổi thành:
Sau đó restart:
-
hoặc dịch vụ web server tương ứng.
Một số lưu ý khi sửa lỗi Cannot modify header information
Sao lưu mã nguồn trước khi chỉnh sửa
Trước khi sửa:
bạn nên backup để tránh phát sinh lỗi ngoài ý muốn.
Ưu tiên sửa nguyên nhân gốc
Không nên quá phụ thuộc vào ob_start().
Giải pháp tốt nhất vẫn là:
-
loại bỏ output không cần thiết,
-
tối ưu cấu trúc mã nguồn,
-
kiểm soát thứ tự xử lý header.
Kiểm tra đúng file và dòng lỗi
Thông báo lỗi luôn chỉ rõ:
Bạn nên kiểm tra đúng vị trí đó thay vì sửa lan man toàn dự án.
Kiểm tra lại toàn bộ chức năng sau khi sửa
Sau khi xử lý lỗi, hãy kiểm tra lại:
để đảm bảo header hoạt động bình thường và website không còn cảnh báo.