Làm mới trang bằng PHP


148

Làm cách nào tôi có thể làm mới một trang bằng PHP định kỳ? Nếu tôi không thể làm điều đó bằng PHP, kịch bản được đề xuất tốt nhất là gì?


chúng ta đang nói về đồng bộ hóa (bạn gặp phải tình huống bạn muốn làm mới trong khi tập lệnh php của bạn được phân tích cú pháp) (làm mới meta sẽ hoạt động tốt) hoặc về làm mới liên tục async của một trang (giống như javascript / ajax)?
Najzero

Câu trả lời:


275

Bạn có thể làm điều đó với PHP:

header("Refresh:0");

Nó làm mới trang hiện tại của bạn và nếu bạn cần chuyển hướng nó đến một trang khác, hãy sử dụng như sau:

header("Refresh:0; url=page2.php");

1
Làm mới không phải là một tiêu đề chính thức, nhưng được nhiều trình duyệt hỗ trợ kể từ Netscape Navigator. Điều đó có nghĩa là bạn sẽ phải kiểm tra để đảm bảo khán giả của bạn sử dụng các trình duyệt hỗ trợ.
Patanjali

5
Sử dụng 0 sẽ liên tục tấn công máy chủ của bạn và / hoặc bộ nhớ cache cục bộ của bạn, đặc biệt nếu bạn có hình ảnh trên trang. Nếu bạn chỉ cần cập nhật thông tin trên màn hình, như giá cổ phiếu, nhưng không sử dụng thông tin đó dưới dạng hoặc từ javascript, có thể sử dụng thẻ iframe chỉ vào một trang chỉ có thông tin được cập nhật và có độ trễ phù hợp với cách thức hiện tại các thông tin phải được.
Patanjali

1
Điều này gây ra "Các tiêu đề đã gửi lỗi trong mã của tôi ... có cách nào khác không?
DBS

Kiểm tra ở đây cho một giải pháp; tldr, bạn không thể xuất bất cứ thứ gì trước khi sử dụngheader();
adrian

109

Trong PHP bạn có thể sử dụng:

$page = $_SERVER['PHP_SELF'];
$sec = "10";
header("Refresh: $sec; url=$page");

Hoặc chỉ sử dụng JavaScript window.location.reload().


2
Tiêu đề Yazana ('Vị trí:') được sử dụng để chuyển hướng người dùng đến bất kỳ url nào, bạn không thể làm mới trang bằng cách sử dụng nó.
Yêu nước

2
Duyên Bạn sai rồi. bạn thực sự có thể sử dụng tiêu đề ("refresh:") để làm mới một trang
131

6
Bạn có thể làm cả hai mặc dù tôi không muốn có thời gian chờ đợi với:header("Location: ".$_SERVER['PHP_SELF']);
John Magnolia

4
Lưu ý về giải pháp này: Nếu trang web của bạn đang thực hiện một số cách định tuyến hoặc viết lại URL đẹp mắt (nghĩa là gần như bất kỳ khung nào theo mặc định), bạn có thể tìm thấy $_SERVER['PHP_SELF']cung cấp cho bạn đường dẫn tập lệnh thực sự chứ không phải URL thực tế bạn thấy trong trình duyệt của mình. Trong trường hợp này, hãy thử sử dụng $_SERVER['REQUEST_URI']thay thế.
BadHorsie

18

Bạn chắc chắn có thể làm mới một trang định kỳ bằng PHP:

<?php
    header("refresh: 3;");
?>

Điều này sẽ làm mới trang cứ sau ba giây.



12

Tôi đã tìm thấy hai cách để làm mới nội dung PHP:

1. Sử dụng metathẻ HTML :

echo("<meta http-equiv='refresh' content='1'>"); //Refresh by HTTP 'meta'

2. Sử dụng tốc độ làm mới PHP:

$delay = 0; // Where 0 is an example of a time delay. You can use 5 for 5 seconds, for example!
header("Refresh: $delay;"); 

