2010-10-17 37 views
5

Tôi có một chức năng cần chuyển hướng trang nếu một biến được đặt ...Chuyển hướng PHP SAU KHI gửi tiêu đề?

Vấn đề là, chức năng này nằm ở cuối trang php.

Điều này có nghĩa là tôi đã xuất nhiều thông tin, vì vậy tôi nhận được cảnh báo tiêu đề.

"Cảnh báo - Tiêu đề đã được gửi bởi ..."

Có cách nào để chuyển hướng sau khi tiêu đề được gửi không?

Cảm ơn

+0

Đây không phải là câu hỏi bảo mật. Bạn đang thực hiện 'print()' trước một 'header()' hoặc bạn có một kết hợp của các thẻ '' và ''. – rook

Trả lời

22

Những gì bạn cần làm là đặt ob_start() vào đầu rất của trang web, và ob_flush() vào cuối. Bằng cách này bạn không chạy vào tiêu đề đã gửi lỗi.

Xem those functions để tham khảo thêm.

+3

'ob_flush()' ở cuối là ẩn và có thể bỏ qua. Lợi ích của việc này là bạn sẽ không vô tình quay trở lại vấn đề này hàng tháng xuống dòng nếu bạn thêm nội dung đầu ra sau 'ob_flush()' ở đâu đó trong luồng điều khiển của ứng dụng của bạn, nơi cuộc gọi hàm đó không hiển thị. – eyelidlessness

+1

Đây là giải pháp sạch nhất của IMO; lưu ý rằng điều này hoạt động bằng cách đệm tiêu đề và nội dung và chỉ gửi tất cả chúng cùng nhau ở cuối trang. – Piskvor

+0

cũng không phải là tùy thuộc vào kích thước của outpout của bạn và số lượt truy cập trang chính xác này, nó thực sự có thể làm chậm trang của bạn do lưu trữ tất cả các chuỗi vào bộ nhớ. – ITroubs

12

Có nhiều cách, nhưng chúng về cơ bản cách giải quyết:

Đơn giản nhất là meta http-equiv:

<meta http-equiv="Refresh" content="0;http://www.example.com/newlocation"> 
  • một số trình duyệt sẽ không như thế này khi nó bên ngoài của phần tử <head>, và rơi vào chế độ quirks

Hoặc bạn có thể thử chuyển hướng JavaScript:

<script> 
    window.location = 'http://www.example.com/newlocation'; 
</script> 
  • rõ ràng sẽ không hoạt động nếu không có JavaScript.
+0

'http-equiv' tiêu đề phải nằm trong vài trăm byte đầu tiên của tài liệu hoặc trình duyệt sẽ không coi chúng là tiêu đề HTTP. – eyelidlessness

+0

@eyelidlessness: Thú vị, tôi không biết điều đó. [cần dẫn nguồn]? – Piskvor

+0

@Piskvor, nó có thể chỉ là một điều di sản. Tôi đang gặp sự cố khi tìm hiểu nội dung. Nhưng tôi nhớ lại trong ngày tài liệu của Microsoft đặc biệt cảnh báo các nhà phát triển đặt các thẻ meta tương đương HTTP trong N byte đầu tiên hoặc chúng sẽ không được coi là tiêu đề. – eyelidlessness

Các vấn đề liên quan