09-02-2008, 11:11 AM
Je viens proposer ma solution.
Dans tous les autres langages quand on ne veut pas qu'un script soit executé 2 fois en meme temps, on utilise tout simplement les MutEx (Exclusion Mutuelle). Hors à ma connaissance pas de MutEx en PHP mais par contre il y a les Sémaphores (et le MutEx n'est rien d'autre qu'un semaphore binaire).
Il suffit de s'en servir ainsi
Dans tous les autres langages quand on ne veut pas qu'un script soit executé 2 fois en meme temps, on utilise tout simplement les MutEx (Exclusion Mutuelle). Hors à ma connaissance pas de MutEx en PHP mais par contre il y a les Sémaphores (et le MutEx n'est rien d'autre qu'un semaphore binaire).
Il suffit de s'en servir ainsi
Code PHP :
<?php
$semaphore = sem_get(1); //on recupere la semaphore qui a la clef 1
sem_acquire($semaphore); //on essaye de recupérer le semaphore, si celui ci est deja pris, le code patientera ici jusqu'à ce qu'il se libère
//ici le code critique
sem_release($semaphore); //on libère le semaphore pour qu'unautre utilisateur puisse le récupérer
Voila, ça permettra donc d'executer ton code critique jamais deux fois en mme temps sur ton serveur. Encore mieux, si tu veux tout simplement que ce ne puisse pas etre executé 2 fois en meme temps uniquement par le meme utilisateur, il te suffit de mettre l'ID du joueur en clef de semaphore.
Je ne l'ais encore jamais utilisé en PHP mais dans d'autres langages. Mais aux vues du manuel PHP (http://fr2.php.net/sem) c'est bien comme ça que fonctionnent les semaphore dans ce langage.