Обновить страницу с помощью PHP

148

Как я могу периодически обновлять страницу, используя PHP? Если я не могу сделать это с помощью PHP, каков наилучший рекомендуемый сценарий?

Aan
источник
мы говорим о синхронизации (вы сталкиваетесь с ситуацией, когда вы хотите обновить во время анализа вашего php-скрипта) refrehs (мета-обновление будет работать нормально) или об асинхронном непрерывном обновлении страницы (больше похоже на javascript / ajax)?
Наджеро

Ответы:

276

Вы можете сделать это с помощью PHP:

header("Refresh:0");

Он обновляет вашу текущую страницу, и если вам нужно перенаправить ее на другую страницу, используйте следующее:

header("Refresh:0; url=page2.php");
Питер Мортенсен
источник
1
Обновить не является официальным заголовком, но поддерживается многими браузерами, начиная с Netscape Navigator. Это означает, что вам придется проверить, чтобы убедиться, что ваша аудитория использует поддерживающие браузеры.
Патанджали
5
Использование 0 будет постоянно ударять по вашему серверу и / или локальному кешу, особенно если у вас есть изображения на странице. Если вам нужно только обновить информацию на экране, например, цены на акции, но не использовать эту информацию в форме или из javascript, возможно, используйте тег iframe, указывающий на страницу только с обновляемой информацией, и с задержкой, соответствующей тому, как актуальная информация должна быть.
Патанджали
1
Это приводит к ошибке «Заголовки уже отправлены» в моем коде ... есть ли другой способ?
DBS
Проверьте здесь для решения; tldr нет, вы можете выводить ничего перед использованиемheader();
Adrian
109

В PHP вы можете использовать:

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

Или просто используйте JavaScript window.location.reload().

AboQutiesh
источник
2
Заголовок Yazana ('Location:') используется для перенаправления пользователя на любой URL, вы не можете обновить страницу, используя его.
Патрикс
2
Pratik. Вы неправы. Вы действительно можете использовать заголовок ("refresh:") для обновления страницы
131
6
Вы можете сделать оба, хотя я предпочитаю не ждать с:header("Location: ".$_SERVER['PHP_SELF']);
Джон Магнолия
4
Примечание об этом решении: если на вашем сайте реализована какая-то приятная маршрутизация или перезапись URL-адреса (т. Е. Практически любая инфраструктура по умолчанию), вы можете обнаружить, что $_SERVER['PHP_SELF']дает вам истинный путь к сценарию, а не фактический URL-адрес, который вы видите в браузере. В этом случае попробуйте использовать $_SERVER['REQUEST_URI']вместо.
BadHorsie
18

Вы можете периодически обновлять страницу, используя PHP:

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

Это обновит страницу каждые три секунды.

131
источник
12

Я нашел два способа обновления содержимого PHP:

1. Используя metaтег HTML :

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

2. Используя частоту обновления 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также это выглядит как ответ, скопированный сверху.
php_coder_3809625
11

Помимо всех PHP-способов обновления страницы, страница также будет обновлена ​​с помощью следующего метатега HTML:

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

См. Meta refresh - «автоматически обновлять текущую веб-страницу или фрейм через заданный интервал времени»

Вы можете установить время в пределах contentзначения.

Mathlight
источник
3
это будет обновляться каждые 0 секунд - вероятно, не то, что вы собираетесь :)
Уоррен
3
да, я комментирую этот ответ: всегда есть возможности для улучшения. И вы правы, вы можете установить contentравное любому значению в секундах - мой комментарий все еще стоит отметить, что обновление 0 секунд, вероятно, не то, что вы собираетесь :)
Уоррен
2
@Mathlight и кто-либо еще жалуется на задержку комментариев. Просто потому, что вы, возможно, пошли дальше, будущий читатель, возможно, только что столкнулся с проблемой, и ваш ответ / комментарий, наряду с любыми задержанными, оспаривающими его, могут все еще иметь отношение к ним.
Патанджали
1
@Mathlight Я не уверен, почему люди думают, что просто потому, что пост старый, не может быть никакого смысла комментировать его. Вы должны избавиться от этого мышления.
Марк Крамер
Что вы подразумеваете под "Построить в операторе if" ?
Питер Мортенсен
2

header('Location: .'); кажется, обновляет страницу в Chrome, Firefox, Edge и Internet Explorer 11.