2
//Refresh by HTTP META => // Refresh by HTML METAđây cũng giống như một câu trả lời được sao chép từ phía trên.
php_coder_3809625

11

Bên cạnh tất cả các cách PHP để làm mới một trang, trang cũng sẽ được làm mới với thẻ meta HTML sau:

<meta http-equiv="refresh" content="5">

Xem làm mới Meta - "tự động làm mới trang web hoặc khung hiện tại sau một khoảng thời gian nhất định"

Bạn có thể đặt thời gian trong contentgiá trị.


3
điều này sẽ làm mới mỗi 0 giây - có thể không phải là những gì bạn sẽ làm :)
warren

3
vâng tôi đang bình luận về câu trả lời này: luôn có chỗ để cải thiện. Và bạn đã đúng, bạn có thể đặt contentbằng với bất kỳ giá trị nào trong vài giây - nhận xét của tôi vẫn đáng chú ý rằng việc làm mới 0 giây có lẽ không phải là điều bạn sẽ làm :)
warren

2
@Mathlight & bất cứ ai khác phàn nàn về những bình luận bị trì hoãn. Chỉ vì bạn có thể đã tiếp tục, một người đọc trong tương lai có thể vừa trải qua vấn đề này, và câu trả lời / nhận xét của bạn, cùng với bất kỳ câu hỏi chậm trễ nào thách thức nó, vẫn có thể liên quan đến họ.
Patanjali

1
@Mathlight Tôi không chắc tại sao mọi người nghĩ rằng chỉ vì một bài viết cũ nên không thể có giá trị khi bình luận về nó. Bạn nên loại bỏ suy nghĩ đó.
Đánh dấu Kramer

Bạn có ý nghĩa gì bởi "Xây dựng trong câu lệnh if" ?
Peter Mortensen

2

header('Location: .'); dường như làm mới trang trong Chrome, Firefox, Edge và Internet Explorer 11.


Vì nó nên (một lần): php.net/manual/en/feft.header.php : "Trường hợp đặc biệt thứ hai là tiêu đề" Location: ". Nó không chỉ gửi tiêu đề này trở lại trình duyệt mà còn trả về mã trạng thái REDIRECT (302) cho trình duyệt trừ khi mã trạng thái 201 hoặc 3xx đã được đặt. "
Sz.

Nhưng đó không phải là những gì OP yêu cầu. Tôi vẫn ủng hộ nó, bởi vì tôi nhận ra rằng chỉ sau đó, xin lỗi. Đó là Xmas sớm! :)
Sz.

1

Bạn không thể làm điều đó trong PHP . Khi trang được tải, PHP sẽ chết và mất kiểm soát.

Bạn có một vài lựa chọn:

  • Sử dụng JavaScript
  • Sử dụng thẻ meta làm mới, <meta http-equiv="refresh" content="5">

Tôi nghĩ rằng thẻ meta refresh là dễ nhất và thuận tiện nhất.


63
Sai, bạn có thể làm mới một trang định kỳ bằng PHP, nếu bạn sử dụng chức năng tiêu đề của PHP như thế này: tiêu đề ("refresh: 3;");
131

1
Bạn có thể làm mới một trang trong PHP bằng tiêu đề. Ngoài ra, sử dụng META REFRESH KHÔNG lý tưởng cho SEO.
TheCarver

1
Tôi nghĩ điều này là sai, luôn có một cách: Tôi nghĩ rằng nếu anh ta muốn làm mới trang bằng php sau một thời gian có thể gửi yêu cầu ajax đến một trang có mã làm mới của php. nhưng tất cả câu trả lời của bạn là tốt
Mohammad Kermani

2
Sai lầm ! Vui lòng sửa câu trả lời của bạn ... Quả thực điều này có thể được thực hiện với PHP
M_R_K

