Actualiser une page en utilisant PHP


148

Comment actualiser périodiquement une page en utilisant PHP? Si je ne peux pas le faire par PHP, quel est le meilleur scénario recommandé?


parlons-nous de la synchronisation (vous rencontrez une situation où vous souhaitez actualiser pendant que votre script php est analysé) refrehs (meta refresh fonctionnerait bien) ou de l'actualisation continue asynchrone d'une page (plus comme javascript / ajax)?
Najzero le

Réponses:


275

Vous pouvez le faire avec PHP:

header("Refresh:0");

Il actualise votre page actuelle et si vous devez la rediriger vers une autre page, utilisez ce qui suit:

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

1
Refresh n'est pas un en-tête officiel, mais est pris en charge par de nombreux navigateurs depuis Netscape Navigator. Cela signifie que vous devrez tester pour vous assurer que votre public utilise des navigateurs compatibles.
Patanjali

5
L'utilisation de 0 martèlera continuellement votre serveur et / ou votre cache local, surtout si vous avez des images sur la page. Si vous avez seulement besoin de mettre à jour des informations à l'écran, comme les cours des actions, mais que vous n'utilisez pas ces informations dans un formulaire ou à partir de javascript, utilisez peut-être une balise iframe pointant vers une page avec uniquement les informations en cours de mise à jour, et avec un délai approprié à la façon dont courant l'information doit être.
Patanjali

1
Cela provoque l' erreur "En-têtes déjà envoyés" dans mon code ... y a-t-il un autre moyen?
DBS

Vérifiez ici pour une solution; tldr, vous ne pouvez rien afficher avant d'utiliserheader();
adrian

109

En PHP, vous pouvez utiliser:

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

Ou utilisez simplement JavaScript window.location.reload().


2
L'en-tête Yazana ('Location:') est utilisé pour rediriger l'utilisateur vers n'importe quelle URL, vous ne pouvez pas actualiser la page en l'utilisant.
Patriks

2
Pratik. Vous avez tort. vous pouvez en effet utiliser l'en-tête ("refresh:") pour rafraîchir une page
131

6
Vous pouvez faire les deux même si je préfère pas de temps d'attente avec:header("Location: ".$_SERVER['PHP_SELF']);
John Magnolia

4
Une note à propos de cette solution: Si votre site met en œuvre une sorte de routage ou de réécriture d'URL (c'est-à-dire presque n'importe quel framework par défaut), vous pourriez trouver $_SERVER['PHP_SELF']le vrai chemin du script, et non l'URL réelle que vous voyez dans votre navigateur. Dans ce cas, essayez d'utiliser à la $_SERVER['REQUEST_URI']place.
BadHorsie

18

Vous pouvez certainement actualiser une page régulièrement en utilisant PHP:

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

Cela actualisera la page toutes les trois secondes.



12

J'ai trouvé deux façons d'actualiser le contenu PHP:

1. Utilisation de la metabalise HTML :

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

2. Utilisation du taux de rafraîchissement 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 METAcela ressemble également à une réponse copiée d'en haut.
php_coder_3809625

11

Outre toutes les méthodes PHP pour actualiser une page, la page sera également actualisée avec la balise meta HTML suivante:

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

Voir Meta refresh - "actualise automatiquement la page Web ou le cadre actuel après un intervalle de temps donné"

Vous pouvez définir l'heure dans la contentvaleur.


3
cela sera actualisé toutes les 0 secondes - probablement pas ce que vous recherchez :)
warren

3
oui je commente cette réponse: il y a toujours place à l'amélioration. Et vous avez raison, vous pouvez définir contentune valeur égale à n'importe quelle valeur en secondes - mon commentaire vaut quand même la peine de noter qu'un rafraîchissement de 0 seconde n'est probablement pas ce que vous recherchez :)
warren

2
@Mathlight et quiconque se plaint du retard des commentaires. Juste parce que vous avez peut-être évolué, un futur lecteur vient peut-être de rencontrer le problème, et votre réponse / commentaire, ainsi que tout commentaire retardé le contestant, peut encore être pertinent pour lui.
Patanjali

1
@Mathlight Je ne sais pas pourquoi les gens pensent que ce n'est pas parce qu'un message est ancien qu'il ne peut y avoir aucune valeur à le commenter. Vous devriez vous débarrasser de cette pensée.
Mark Kramer

Que voulez-vous dire par "Construire dans l'instruction if à partir de" ?
Peter Mortensen

2

header('Location: .'); semble actualiser la page dans Chrome, Firefox, Edge et Internet Explorer 11.


Comme il se doit (une fois): php.net/manual/en/function.header.php : "Le deuxième cas particulier est l'en-tête" Location: ". Non seulement il renvoie cet en-tête au navigateur, mais il renvoie également un code d'état REDIRECT (302) dans le navigateur à moins que le code d'état 201 ou 3xx n'ait déjà été défini. "
Sz.

