2009-04-10 39 views
11

Làm cách nào để tạm dừng một trang trong một số giây nhất định trước khi chuyển hướng người dùng đến trang HTML/PHP khác bằng PHP?Tạm dừng chuyển hướng PHP

+0

Tôi không bao giờ hiểu tại sao tôi phải chờ số x của giây để họ có thể chuyển hướng tôi đến một trang khác do tại sao tôi sẽ làm điều đó ? – Thomaschaaf

+0

Trở thành một số trình duyệt - hoặc cài đặt của trình duyệt - không cho phép chuyển hướng ... và hiển thị trang trung gian rõ ràng cho người dùng sau đó tải nhiều trang mà không hiểu điều gì đang xảy ra .. X (thường là 5 giây) ở đó để người dùng đọc tin nhắn;) – Strae

+0

@Thomaschaaf: Có một vài lý do có thể, a) bởi vì họ không nhận ra không có nhu cầu, b) quảng cáo, trong khi người dùng 'chờ đợi' họ có thể thấy thêm và nhấp, c phù hợp, mọi người làm như vậy mọi người mong đợi một trang không liên tục (tức là sếp của tôi đã khiến tôi triển khai một trang, mặc dù trang web của chúng tôi không tạo ra doanh thu quảng cáo chỉ vì anh ấy đã từng nhìn thấy nó và nghĩ rằng người dùng của chúng tôi cũng vậy.) – Louis

Trả lời

1

Cập nhật: công trình này, nhưng có thể không phải là giải pháp thích hợp nhất cho tình huống này. Xem ý kiến.

Đây có phải là những gì bạn đang tìm kiếm không?

<?php 
sleep(5); 
header("Location: http://www.example.com/"); 
exit(); 
?> 
+1

Thực sự làm việc? Tôi nghĩ rằng với chức năng ngủ, trình duyệt chỉ không tải trang đó (trong ví dụ của bạn) 5 giây .. nhưng không ném đầu ra – Strae

+0

@DaNieL Tôi chưa thử nghiệm điều này, vì vậy bạn có thể chính xác nó có hoặc không hoạt động tùy thuộc vào cài đặt máy chủ hoặc thời gian/địa điểm mà bạn gọi là mã này. – Daan

+0

Tôi vừa thử nghiệm, nó hoạt động, nhưng ngăn chặn tất cả các đầu ra khác .. afaik sleep sleep() funcion giữ tạm dừng toàn bộ php render, vì vậy imho không nên được sử dụng cho loại vấn đề này – Strae

3

2 tùy chọn khác là chuyển hướng Javascript bằng setTimeout() hoặc thẻ làm mới meta với thời gian chờ.

15

giải pháp Low-tech đòi hỏi không có Javascript hoặc thậm chí PHP:

<html> 
<head> 
    <title>Redirecting...</title> 
    <meta http-equiv="refresh" 
content="10;URL=http://www.newsite.com"> 
</head> 
<body> 
    You are being automatically redirected to a new location.<br /> 
    If your browser does not redirect you in 10 seconds, or you do 
    not wish to wait, <a href="http://www.newsite.com">click here</a>. 
</body> 
</html> 

Ưu điểm của giải pháp này hơn bằng cách sử dụng "Location:" tiêu đề là bạn không cần phải tạm dừng việc thực hiện kịch bản, mà sẽ xuất hiện cho người dùng như thể máy chủ đang bận hoặc kết nối của họ đã bị treo.

Giải pháp này cũng cung cấp cho người dùng tùy chọn tiếp tục đến trang mới ngay lập tức thay vì phải đợi x số giây trong khi trình duyệt của họ không hiển thị thông tin.

Chỉnh sửa: Tôi nghĩ cũng cần lưu ý rằng nếu bạn quyết định sử dụng phương thức header(), bạn cần đảm bảo thời gian ngủ() của bạn không quá dài. Tôi nghĩ hầu hết các trình duyệt đều tạo kết nối hết thời gian sau khi không nhận được bất kỳ dữ liệu nào từ máy chủ trong 1 phút. công trình

+0

Hãy cẩn thận - một số trình duyệt (như chrome và opera) sẽ không thực hiện theo cách này một cách chính xác – Strae

+0

Thật sao? Tôi không biết điều đó. Vâng, ít nhất họ có liên kết để bấm vào sau đó. – Calvin

+0

Có, tôi không nhớ một cách exacly nếu trình duyệt không xử lý đúng cách là safari, opera hoặc chrome .. tôi nhớ rằng là 2 trong số đó .... nhưng có thể họ đã khắc phục vấn đề này trong thời gian – Strae

33

này một nên:

<?php 
header('Refresh: 5; URL=http://yoursite.com/page.php'); 
//other code 
?> 

và sẽ cho phép người dùng của bạn để xem bất cứ loại đầu ra bạn muốn (Bạn sẽ được chuyển hướng trong giây X, nhấp yere nếu dont, vv ..)

+2

Tôi thực sự thích giải pháp này tốt hơn nhiều so với những gì tôi đăng. +1 – Calvin

+0

Tính năng này không hoạt động với mọi trình duyệt. – Gumbo

+1

thực sự? tôi thử nghiệm trên chrome, ff, tức là, opera và safari, tất cả trên môi trường cửa sổ, và tất cả các công trình như nhau. Bạn đã thử dùng hệ điều hành nào? Không thể là bất kỳ loại cài đặt trình duyệt nào? – Strae

8

không bao giờ sử dụng chế độ ngủ theo cách này. Ngay cả khi tải nhẹ máy chủ của bạn sẽ hết các kết nối http. Tệ nhất nếu tường lửa của bạn hết.

Tham số trễ trong tiêu đề chuyển hướng được thực hiện chính xác cho cùng một lý do.

0

Hãy thử:

<?php 
$url=base_url().'page_you_want_to_go_to' 
header('Refresh: X; URL=$url'); 
?> 

này sẽ cung cấp cho bạn sự linh hoạt bổ sung khi trao đổi giữa máy chủ localhost và từ xa.

0

đặt tiêu đề này vào tiêu đề.

<meta http-equiv="refresh" content="0.01;makensucces.html" /> 

trên địa điểm 0,01 bạn phải đặt giây, tôi đã sử dụng số thập phân.

và trên vị trí của makensucces.html bạn cần phải đặt tên khỏi tệp bạn muốn.

3

Nếu bạn muốn chờ đợi và sau đó quay trở lại trang trước đây là cách

$referrer = $_SERVER['HTTP_REFERER']; 

header ("Refresh: 2;URL='$referrer'"); 
Các vấn đề liên quan