Hướng dẫn khắc phục lỗi “headers already sent” khi lập trình PHP

Hướng dẫn khắc phục lỗi “headers already sent” khi lập trình PHP

Đối với những ai đã từng làm quen và lập trình website với ngôn ngữ PHP thì chắc hẳn đã từng một lần gặp thông báo như thế này “Cannot send session cookie – headers already sent by“. Như các bạn đã biết mỗi yêu cầu của client lên web server đều được trả về gồm 2 phần Header Body. Hàm session_start() chỉ hoạt động khi ở trước nó khi chưa có body trả về vì vậy sẽ không thể bắt đầu một phiên làm việc được.

Hướng dẫn khắc phục lỗi PHP Headers already sent by

Hướng dẫn khắc phục lỗi PHP Headers already sent by

Hướng khắc phục

Có 2 nguyên nhân gây ra lỗi như trên như sau:

  • Trước hàm session_start() của bạn có sử dụng các hàm print, echo, printf, var_dump để in một nội dung ra thông qua các tập tin được gọi dưới hàm include, require hoặc trước thẻ <?php có một nội dung text gì đó đã được in ra màn hình

Nếu gặp trường hợp này, bạn chỉ cần rà soát lại các tập tin được nạp vào từ trước khi gọi hàm session_start rồi xóa bỏ nó đi nhưng vẫn sẽ gặp lỗi nếu rơi vào trường hợp dưới đây.

  • Bạn sử dụng bảng mã (encoding) UTF-8 BOM (byte order mark) cho tập tin .php của mình

Trường hợp này, bạn thực hiện chuyển đổi sang bảng mã  UTF-8 without BOM cho tập tin php của mình như hình dưới đây:

Chuyển đổi sang bảng mã UTF-8 without BOM

Chuyển đổi sang bảng mã UTF-8 without BOM

Như trên thì mình sử dụng phần mềm Notepad++ để chỉnh sửa code. Với bảng mã UTF-8 without BOM này các ký tự thừa phát sinh ở trước thẻ <?php sẽ được mất đi để bạn kiểm soát được header của mình.

Lời kết

Bạn cần phải kết hợp cả hai hướng giải quyết trên để có thể xử lý lỗi một cách triệt để nhất đảm bảo cho ứng dụng web của mình hoạt động ổn định, không xảy ra các lỗi thông thường không đáng có. Lỗi headers already sent là một lỗi thường xuyên hay gặp khi bạn sửa code cho một ai đó, hoặc mới làm quen lập trình với PHP, hi vọng với hướng dẫn này của mình, các bạn sẽ có thêm kinh nghiệm mới cho mình.