Mais ce n'est pas ce que le PO a demandé. Je l'ai encore voté, car je ne m'en suis rendu compte qu'après coup, désolé. C'est bientôt Noël! :)
Sz.

1

Vous ne pouvez pas le faire en PHP . Une fois la page chargée, PHP meurt et est hors de contrôle.

Vous avez quelques options:

  • Utilisez JavaScript
  • Utilisez la balise meta refresh, <meta http-equiv="refresh" content="5">

Je pense que la balise meta d'actualisation est la plus simple et la plus pratique.


63
Faux, vous pouvez actualiser une page périodiquement en utilisant PHP, si vous utilisez la fonction d'en-tête de PHP comme ceci: header ("refresh: 3;");
131

1
Vous pouvez actualiser une page en PHP en utilisant l'en-tête. De plus, utiliser META REFRESH n'est PAS idéal pour le référencement.
TheCarver

1
Je pense que c'est faux, il y a toujours un moyen: je pense que s'il veut rafraîchir la page avec php après un certain temps, il peut envoyer une requête ajax à une page qui a le code de rafraîchissement de php. mais à tout votre réponse est bonne
Mohammad Kermani

2
Faux ! Veuillez corriger votre réponse ... En effet, cela peut être fait avec PHP
M_R_K

1
C'est complètement faux! De toutes les manières possibles. Cela peut être fait par PHP, par en-têtes (actualisation) et par des redirections déclenchées. Il semble que toutes les autres réponses soient meilleures.
Budimir Grom

1

Vous pouvez actualiser à l'aide de JavaScript. Plutôt que l'actualisation complète de la page, vous pouvez donner le contenu à actualiser dans un div. Ensuite, en utilisant JavaScript, vous pouvez actualiser uniquement ce div particulier, et cela fonctionne plus rapidement que l'actualisation complète de la page.


2
Si vous incluez le code, cette réponse pourrait être un peu plus compréhensible.
I.Am.A.Guy

1

PHP est un langage côté serveur, vous ne pouvez donc pas actualiser la page avec PHP, mais JavaScript est la meilleure option pour actualiser la page:

location.reload();

La méthode visit Location reload () .


1
Hahahah ok alors, comme tu veux. Vérifiez ceci => ( falseDomain.epl.fanxt.com ) il n'a pas spécifié qu'il actualiserait la page «après» son chargement. Si la décision d'actualiser a été prise lors de l'exécution du code php, php peut certainement actualiser et choisir après combien de secondes d'actualisation.
Mohammed Joraid

@Ahmad, vous ne pouvez pas considérer comme une fonctionnalité de PHP, c'est une fonctionnalité de HTML. Donc, en tri, vous faites en définissant l'en-tête de réponse html. Et c'est pourquoi j'ai dit que vous ne pouvez pas le faire avec PHP. Une autre chose, vous ne pouvez pas actualiser la page après le chargement / en cas de besoin. oui, vous pouvez le définir pendant quelques secondes ou etc. en fonction de votre réponse.
Patriks le

oh les détails techniques. Pensez-vous qu'il est possible d'utiliser l'en-tête pour rafraîchir une image spécifique? C'est si vous diffusez l'image via le php de grossier.
EZFrag

Vraiment @EZFrag, je ne sais pas, pouvez-vous me dire comment est-ce possible?
Patriks

Ah oui, je l'ai trouvé. Au début, j'ai essayé une balise d'image normale. Pas de chance. Mais ensuite, j'ai remplacé la balise d'image par la balise iframe, et voilà. L'image s'actualise automatiquement. Cela va beaucoup aider avec certaines de mes images de statut sur la page :) Pour ceux qui se demandent, je sers l'image via php avec l'en-tête de rafraîchissement, en définissant le fichier php comme le src de l'iframe.
EZFrag

1

Faites écho à la metabalise comme ceci:

L'URL est celle vers laquelle la page doit être redirigée après l'actualisation.

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

Mais la question ne concerne pas la redirection. Il s'agit de rafraîchir.
Peter Mortensen

1

L'ajout de cette balise meta en PHP peut aider:

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

3
Bien que cet extrait de code puisse résoudre la question, inclure une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
DimaSan

Mais la question ne concerne pas la redirection. Il s'agit de rafraîchir.
Peter Mortensen

0

Une astuce consiste à ajouter un nombre aléatoire à la fin de l'URL. De cette façon, vous n'avez pas à renommer le fichier à chaque fois. Par exemple:

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

Le navigateur ne le mettra pas en cache tant que le nombre aléatoire est différent, mais le serveur Web l'ignorera.


2
Comment cela rafraîchit-il périodiquement une page? Répondez-vous à une autre réponse?
Peter Mortensen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.