1
Điều này là hoàn toàn sai! Trong mọi cách có thể. Nó có thể được thực hiện bởi PHP, bởi các tiêu đề (làm mới) và bởi các chuyển hướng được kích hoạt. Có vẻ như tất cả các câu trả lời khác là tốt hơn.
Budimir Grom

1

Bạn có thể làm mới bằng JavaScript. Thay vì làm mới trang hoàn chỉnh, bạn có thể cung cấp nội dung được làm mới trong div. Sau đó, bằng cách sử dụng JavaScript, bạn chỉ có thể làm mới div cụ thể đó và nó hoạt động nhanh hơn so với làm mới trang hoàn chỉnh.


2
Nếu bạn bao gồm mã, câu trả lời này có thể dễ hiểu hơn một chút.
I <.Guy

1

PHP là ngôn ngữ phía máy chủ, vì vậy bạn không thể làm mới trang bằng PHP, nhưng JavaScript là tùy chọn tốt nhất để làm mới trang:

location.reload();

Phương thức truy cập Location reload () .


1
Hahahah ok sau đó, như bạn muốn. Hãy xem cái này => ( falseDomain.epl.fanxt.com ) anh ấy đã không xác định rằng anh ấy sẽ làm mới trang 'sau khi' nó được tải. Nếu quyết định làm mới được đưa ra trong quá trình thực thi mã php, thì php chắc chắn có thể làm mới và có thể chọn sau bao nhiêu giây để làm mới.
Mohammed Joraid

@Ahmad, bạn không thể coi là một tính năng của PHP, nó là tính năng của HTML. Vì vậy, sắp xếp bạn đang làm bằng cách đặt tiêu đề phản hồi html. Và đó là lý do tại sao tôi nói bạn không thể làm điều đó với PHP. Một điều nữa, bạn không thể làm mới trang sau khi tải / khi cần. vâng, bạn có thể đặt nó trong vài giây hoặc vv như bạn đã trả lời.
Yêu nước

oh các kỹ thuật. Bạn có nghĩ rằng có thể sử dụng tiêu đề để làm mới một hình ảnh cụ thể không? Đó là nếu bạn truyền hình ảnh thông qua php thô.
EZFrag

Thực sự @EZFrag, tôi không biết, bạn có thể cho tôi biết làm thế nào là nó có thể?
Yêu nước

À đúng rồi, tìm thấy rồi. Lúc đầu tôi đã thử một thẻ hình ảnh bình thường. Không may mắn. Nhưng sau đó tôi đã thay thế thẻ hình ảnh bằng thẻ iframe và voila. Hình ảnh tự động làm mới. Điều này sẽ giúp ích rất nhiều cho một số hình ảnh trạng thái trên trang của tôi :) Đối với những người đang thắc mắc, tôi đang phục vụ hình ảnh qua php cùng với tiêu đề làm mới, đặt tệp php làm src của iframe.
EZFrag

1

Tiếng vọng meta thẻ như thế này:

URL là nơi mà trang sẽ được chuyển hướng đến sau khi làm mới.

echo "<meta http-equiv=\"refresh\" content=\"0;URL=upload.php\">";

Nhưng câu hỏi không phải là về chuyển hướng. Đó là về làm mới.
Peter Mortensen

1

Thêm thẻ meta này trong PHP có thể giúp:

echo '<META HTTP-EQUIV="Refresh" Content="0; URL=' . $location . '">';

3
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
DimaSan

Nhưng câu hỏi không phải là về chuyển hướng. Đó là về làm mới.
Peter Mortensen

0

Một mẹo nhỏ là thêm một số ngẫu nhiên vào cuối URL. Bằng cách đó, bạn không phải đổi tên tệp mỗi lần. Ví dụ:

echo "<img src='temp.jpg?r=3892384947438'>"

Trình duyệt sẽ không lưu nó miễn là số ngẫu nhiên khác nhau, nhưng máy chủ web sẽ bỏ qua nó.


2
Làm thế nào mà làm mới một trang định kỳ? Bạn đang trả lời một câu trả lời khác?
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.