2010-04-25 69 views
24

Đây là tệp của tôi. Tôi muốn làm cho nó chuyển hướng, nhưng không có gì xảy ra. Để kiểm tra những gì đang xảy ra, tôi đã thêm một tiếng vang trước phần tiêu đề.Chuyển hướng vị trí tiêu đề PHP không hoạt động - tại sao?

Nó không ném lỗi hoặc chuyển hướng đến index.php. Chuyện gì thế? Tôi đã bật/tắt bộ đệm đầu ra, nhưng không có gì làm cho nó chuyển hướng. Tôi có thể làm gì?

<? 
error_reporting(E_ALL); 
echo 'This is an error'; 

header("Location: login.php"); 
die(); 
?> 

Cảm ơn

+1

Có * display \ _errors * được bật không? – Gumbo

+0

@Gumbo - Chắc chắn rồi! – Industrial

+3

Mã bạn đã cung cấp ít nhất là đầu ra 'Đây có phải là lỗi' không? – timdev

Trả lời

1

tôi nhắc nhở bản thân mình rằng tôi đã xDebug cài đặt trên môi trường thử nghiệm thực tế và sau khi googling nó, tôi tìm thấy trang web này: http://bugs.xdebug.org/view.php?id=532

Vì vậy, tôi sẽ tải về phiên bản cuối cùng của xDebug và thay đổi tệp php.ini cho phù hợp với tệp mới và mọi thứ hoạt động như một nét duyên dáng. Tiêu đề đang được gửi - chuyển hướng được thực hiện và các lỗi được hiển thị.

Cảm ơn mọi người đã giúp đỡ bạn!

43

Từ PHP documentation:

header() phải được gọi trước khi bất kỳ sản lượng thực tế được gửi đi, hoặc bằng thẻ HTML thông thường, dòng trống trong một tập tin, hoặc từ PHP.

Và trong trường hợp của bạn, bạn đang sử dụng echo trước header()

+0

Tôi biết điều đó và đó là lý do tại sao tôi đã tạo ra một tiếng vang trước cuộc gọi header(). Nó làm cho một lỗi tại các máy chủ khác và nên làm điều này. Tại sao không có điều gì xảy ra? – Industrial

+7

Một thay thế cho tiêu đề thay đổi sẽ sử dụng: ' window.location.replace ('login.php') "?>' –

1

Bạn có thẻ ngắn kích hoạt? thử nó với thẻ dài <?php:

<?php 
error_reporting(E_ALL); 
header("Location: login.php"); 
die(); 
?> 
+0

Đúng vậy, tôi đã bật các thẻ ngắn và mọi thứ khác hoạt động tốt, ngoại trừ công cụ tiêu đề ... – Industrial

0

Display_errors có được bật không?
@Gumbo - Chắc chắn rồi!

tốt, chắc chắn là không. bởi vì

Để kiểm tra xem điều gì đang diễn ra, tôi đã thêm tiếng vang trước phần tiêu đề.

nếu bạn đã bật display_errors, nó sẽ hiển thị lỗi, ít nhất là khi bạn turned output buffering on.

Vì vậy, trước hết hãy đảm bảo bạn có thể thấy thông báo lỗi.
chỉ in ra một biến không xác định,

error_reporting(E_ALL); 
echo $undef9306; 

tôi chắc chắn bạn sẽ không nhìn thấy nó. Vì vậy, bạn phải bật hiển thị lỗi trên

Tiếp theo, ở phía máy chủ, bạn có thể sử dụng chức năng headers_sent() để xem các tiêu đề đã được gửi chưa. Về phía khách hàng, hãy sử dụng trình thám thính HTTP để xem có bất kỳ điều gì được gửi không

Và kiểm tra tệp của bạn cho BOM.

+0

Xin chào! Tôi không sợ. Display_errors được kích hoạt như đã nói, nhưng đó là xDebug gây ra điều này ... Cảm ơn rất nhiều vì đã giúp Col. – Industrial

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