Actualiser une page via un code sur une autre page. [Résolu]

Signaler
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009
-
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009
-
Bonsoir ,

Je cherche a creer une page php qui m'actualisera une autre page du site.
Je ne veus pas utiliser de meta pour la simple raison que l'actualisation se fera a des heures précises de la journée. :)
J'ai passé une bonne parti de mon aprem a chercher, mais je retombe toujour sur le meta.

Voici ce que je suis en train de réaliser.
Je viens de mettre en place un lecteur flash qui lit une playlist xml.
A certaines heure de la journée php genere une nouvelle playlist et écrase l'ancienne.
Pour que le lecteur flash prenne en compte le changement il faut que ca page soit actualisé (d'ou ma petite requete ^^).
Donc quand php aura generé le fichier xml, il devra actualiser la page du lecteur.

J'espere que j'ai été clair :)

Merci d'avance pour votre aide !!

21 réponses

Messages postés
9
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
8 mars 2007

Salut,
Si la playlist change seulement à des heures précise dans la journée, je ne vois pas pourquoi il faudrait faire un appel AJAX à tout les 10min.  Je propose un compte à rebours en javascript et quand le temps est écoulé, il recharge la page.  Le script php renseigne la variable du temps restant avant le prochain "refresh".

player.php :
<script language="javascript">
seconde = <?php
$refresh = array(9.30, 12.0, 15.0,16.15); // heure.minute
sort($refresh);
foreach ($refresh as $time)
{
 $time = explode(".", $time);
 if (time() < mktime($time[0], $time[1], 00)) {
  $next = mktime($time[0], $time[1], 00); break;
 }
}
echo $next-time(); // Seconde restante avant le refresh
?>;
window.setTimeout("window.location.reload()",seconde*1000);
</script>
Messages postés
23
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
17 mai 2009

Le code

$file = fopen('../maj.txt', 'w');
fwrite($file, time());
fclose($file)

crée un fichier s'appelant maj.txt (pour mise à jour) contenant le nombre de secondes entre le 1er janvier 1970 et la date de création du fichier.

pour la partie javascript :

<script language ="javascript">var time = 5 //Temps en minutes entre deux vérifications

// Fonction permetant de récuperer le contenu d'un fichier
function file(fichier)
     {
     if(window.XMLHttpRequest) // FIREFOX
          xhr_object = new XMLHttpRequest();
     else if(window.ActiveXObject) // IE
          xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
     else
          return(false);
     xhr_object.open("GET", fichier, false);
     xhr_object.send(null);
     if(xhr_object.readyState == 4) return(xhr_object.responseText);
     else return(false);
     };
//Fin de la fonction

//Au chargement de la page verifie si la variable maj est initialisée si non l'initialise avec pour valeur la dernière date de mise à jour de la playliste.
if(!maj){
 var maj = file('../maj.txt');
 setTimeout ('verifier()', 1000*60*time);
}

//Fonction de vérification : toutes les time minutes vérifie la date de mise à jour de la playliste si la date est différente le script reload la page.
function verifier(){
 var newmaj = file('../maj.txt');
 if (newmaj != maj) {
  document.location.reload();
 }
 setTimeout ('verifier()', 1000*60*time);
}

</script>

Voila. normalement ce script est fonctionelle mais je n'ai pas eu le temps de le tester entièrement.
Messages postés
9
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
8 mars 2007

REMqb >> bien pensé !

Puis-je sugérer une amélioration :
<strike>if(!maj){</strike>  // Pourquoi mettre un if ? la variable "maj" n'est nécessairement pas définie
               // car elle n'est pas définie plus haut et ce code est exécuté une seule fois au chargement.
 var maj = file('../maj.txt');
 set<strike>Timeout</strike> ('verifier()', 1000*60*time); // setInterval conviendrait mieux, je crois
 setInterval('verifier()', 1000*60*time);
<strike>}
</strike>
function verifier(){
 var newmaj = file('../maj.txt');
 if (newmaj != maj) {
  document.location.reload();
 }
<strike> setTimeout ('verifier()', 1000*60*time);</strike>  // Plus besoin si on utilise setInterval
}

