Odśwież stronę za pomocą PHP


148

Jak okresowo odświeżać stronę za pomocą PHP? Jeśli nie mogę tego zrobić przez PHP, jaki jest najlepiej zalecany scenariusz?


czy mówimy o synchronizacji (napotykasz sytuację, w której chcesz odświeżyć się podczas analizowania skryptu php) refrehs (odświeżanie meta działałoby dobrze) czy o ciągłym odświeżaniu strony (bardziej jak javascript / ajax)?
— Najzero

Odpowiedzi:


275

Możesz to zrobić za pomocą PHP:

header("Refresh:0");

Odświeża twoją bieżącą stronę, a jeśli chcesz przekierować ją na inną stronę, użyj:

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

1
Odświeżanie nie jest oficjalnym nagłówkiem, ale jest obsługiwane przez wiele przeglądarek od czasu Netscape Navigatora. Oznacza to, że będziesz musiał przeprowadzić testy, aby upewnić się, że Twoi odbiorcy korzystają z przeglądarek obsługujących.
— Patanjali,

5
Używanie 0 będzie stale obciążać twój serwer i / lub lokalną pamięć podręczną, szczególnie jeśli masz obrazy na stronie. Jeśli potrzebujesz tylko zaktualizować informacje na ekranie, takie jak ceny akcji, ale nie używasz tych informacji w formularzu lub z javascript, być może użyj tagu iframe wskazującego na stronę zawierającą tylko aktualizowane informacje i z opóźnieniem odpowiednim do tego, jak aktualne informacje muszą być.
— Patanjali,

1
Powoduje to błąd „Nagłówki już wysłane” w moim kodzie ... czy jest inny sposób?
— DBS

Sprawdź tutaj, aby znaleźć rozwiązanie; tldr, nie możesz nic wyprowadzić przed użyciemheader();
— adrian

109

W PHP możesz użyć:

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

Lub po prostu użyj JavaScript window.location.reload().


2
Nagłówek Yazana („Lokalizacja:”) służy do przekierowania użytkownika na dowolny adres URL, nie można za jego pomocą odświeżyć strony.
— Patriks

2
Pratik. Mylisz się. rzeczywiście możesz użyć nagłówka ("refresh:"), aby odświeżyć stronę
— 131

6
Możesz zrobić jedno i drugie, chociaż wolę nie czekać z:header("Location: ".$_SERVER['PHP_SELF']);
— John Magnolia,

4
Uwaga na temat tego rozwiązania: jeśli Twoja witryna implementuje jakiś fajny routing lub przepisywanie adresów URL (tj. Domyślnie prawie każdy framework), może się okazać, że znajdziesz $_SERVER['PHP_SELF']prawdziwą ścieżkę skryptu, a nie rzeczywisty adres URL, który widzisz w przeglądarce. W takim przypadku spróbuj użyć $_SERVER['REQUEST_URI']zamiast tego.
— BadHorsie

18

Z pewnością możesz okresowo odświeżać stronę za pomocą PHP:

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

Spowoduje to odświeżenie strony co trzy sekundy.



12

Znalazłem dwa sposoby na odświeżenie zawartości PHP:

1. Za pomocą metatagu HTML :

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

2. Korzystanie z częstotliwości odświeżania 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 METArównież to wygląda na odpowiedź skopiowaną z góry.
— php_coder_3809625

11

Oprócz wszystkich sposobów odświeżania strony w PHP, strona zostanie również odświeżona za pomocą następującego metatagu HTML:

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

Zobacz Odświeżanie meta - „automatycznie odśwież bieżącą stronę internetową lub ramkę po określonym przedziale czasu”

Możesz ustawić czas w contentwartości.


3
to będzie się odświeżać co 0 sekund - prawdopodobnie nie to, do czego zmierzasz :)
— warren

3
tak, komentuję tę odpowiedź: zawsze jest miejsce na poprawę. I masz rację, możesz ustawić contentrówną dowolną wartość w ciągu kilku sekund - mój komentarz nadal jest wart odnotowania, że ​​odświeżanie 0 sekund prawdopodobnie nie jest tym, do czego zmierzasz :)
— warren

2
@Mathlight i ktokolwiek inny narzeka na opóźnione komentarze. Tylko dlatego, że mogłeś przejść dalej, przyszły czytelnik mógł właśnie doświadczyć problemu, a Twoja odpowiedź / komentarz, wraz z wszelkimi opóźnionymi, które go kwestionują, mogą nadal być dla niego istotne.
— Patanjali,

1
@Mathlight Nie jestem pewien, dlaczego ludzie myślą, że tylko dlatego, że post jest stary, komentowanie go nie może mieć wartości. Powinieneś pozbyć się tego myślenia.
— Mark Kramer

Co masz na myśli, mówiąc „Wbuduj instrukcję if z” ?
— Peter Mortensen

2

header('Location: .'); wydaje się, że odświeża stronę w Chrome, Firefox, Edge i Internet Explorer 11.


