Một HTTP response thông thường bao gồm 2 phần là header và content. Phần header trong 1 HTTP response chỉ ra bản chất của response và cách xử lý với chúng.
Ví dụ, 1 response có chỉ ra "Location" trong header , cái này báo cho trình duyệt để tự động chuyển đến Url được chỉ ra trong header.Hoặc 1 response có "Content-type" trong header, trình duyệt sẽ xử lý nội dung theo cách khác nhau theo loại nội dung như image, text, Flash,...
Header cũng được sử dụng khi bạn làm việc với session, có thể bạn ko thấy rõ được điều này, nhưng trong những hàm về session của PHP nó đều dùng thông qua cookie. Vì thế ngay khi bạn dùng session bạn đã tạo ra 1 HTTP header. Hàm session_start() khởi tạo 1 tập cookie và vì thế nó gửi 1 HTTP header xuống trình duyệt.
Phần còn lại của HTTP response là nội dung (content), cái này chắc bạn nhìn thấy nó dễ dàng rồi. Phần này phải được gửi đi sau headers, và một khi nội dung đã được gửi đi thì sẽ ko có header nào có thể được gửi xuống trình duyệt nữa. Nội dung bao gồm các đoạn mã HTML hoặc bất cứ thứ gì được tạo ra trong script của bạn. Khi bạn gọi echo() bạn đã xuất nội dung xuống trình duyệt rồi đấy.
Thế thì liên quan gì đến lỗi "Headers Already Sent"? Lỗi này xuất hiện khi bạn cố gắng gửi 1 HTTP header xuống trình duyệt sau khi nội dung đã được gửi xuống. Trong một HTTP response đều này là phạm pháp , ko được phép bởi vì " gạo đã nấu thành cơm" Roll Eyes , trình duyệt đã xử lý xong phần nội dung được gửi xuống rồi, header ko còn tác dụng gì nữa cả .
Và như tớ đã nói ở trên, session_start() gửi header xuống client, hàm header() cũng gửi header xuống ... vì thế 2 thằng này là dễ gặp lỗi "Headers Already Sent" nhất nếu như đã gửi nội dung xuống trình duyệt trước khi gọi chúng.
Giải pháp cho vấn đề này đơn giản chỉ là : hãy chắc chắn rằng bạn không gửi bất cứ nội dung gì xuống trình duyệt trước khi gọi các hàm có làm việc với header.Nói thì như thế nhưng thực tế cũng khá khó khăn vì ... chúng ta là người Việt, chúng ta phải viết tiếng Việt trong code , chúng ta phải dùng Unicode ... và đa số các Editor PHP, khi bạn chọn encoding cho file là Utf-8 nó sẽ kèm theo 3 kí tự ở đầu file gọi là BOM (byte order mark). Các kí tự này thuộc dạng vô hình nên chúng ta sẽ ko nhìn thấy chúng , nhưng máy tính thì thấy.... vì thế cho nên bạn có bỏ ra cả tháng trời để ngồi mò mẫm trong code xem có kí tự nào được xuất ra hay chưa thì cũng vô vọng. Cách đơn giản nhất là hãy chọn Utf-8 witthout BOM trong Editor của bạn .
Nhưng có một giải pháp khác an toàn nhàn nhã hơn là hãy giao tất cả những gì bạn xuất ra cho bộ đệm (output buffering ) nắm giữ, sau khi xử lý xong tất cả sẽ được cho vào đại pháo bắn 1 lần xuống trình duyệt ... không cần lo sau trước thứ tự gì nữa cả .
Hãy thêm vào đầu code của bạn hàm
ob_start();
và cuối code
ob_end_flush();
Theo diendanthietkeweb.com
| Phân trang trong ứng dụng PHP/MySQL < Lùi | Tiếp theo > Gửi email bằng PHP |
|---|
Tin mới hơn:
- 27/03/2009 18:39 - Bảo mật web trong lập trình PHP phần 3
- 27/03/2009 18:37 - Bảo mật web trong lập trình PHP phần 2
- 27/03/2009 18:36 - Bảo mật web trong lập trình PHP phần 1
- 27/03/2009 18:34 - Ảnh bảo mật
- 14/03/2009 00:09 - Phân trang trong ứng dụng PHP/MySQL
Tin cũ hơn:
- 09/03/2009 13:07 - Gửi email bằng PHP
- 23/02/2009 19:45 - Kết nối FTP bằng PHP
- 22/02/2009 12:58 - Tạo bộ đếm Simple Text Counters
- 22/02/2009 12:47 - Lập trình PHP Calculator
- 14/02/2009 20:36 - Sử dụng Namespaces trong PHP5
Download Game bóng đá PES8 Việt Nam
Tải game bóng đá FiFa 09
Tải game Dragon ball Z - 7 viên ngọc rồng
Tải Game Bóng Đá Pro Evolution Soccer 6 Việt Nam
Download PES 2011 patch Việt Nam PESVN
Tải Game Bóng Đá FIFA 2009 RIP 1 CD
Download Pro Evolution Soccer 2011
Download Game THE SIMS 3
Tải Game bóng đá PES 2009
Download PES 2011 demo
Thay đổi màn hình đăng nhập Windows 7 bằng tay
Một số hàm hay dùng trong JavaScript
Kiểm soát hoàn toàn trỏ chuột bằng bàn phím với NeatMouse
Choáng với concept của Windows Phone 8
Những đặc điểm ưu việt của Windows Phone
Ứng dụng gọi điện VoIP Viber sắp có mặt trên Windows Phone
Game Diablo 3 sắp có mặt trên Windows Phone Marketplace
37 trang css & xhtml web template miễn phí tuyệt đẹp
Những điều cơ bản cần biết về bàn phím chơi game - Gaming Keyboard
L.A. Noire: The Complete Edition - THETA [Full ISO/Action/2011] [13.37GB]
Download 7554 demo
Download Game PC, cập nhật liên tục (torrent)
PES 2012 ra mắt bản mở rộng đầu tiên vào 11/10
PES2012 - Full version - Ngôn ngữ và bình luận tiếng Anh
PES2012 - Blurry disable làm mịn đồ họa
PES 2011 PATCH 4.1 - TRANSFER UPDATE - RELEASED
Bộ sưu tập free PrestaShop Themes phần 3
Bộ sưu tập theme Prestashop miễn phí phần 2
Top 10 Free PrestaShop Themes
Download Prestashop 1.5
Download PrestaShop 1.4
Bổ sung Memcached vào PrestaShop 1.4
Hướng dẫn tích hợp Ngân Lượng vào PrestaShop
Sửa lỗi invalid carrier or no carrier selected trong PrestaShop
Cài đặt PrestaShop
Thiết kế giao diện PrestaShop Theme
Hướng dẫn cài đặt themes trong PrestaShop
Hướng dẫn cách thêm ngôn ngữ cho PrestaShop
Bộ sưu tập Giao diện Premium PrestaShop Themes chuyên nghiệp
Giới thiệu về website thương mại điện tử 2.0 Prestashop
10 smartphone “bom xịt” năm 2010
Pro Evolution Soccer 2010 - Sự trở lại của vị vua [RELOADED][PC Game]
Bài 1: Làm quen với hệ quản trị cơ sở dữ liệu Microsoft Access