<< J'ai essayé ton code en mettant 1mn, mais la page s'actalise toutes les secondes.>>
En fait, la première fois que REMqb a posté le code, le "*60" de la ligne 20 n'était pas présent.  Par contre dans son post suivant, c'est corrigé.

<<J'en conclu donc que "var time = 5" est en faite des secondes (punaise je suis fort) >>
C'est logique car le nombre de minute n'était pas converti en seconde ce qui entraînait l'actualisation à toutes les secondes.
Messages postés
115
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
7 mars 2008

Pourquoi tu n'essaie pas avec la fonction random de php de generer une playlist ou d'en choisir une (tu en créé plusieurs avant)
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

Je comprend pas ta phrase ^^'
Il me manque juste un petit code pour actualiser.
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

up
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

et tu ne peux pas dire à ton lecteur flash de reactualiser lui même sa playlist toutes les x heures ou un truc du genre??? A ma connaissance on ne peut pas forcer le rafraichissement d'une page chez tous les visiteurs
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

Une petite idée qui me vient comme ça :

La page qui contient le player regarde, par exemple toutes les 10 minutes, si une nouvelle playlist est disponible. Tu peux le faire avec de l'AJAX. Dans le cas positif, tu recharges la page avec du JavaScript (window.location.relaod()) ...

AkeluX
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

Je ne veus absolument pas que la page qui contien le lecteur se recharge tous les Xmn. Je veux que ca soie php qui actualise la page à distance. Le serveur creer une nouvelle playlist et actualise la page poiur lancer la nouvelle serie de vidéo.

Mais le coup que le reactualise lui meme la playlist, je n'y avait pas pensé. Je vais me renseigner.
Si quelqu'un a la solution pour le code php je suis toujour preneur :)

Merci !
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

Non non dans ma méthode, la page ne se recharge pas c'est juste un appel en AJAX complètement invisible pour l'utilisateur qui va vérifier s'il y a une nouvelle playlist ... Et la page se recharge uniquement s'il y a une nouvelle playlist !

A moins de faire ça directement dans le player flash, je vois pas d'autre solution ...

Quelqu'un à une autre idée ?

AkeluX
Messages postés
113
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
9 mars 2007

Ah net, très bonne idée ... J'avais pas vu le problème comme ça ...

AkeluX
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

A oui. C'est une exelente méthode ! C'est même plus simple que la méthode que je voulais appliquer. A la base je voulais que webcron lance le codphp qui actualise la page a des heures fixe.
Merci Tipat10 ! Je file essayer le code.
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

C'est nikel ! :) J'ai un petit soucis cependant.
Dans la page qui se reload, il y a une iframe avec un src qui change également selon les heures.
Quand le script applique le refresh, l'iframe à bien son nouveau lien mais le contenu ne change pas.
Par contre, ca marche quans j'actualise manuellement.

Vous pensez que ca coince à qu'elle endroit ?

http://mangasei.jexiste.fr
Messages postés
9
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
8 mars 2007

Salut,
J'ai tester dans IE6 et IE7 mais chez moi, ça marche très bien.
Peut tu poster le code de ta page SVP

essaie ceci pour voir si ça résoue ton problème

<script language="javascript">nom_du_frame.window.location.reload();</script><!-- Doit être placé APRÈS le frame -->
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

titap10, tu m'a ouvert les yeux. OO ^^ Je n'avais pas penssé a tester sous ie. Et effectivement ca marche tres bien !
Donc le soucis viendrais de firefox (pour une fois).

J'ai essayé de mettre en plus du premier reload, le script que tu m'a mis ci-dessus, et l'iframe ne s'ouvre pas du tout.
<script language="javascript">nom_du_frame.window.location.reload();</script>