Tak jak powinno (raz): php.net/manual/en/function.header.php : "Drugim specjalnym przypadkiem jest nagłówek" Location: ". Nie tylko wysyła ten nagłówek z powrotem do przeglądarki, ale także zwraca kod statusu REDIRECT (302) do przeglądarki, chyba że kod statusu 201 lub 3xx został już ustawiony. "
— Sz.

Ale nie o to prosił PO. Nadal to głosowałem, bo zdałem sobie sprawę, że dopiero potem przepraszam. Wkrótce święta! :)
— Sz.

1

Nie możesz tego zrobić w PHP . Po załadowaniu strony PHP umiera i wymyka się spod kontroli.

Masz kilka opcji:

  • Użyj JavaScript
  • Użyj metatagu odświeżania, <meta http-equiv="refresh" content="5">

Myślę, że metatag odświeżania jest najłatwiejszy i najwygodniejszy.


63
Źle, możesz okresowo odświeżać stronę używając PHP, jeśli używasz funkcji nagłówka PHP w ten sposób: header ("refresh: 3;");
— 131

1
Możesz odświeżyć stronę w PHP za pomocą nagłówka. Ponadto używanie META REFRESH NIE jest idealne dla SEO.
— TheCarver

1
Myślę, że to źle, zawsze jest sposób: myślę, że jeśli chce odświeżyć stronę za pomocą php po jakimś czasie, może wysłać żądanie AJAX do strony, która ma odświeżający kod php. ale w ogóle twoja odpowiedź jest dobra
— Mohammad Kermani

2
Źle ! Popraw odpowiedź ... Rzeczywiście można to zrobić za pomocą PHP
— M_R_K,

1
To jest całkowicie błędne! W każdy możliwy sposób. Można to zrobić przez PHP, przez nagłówki (odświeżanie) i wyzwalane przekierowania. Wydaje się, że wszystkie inne odpowiedzi są lepsze.
— Budimir Grom,

1

Możesz odświeżyć za pomocą JavaScript. Zamiast pełnego odświeżania strony możesz odświeżyć zawartość w elemencie div. Następnie za pomocą JavaScript możesz odświeżyć tylko ten konkretny element div i działa to szybciej niż pełne odświeżenie strony.


2
Jeśli dołączysz kod, ta odpowiedź może być trochę bardziej zrozumiała.
— I.Am.A. Guy

1

PHP jest językiem po stronie serwera, więc nie możesz odświeżyć strony za pomocą PHP, ale JavaScript jest najlepszą opcją odświeżenia strony:

location.reload();

Metoda reload () wizyty Location Location .


1
Hahahah ok, jak sobie życzysz. Sprawdź to => ( błędna domena.epl.fanxt.com ) nie określił, że odświeży stronę „po” jej załadowaniu. Jeśli decyzja o odświeżeniu została podjęta podczas wykonywania kodu php, php z pewnością może odświeżyć się i może wybrać, po ilu sekundach ma zostać odświeżony.
— Mohammed Joraid,

@Ahmad, nie możesz uważać go za funkcję PHP, jest to funkcja HTML. Więc w sortowaniu robisz, ustawiając nagłówek odpowiedzi html. Dlatego powiedziałem, że nie da się tego zrobić z PHP. Inna sprawa, nie możesz odświeżyć strony po załadowaniu / gdy jest to potrzebne. tak, możesz ustawić to na kilka sekund lub itd. zgodnie z odpowiedzią.
— Patriks

och, szczegóły techniczne. Myślisz, że można użyć nagłówka, aby odświeżyć określony obraz? Dzieje się tak, jeśli przesyłasz obraz strumieniowo przez php grubego.
— EZFrag

Naprawdę @EZFrag, nie wiem, czy możesz mi powiedzieć, jak to możliwe?
— Patriks

Ach tak, znalazłem to. Na początku wypróbowałem normalny tag obrazu. Brak szczęścia. Ale potem zastąpiłem tag obrazu tagiem iframe i voila. Obraz odświeża się automatycznie. To bardzo pomoże z niektórymi obrazami stanu na stronie :) Dla tych, którzy się zastanawiają, udostępniam obraz przez php wraz z nagłówkiem odświeżania, ustawiając plik php jako źródło iframe.
— EZFrag

1

Powtórz metatag w ten sposób:

Adres URL to ten, do którego należy przekierować stronę po odświeżeniu.

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

Ale pytanie nie dotyczy przekierowania. Chodzi o odświeżenie.
— Peter Mortensen,

1

Dodanie tego metatagu w PHP może pomóc:

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

3
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
— DimaSan

Ale nie chodzi o przekierowanie. Chodzi o odświeżenie.
— Peter Mortensen,

0

Jedna sztuczka polega na dodaniu losowej liczby na końcu adresu URL. W ten sposób nie musisz za każdym razem zmieniać nazwy pliku. Na przykład:

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

Przeglądarka nie zapisze go w pamięci podręcznej, jeśli losowa liczba jest inna, ale serwer sieciowy ją zignoruje.


2
Jak to powoduje okresowe odświeżanie strony? Czy odpowiadasz na inną odpowiedź?
— Peter Mortensen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.