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?

Aan
źródło
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");
Peter Mortensen
źródło
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().

AboQutesh
źródło
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.

131
źródło
15

Jest to po prostu możliwe dzięki funkcji header () w PHP:

header('Refresh: 1; url=index.php');
Kamlesh
źródło
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;"); 
Thanos
źródło
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.

Mathlight
źródło
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.

Ben Guest
źródło
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.

JvdBerg
źródło
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.

Anoop
źródło
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 .

Patriks
źródło
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\">";
Prakash Patil
źródło
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 . '">';
Siddharth Shukla
źródło
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.

0x45
źródło
2
Jak to powoduje okresowe odświeżanie strony? Czy odpowiadasz na inną odpowiedź?
Peter Mortensen