Exécuter une page automatiquement

Eléphant du PHP | 109 Messages

11 nov. 2009, 01:36

Bonjour à tous !

Mon problème est assez spécial. En effet, je voudrais exécuter une page PHP à une heure précise même si personne ne la visite.

Un peu plus de concret :
J'ai un classement de personnage pour un jeu. Les niveaux de ses personnages sont d'abord pris du classement officiel du jeu et ensuite enregistrer dans ma BDD.
seulement voila, les joueurs modifient leur niveau de jour en jour. Si je ne fait rien mon classement sera vite erronée.
Donc il faut utiliser UPDATE. (là dessus il n'y a aucun problème).
Seul souci, c'est que pour utiliser UPDATE, il faut exécuter la page. (certain vont me dire "Prend directement le lvl du site officiel et affiche le sans passez par ta BDD !", mais je ne veux pas faire ça, et j'ai mes raisons. Donc s'il vous plait, conserver ce système, je vous en serait reconnaissant).

Bon, vu que je ne veux pas update à chaque exécution de la page, je le fait avec date()
EXEMPLE :
if($date_souhaitee_pour_update == date("d/m/Y"))
{
             *UPDATE*
}
Mais maintenant, imaginons que personne ne visite la page à l'heure / date fixe que j'aurais marquée, la base ne se met pas à jour.
Donc voila, est il possible de faire autrement pour UPDATE ma base?

Merci d'avance, et je reconnait que mon sujet n'est pas des plus clair et je m'en excuse d'avance! ;)
ANSI <font> <font> <font> <li> <p> <title> Mar I/O .NET

ViPHP
fab
ViPHP | 2657 Messages

11 nov. 2009, 02:24

Il te faut utiliser les crontab poru ça , mais dans ce il faut que tu disposes d'un accès chez ton hébergeur si tu es sur un mutualisé c'est rarement le cas, si tu as un dédié sous linux tu l'as :)

Sinon tu as un service ( certes payant mais ultra abordable ) qui te permet de le faire via le web c'est http://www.webcron.org

Après tu peux utiliser des solutions détourner en PHP mais ça oblige quelqu'un à visiter la page pour mettre à jour la base de donnée, par exemple pour tu pourrais vérifier si la date actuelle est supérieure à la date voulue pour l'UPDATE dans ce cas tu l'effectues et tu programmes une nouvelle date d'update
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 109 Messages

11 nov. 2009, 20:14

Merci de ta réponse ! :)

Je n'ai effectivement pas de serveur dédié. Donc j'ai essayé l'autre méthode qui était de faire ceci :
if($heure_souhaitee >> $heure_actuelle)
{
        *UPDATE*
}
le souci, c'est que une fois l'heure souhaitée passée, il va updater la base à chaque visite pendant des heures !

N'y a-t-il pas moyen de faire autrement?

Merci encore ! :D
ANSI <font> <font> <font> <li> <p> <title> Mar I/O .NET

Eléphant du PHP | 61 Messages

11 nov. 2009, 21:02

le souci, c'est que une fois l'heure souhaitée passée, il va updater la base à chaque visite pendant des heures !
N'y a-t-il pas moyen de faire autrement?
Oui ! il te suffit dés que le premier lance l'update de mettre dans le fichier un flag "update OK date heure"
Un sourire pour conclure ;-)

ViPHP
ViPHP | 1136 Messages

11 nov. 2009, 21:59

Pourquoi n'utilises tu pas une sorte de curseur ,

en gros , lorsque tu fais la maj , tu enregistres dans un endroit ( fichier , base .. ou tu veux en fait ) le timestamp de la maj.

Lorsque tu retournes sur ton site , tu vérifies si le timestamp actuel moins timestamp de la dernière maj ne dépasse pas l'intervalle minimum que tu as défini .

Si c'est le cas , tu fais une nouvelle maj , et tu mets à jour ton curseur qui permet de savoir ou tu en es .

Ch.

Eléphant du PHP | 109 Messages

14 nov. 2009, 18:27

Je vous remercie pour ces solutions (surtout celle avec le timestamp ^^) =) =D>
Elles m'ont effectivement débloqué.

Ce sujet est résolu :D
ANSI <font> <font> <font> <li> <p> <title> Mar I/O .NET