Alors j'ai essayé ceci, mais firefox n'en veux toujour pas :
<script language="javascript">window.setTimeout("mon_iframe.window.location.reload()",seconde*1000);/script>

Ou encors, en supposant que le "1000" = 1sc, j'ai mis "2000", comme ca le reload aura eu le temp de voir que le src a changé ^^' :
<script language="javascript">window.setTimeout("mon_iframe.window.location.reload()",seconde*2000);/script>

Mais non plus. J'ai donc remis comme au depart.

Pour conclure, ca marche pour ie, mais pas pour firefox.
Si il n'y as pas de solution, de toute maniere cette fameuse page s'ouvre dans une popup, donc est-ce possible de forcer le lien à ouvrir la pop sous ie ? [je suis sous ff je clique "voir truc" et ca m'ouvre une popup ie]
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

Le code de ma page :
<hr size="2" width="100%" /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="styletv.css" rel="stylesheet" type="text/css">
<title>test</title>
</head>

<script language="javascript">
seconde = <?php
$refresh = array( 18.50, 18.51, 18.52, 18.53,); // heure.minute
sort($refresh);
foreach ($refresh as $time)
{
 $time = explode(".", $time);
 if (time() < mktime($time[0], $time[1], 00)) {
  $next = mktime($time[0], $time[1], 00); break;
 }
}
echo $next-time(); // Seconde restante avant le refresh
?>;
window.setTimeout("window.location.reload()",seconde*1000);
</script>

<?php
 include "include/config.php";
$retour = mysql_query("SELECT * FROM programme ");
$donnees = mysql_fetch_array($retour) or die("Impossible d'interroger la base de données");
mysql_close();
?>

" width="340px" height="315px" frameborder="no" >

Vous avez un sushi ? Consultez [aide.html l'aide].
 

</html>
Messages postés
23
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
17 mai 2009

Messages postés
23
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
17 mai 2009

Oups un petit bug

Je propose moi aussi ma solution :

Dans le fichier php qui génère la playlist en dessou de la création du fichier xml :

$file = fopen('../maj.txt', 'w');
fwrite($file, time());
fclose($file)

Dans la page contenant le player flash (entre <head>et</head>):

<script language="javascript">



var time = 5 //Temps en minutes entre deux vérifications



function file(fichier)
     {
     if(window.XMLHttpRequest) // FIREFOX
          xhr_object = new XMLHttpRequest();
     else if(window.ActiveXObject) // IE
          xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
     else
          return(false);
     xhr_object.open("GET", fichier, false);
     xhr_object.send(null);
     if(xhr_object.readyState == 4) return(xhr_object.responseText);
     else return(false);
     };
 
if(!maj){
 var maj = file('../maj.txt');
 setTimeout ('verifier()', 1000*time);
}



function verifier(){
 var newmaj = file('../maj.txt');
 if (newmaj != maj) {
  document.location.reload();
 }
 setTimeout ('verifier()', 1000*60*time);
}



</script>

Voila, en espérant t'aider.
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

Merci beaucoup ! Mais je ne comprend pas bien le code.
Tu pourrais me le commenter un peu plus s'il te plait ? sans vouloir t'embeter ^^'
Messages postés
98
Date d'inscription
lundi 14 juin 2004
Statut
Membre
Dernière intervention
16 mars 2009

Wow c'est genial ! L'idée de titap10 était deja beaucoup plus simple que mon idée de depart, mais la c'est encors encors plus simple puisque je n'ai finalement pas besoin de rentrer les heures. J'en suis ému ^^

J'ai essayé ton code en mettant 1mn, mais la page s'actalise toutes les secondes. J'en conclu donc que "var time = 5" est en faite des secondes (punaise je suis fort) ^^

La page qui genere la playlist genere maintenant aussi le fichier maj.txt, et la page qui vérifie les secondes de la derniere maj actualise correctement la page au bout du temp désiré.

Mais il y a un tout petit soucis; c'est que la page est actualisé a chaque fois même si il n'y a pas eu de mise à jour.