Cannot modify header information headers already sent by hướng dẫn năm 2024

Có khi nào bạn gặp lỗi “Cannot modify header information – headers already sent by (output started at C:\wamp\www\gau_bong25\gio_hang\them_sm.php:39) in C:\wamp\www\gau_bong25\gio_hang\them_sm.php on line 40” chưa?

Trong php đây là một lỗi rất thường xuyên gặp. Có hai nguyên nhân chính gây ra lỗi này đó là:

+ Trước khi gọi hàm header bạn đã echo một nội dung gì đó hoặc một khoảng trắng.

+ Hoặc là trước hàm header đã có lệnh nào đó bị warning (tức là dòng code nào đó trước dòng header bị lỗi)

trường hợp 1: Nếu trước khi gọi hàm header, bạn không dùng lệnh echo

Trường hợp này có thể lỗi là do có lệnh nào trước đó đã bị warning. Cách khắc phục ở đây là bạn thêm kí tự @ vào trước dòng lệnh bị warning (để tắt warning đi).

Trường hợp 2: Nếu trước khi gọi hàm header, bạn đã dùng lệnh echo. Bạn có thể tham khảo các phương án sau:

+Phương án 1: Chuyển nội dung echo về sau nội dung hàm header.

+Phương án 2: Sử dụng lệnh ob_start() và ob_flush()

– Gọi hàm ob_start() ở đầu file, hàm ob_start() có tác dụng khởi động vùng đệm của server để chứa tạm thời nội dung echo (xuất) vào đó. – Gọi hàm ob_flush() ở cuối file, hàm ob_flush() dùng để đưa dữ liệu từ vùng đệm của server về lại phần nội dung.

+Phương án 3: Nếu bạn có quyền thiết lập file php.ini của server

Thiết lập lại thuộc tính output_buffering= ON trong file php.ini

Trong wordpress khi bạn làm theme thì lỗi này cũng hay xảy ra, và nó xảy ra thường là ở file functions.php.

Khi nhìn vô dòng báo lỗi đó ta biết được gì? các bạn chú đường dẫn trong dấu ngoặc (“them_sm.php:39“), có nghĩa là lỗi này được phát sinh ở file them_sm.php và ở dòng 39, bạn vào file này và tìm những khoảng trắng, xuỗng hàng ở ngoài dấu ngoặc php ““. Trong vòng php thì không sao, những nếu các khoảng trắng, hoặc chữ hoặc bất cừ điều gì miễn sao có cái gì đó có dữ liệu trong html trong fiel đó.

Tác giả: Dương Nguyễn Phú Cường

Ngày đăng: Hồi xưa đó

Lỗi hiển thị

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp74\htdocs\web02\examples\login.php:8) in C:\xampp74\htdocs\web02\examples\login.php on line 21

Cannot modify header information headers already sent by hướng dẫn năm 2024
Nguyên nhân là trong lập trình web, chúng ta không thể thay đổi lại Response Header (khi header đã được gởi trả về cho Client). Theo lưu đồ trong hình, chúng ta có 3 đoạn code:

  1. Đoạn code 1: là code PHP, nhiệm vụ hiển thị tất cả các lỗi và cảnh bảo để tiện cho việc phát triển, gỡ lỗi trên môi trường Lập trình. Lưu ý, khi triển khai lên hệ thống thực tế (môi trường Production) không nên sử dụng, sẽ bị lộ thông tin -> hacker có thể tất công web của bạn.
  2. Đoạn code 2: là code HTML, khai báo , ngay khi thực hiện dòng code này, sẽ lập tức tạo 1 response trả về cho người dùng (Response Header đã được tạo và trả về người dùng).
  3. Đoạn code 3: là code PHP, chúng ta yêu cầu set giá trị cho Cookie (tức là thay đổi Response Header - đóng thêm 1 dấu mộc, hay thêm thông tin vào trong Response Header).

Do theo thứ tự viết code thực thi đoạn 1 -> 2 -> 3. Do đó chúng ta sẽ bị cảnh báo lỗi như trên.

Ví dụ đoạn code lỗi:

Học lập trình PHP - Nền tảng Kiến thức

Cách khắc phục

Có 2 cách để khác phục lỗi này

Cách 1: Bổ sung hàm Output Buffering

Bạn phải đảm bảo rằng, các các liên quan đến Response Header phải được thao tác trước khi trả về cho Client. Vì vậy tốt nhất là đưa vào bộ nhớ đệm trước khi trả về cho người dùng.

Cannot modify header information headers already sent by hướng dẫn năm 2024

Code fix:

- Dòng code yêu cầu Output Buffering // Cấu hình để PHP hiện tất cả Lỗi (ERROR) và Cảnh báo (WARNING) // Chỉ nên sử dụng khi đang phát triển ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); ?> Học lập trình PHP - Nền tảng Kiến thức

Đã bổ sung phần viết code, hết lỗi ✌

- Dòng code yêu cầu in ra tất cả và trả về reponse cho người dùng (Client) ?>

Cách 2: Thay đổi cấu hình của PHP

Step 1: Hiệu chỉnh file cấu hình của PHP

  • Nếu cài XAMPP mặc định thì nằm ở: C:\xampp\php\php.ini
  • Tìm đòng code, nếu không có thì bổ sung: output_buffering=4096

Step 2: Khởi động lại tiến trình Apache của XAMPP

Cannot modify header information headers already sent by hướng dẫn năm 2024
Done!

Bonus liên quan đến Header

header() không hoạt động header() hoạt động`

echo "Không thể tìm thấy trang, vui lòng thử một URL khác!";

header("HTTP/1.0 404 Not Found"); //<-- KHÔNG HOẠT ĐỘNG (WARNING LOG)

Học lập trình PHP - Nền tảng Kiến thức

1

Học lập trình PHP - Nền tảng Kiến thức

3

Học lập trình PHP - Nền tảng Kiến thức

4

Học lập trình PHP - Nền tảng Kiến thức

5`

Học lập trình PHP - Nền tảng Kiến thức

3

Học lập trình PHP - Nền tảng Kiến thức

8

Học lập trình PHP - Nền tảng Kiến thức

4