Бен Гость
источник
Как и следует (один раз): php.net/manual/en/function.header.php : «Второй особый случай - заголовок« Location: ». Он не только отправляет этот заголовок обратно в браузер, но и возвращает REDIRECT (302) код состояния для браузера, если код состояния 201 или 3xx уже не был установлен ".
СЗ
Но это не то, о чем просил ОП. Я все еще проголосовал за это, потому что понял это только потом, извините. Это скоро Рождество! :)
Сз.
1

Вы не можете сделать это в PHP . Как только страница загружена, PHP умирает и выходит из-под контроля.

У вас есть несколько вариантов:

  • Использовать JavaScript
  • Используйте метатег обновления, <meta http-equiv="refresh" content="5">

Я думаю, что метатег обновления является самым простым и удобным.

JvdBerg
источник
63
Неправильно, вы можете периодически обновлять страницу, используя PHP, если вы используете функцию заголовка PHP следующим образом: header ("refresh: 3;");
131
1
Вы можете обновить страницу в PHP, используя заголовок. Кроме того, использование META REFRESH НЕ идеально для SEO.
TheCarver
1
Я думаю, что это неправильно, всегда есть способ: я думаю, что если он захочет через некоторое время обновить страницу с помощью php, он может отправить запрос ajax на страницу с кодом обновления php. но вообще твой ответ хорош
Мухаммед Кермани
2
Неправильно ! Пожалуйста, исправьте свой ответ ... Действительно, это можно сделать с помощью PHP
M_R_K
1
Это совершенно неправильно! Всеми возможными способами. Это может быть сделано с помощью PHP, заголовков (обновление) и с помощью инициируемых перенаправлений. Кажется, что все остальные ответы лучше.
Будимир Гром
1

Вы можете обновить с помощью JavaScript. Вместо полного обновления страницы вы можете передать содержимое в div. Затем с помощью JavaScript вы можете обновить только этот конкретный div, и он работает быстрее, чем полное обновление страницы.

Anoop
источник
2
Если вы включите код, этот ответ может быть немного более понятным.
I.Am.A.Guy
1

PHP - это серверный язык, поэтому вы не можете обновить страницу с помощью PHP, но JavaScript - лучший вариант для обновления страницы:

location.reload();

Метод Location Location reload () .

Patriks
источник
1
Хахахах хорошо, тогда, как вы хотите. Проверьте это => ( неправильный домен.epl.fanxt.com ), он не указал, что обновит страницу «после» ее загрузки. Если решение об обновлении было принято во время выполнения кода php, то php, безусловно, может обновиться и может выбирать, через сколько секунд обновляться.
Мохаммед Джорайд
@ Ахмад, вы не можете рассматривать как особенность PHP, это особенность HTML. Таким образом, вы делаете это, устанавливая заголовок ответа html. И именно поэтому я сказал, что вы не можете сделать это с помощью PHP. Другое дело, вы не можете обновить страницу после загрузки / когда это необходимо. да, вы можете установить его на несколько секунд и т. д., как вы ответили.
Патрикс
о технических деталях Думаете, можно использовать заголовок для обновления определенного изображения? Это если вы потоковое изображение через php из грубого.
EZFrag
Действительно @EZFrag, я не знаю, можете ли вы сказать мне, как это возможно?
Патрикс
Ах да, нашел это. Сначала я попробовал обычный тег изображения. Не повезло. Но затем я заменил тег изображения на тег iframe и вуаля. Изображение обновляется автоматически. Это очень поможет с некоторыми из моих изображений статуса на странице :) Для тех, кому интересно, я передаю изображение через php вместе с заголовком обновления, устанавливая файл php в качестве источника iframe.
EZFrag
1

Отобразите metaтег так:

URL - это тот, куда должна быть перенаправлена ​​страница после обновления.

echo "<meta http-equiv=\"refresh\" content=\"0;URL=upload.php\">";
Пракаш Патил
источник
Но вопрос не в перенаправлении. Речь идет об обновлении.
Питер Мортенсен
1

Добавление этого метатега в PHP может помочь:

echo '<META HTTP-EQUIV="Refresh" Content="0; URL=' . $location . '">';
Сиддхарт Шукла
источник
3
Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код.
DimaSan
Но вопрос не в перенаправлении. Речь идет об обновлении.
Питер Мортенсен
0

Одна хитрость заключается в добавлении случайного числа в конец URL. Таким образом, вам не нужно каждый раз переименовывать файл. Например:

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

Браузер не будет кэшировать его, пока случайное число отличается, но веб-сервер будет игнорировать его.

0x45
источник
2
Как это обновляет страницу периодически? Вы отвечаете на другой ответ?
Питер Мортенсен