oxman a écrit :Il n'y a pas mieux que les cron, tu vas au devant d'ennui et de problème.Ca c'est faux...
Un problème que tu as déjà relevé, si personne click pendant 2h.
Et l'autre, si ton script est un peu long, la personne qui aura validé l'action qui charge ton script va croire que le site est lent, alors que c'est parce qu'il a déclenché un évènement spécial.
si personne ne clique pendant 2h rien n'empeche de dire au script de s'executer 2 fois de suite avec une petite boucle (ou d'optimiser mieux et de faire un script qui le prenne vraiment en compte)
Et j'avais posté une technique utilisant la redirection via header() qui expliqué que si on met du code aprés le header('location: ...'); celui ci sera executé sans que l'utilisateur s'en apercoive comme ci c'était un cron.
Le seul inconveniant c'est qu'effectivement le script ainsi lancé est lancé par le premier utilisateur arrivant sur le site aprés l'heure dite...
Donc avec peu de joueur les mise à jour ne seront pas faite à l'heure exact, mais çà personne ne s'en rendra compte puisque personne ne se sera encore connecté et que le premier arrivé aurra due afficher la page d'identification se qui laisseras tout le temps de faire les calculs necessaire (pour un faible nombre de joueur)
Avec beaucoup de joueur il n'y aurra vraiment plus de difference (puisque je le rappel avec ce systeme on ne vois pas de lenteur de chargement puisqu'on ne vois pas le script s'executer).
L'avantage etant qu'on est independant d'un cron et donc soit d'un service externe soit d'un type de configuration...
Donc moi je ferais çà comme çà:
Code PHP :
<?php
//prérequis (dont demarage session)
//si il y a au moins un script à lancé (çà peut etre une condition en fonction de l'heure par exemple)
if ($script>0) {
//on enregistre les superglobal utilisateurs en SESSIOn ou en chaine GET (oui car on pourra pas recuperer les variable POST comme çà malheureusement) là je le fais en session
$_SESSION['_POST']=$_POST;
//on redirige vers la meme page qui s'occuperas de faire les actions utilisateur et l'affichage
header('location: http://www.trucs.bd/cette_page.php?p=5');
//Execution des scripts habituelement lancé avec le cron
//On arrete le script (puisque le header est inclue pas besoin de faire les operation suivante puisqu'on a déjà était redirigé!)
exit;
}
//Ici on recupere eventuelement les données de POST
if (isset($_SESSION['_POST'])) {
$_POST=$_SESSION['_POST'];
unset($_SESSION['_POST']);
}
//Suite de header
?>
A noter que çà utilise le fait qu'une page fermé (en l'occurence redirigé) avant la fin de son execution termine tout de meme son execution, et ainsi nous permet de faire ce petit script...