JeuWeb - Crée ton jeu par navigateur
[PHP] Sauvegarde de scores -> Créer un fichier tampon - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Sauvegarde de scores -> Créer un fichier tampon (/showthread.php?tid=5204)

Pages : 1 2 3


[PHP] Sauvegarde de scores -> Créer un fichier tampon - Furukoo - 27-02-2011

Bonjour
(désolé je viens encore poser une question de noob)

J'ai fait le script suivant :


<?php
$dm='scr';
$f='scr/'.stripslashes($_POST['u']);
$c=array();
if($_POST['u']!=''){
if (file_exists($f)){
if(file_get_contents($f)>$_POST['d']){
file_put_contents($f,$_POST['d']);
}
}else{
file_put_contents($f,$_POST['d']);
}
}
foreach(array_diff(scandir($dm),array('.','..')) as $f){
array_push($c,file_get_contents("{$dm}/{$f}").' '.$f);
}
echo '["'.implode('","', $c).'"]';
?>

Sur le serveur, dans le répertoire 'scr', j'enregistre pour chaque joueur 'u' un score 'd' ...

Si le nouveau score est plus petit que celui déjà enregistré je le remplace.
(Donc c'est le plus petit score qui est le meilleur, par exemple un temps plus rapide)

Chaque fois que j'appelle mon script, je parcours à nouveau mon répertoire ainsi que tous les fichiers.
je renvois une chaine sous ce format :

["05821 Marc","02337 Orelia","07320 Pasca","03918 Romain68",
"02083 Tolo","05550 Tracker","02696 Yvan","06484 casablanca",
"02584 didi14","02170 didie","07572 ern34","03353 ferna","06147 hernandez",
"07260 hjj","07917 jflx","05571 jiji","06898 microbius","06763 mimo",
"03526 pat","04930 samisam"]

Je voudrais que cette chaine soit mise en tampon dans un fichier pour éviter de re parcourir le répertoire à chaque fois,
mais que le fichier tampon soit mis à jour lorsqu'on écrit un nouveau score.

Quelqu'un a déjà fait ça ?

Merci coop


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - Sephi-Chan - 27-02-2011

Petite question : Pourquoi faire ça ? Pourquoi souhaites-tu avoir un fichier par joueur ?
Ça nous aidera à répondre efficacement, car là, sans détail, je pense que ce n'est pas pertinent, il y a bien des moyens plus efficaces pour du stockage par clé/valeur.


Sephi-Chan


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - niahoo - 27-02-2011

C'est ça que tu veux ?
<?php 
$dm='scr';
$f='scr/'.stripslashes($_POST['u']);
$c=array();
if($_POST['u']!=''){
if (file_exists($f)){
if(file_get_contents($f)>$_POST['d']){
file_put_contents($f,$_POST['d']);
}
}else{
file_put_contents($f,$_POST['d']);
}

foreach(array_diff(scandir($dm),array('.','..')) as $f){
array_push($c,file_get_contents("{$dm}/{$f}").' '.$f);
}

$cache = fopen('monfichiertampon', 'w');
fputs($cache, '["'.implode('","', $c).'"]');
fclose($cache);
}
echo file_get_contents('monfichiertampon');

perso j'utiliserais une db !


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - Furukoo - 27-02-2011

(27-02-2011, 02:22 PM)Sephi-Chan a écrit : Petite question : Pourquoi faire ça ? Pourquoi souhaites-tu avoir un fichier par joueur ?
Ça nous aidera à répondre efficacement, car là, sans détail, je pense que ce n'est pas pertinent, il y a bien des moyens plus efficaces pour du stockage par clé/valeur.

Sephi-Chan

Je pensais que c'était une bonne façon de faire. Sad

Je suis arrivé à ça mais il ya une partie doublée

<?php 
$dm='scr';
$f='scr/'.stripslashes($_POST['u']);
$c=array();
if($_POST['u']!=''){
if (file_exists($f)){
if(file_get_contents($f)>$_POST['d']){
file_put_contents($f,$_POST['d']);
foreach(array_diff(scandir($dm),array('.','..')) as $f){
array_push($c,file_get_contents("{$dm}/{$f}").' '.$f);
}
file_put_contents('t','["'.implode('","', $c).'"]');
}
}else{
file_put_contents($f,$_POST['d']);
foreach(array_diff(scandir($dm),array('.','..')) as $f){
array_push($c,file_get_contents("{$dm}/{$f}").' '.$f);
}
file_put_contents('t','["'.implode('","', $c).'"]');
}
}
echo file_get_contents('t');
?>

Je veux bien une solution pour le stockage clé/valeur autre que par fichier


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - niahoo - 27-02-2011

quand il y a une partie doublée tu en fais une fonction, c'est la base.


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - Furukoo - 27-02-2011

(27-02-2011, 03:30 PM)niahoo a écrit : quand il y a une partie doublée tu en fais une fonction, c'est la base.

:pleure2:


<?php
if($_POST['u']!=''){
$f='scr/'.stripslashes($_POST['u']);
if (file_exists($f)){
if(file_get_contents($f)>$_POST['d']){
file_put_contents($f,$_POST['d']);
w($f);
}
}else{
w($f);
}
}
echo file_get_contents('t');

function w($f){
$dm='scr';
$c=array();
foreach(array_diff(scandir($dm),array('.','..')) as $f){
array_push($c,file_get_contents("{$dm}/{$f}").' '.$f);
}
file_put_contents('t','["'.implode('","', $c).'"]');
}
?>

Comme ça ?


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - Sephi-Chan - 27-02-2011

A mon sens, la base de données est plus adaptée.

Si tu as une table qui contient tes joueurs (ou une table de jointure entre un type de jeu et un joueur), alors autant créer une colonne pour le nombre record de points.

Sinon, tu peux simplement faire une table avec une poignée de colonnes : le nom du joueur (une chaîne avec une contrainte d'unicité), le nombre record de points (un entier) et éventuellement la date de ce dernier record (un datetime).

Et ainsi, tu peux avoir une requête type :


$query = sprintf(
"INSERT INTO player_scores (player_name, maximum_score, updated_at) VALUES ('%s', %d, CURRENT_TIMESTAMP())
ON DUPLICATE KEY UPDATE maximum_score = VALUES(maximum_score), updated_at = VALUES(updated_at);",
$player_name,
$score
);

Cf. INSERT ... ON DUPLICATE KEY UPDATE

Et si tu veux vraiment utiliser un fichier, je pense qu'un unique fichier JSON est la meilleure solution tant c'est simple à manipuler.


Sephi-Chan


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - php_addict - 27-02-2011

idem si c'est du stockage d'info mieux vaut le faire en base de donnée, SQL gèrera ca mieux que toi...

tu n'expliques pas le but de ta manoeuvre? c'est juste du stockage d'info? ou une version cache?


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - Furukoo - 27-02-2011

(27-02-2011, 05:52 PM)php_addict a écrit : idem si c'est du stockage d'info mieux vaut le faire en base de donnée, SQL gèrera ca mieux que toi...

tu n'expliques pas le but de ta manoeuvre? c'est juste du stockage d'info? ou une version cache?

Oui c'est juste pour stocker les infos.
(genre ce jeu : http://www.furukoo.fr/cms/articles.php?lng=fr&pg=81)
Je voudrais sans base de données.
Je trouve pas vraiment avec json.


RE: [PHP] Sauvegarde de scores -> Creer un fichier tampon - Sephi-Chan - 27-02-2011

(27-02-2011, 07:18 PM)Furukoo a écrit : Oui c'est juste pour stocker les infos.
(genre ce jeu : http://www.furukoo.fr/cms/articles.php?lng=fr&pg=81)
Je voudrais sans base de données.
Je trouve pas vraiment avec json.


$file_path = './scores.json';

// Récupération des données.
$scores_as_json = file_get_contents($file_path);
$scores = json_decode($scores_as_json, true);

// À ce stade, on a un tableau dans $scores, qu'on peut manipuler très simplement.
$scores['robert'] = 40;
$scores['jacky'] += 20;

// Pour sauvegarder le tableau à nouveau.
$scores_as_json = json_encode($scores);
file_put_contents($file_path, $scores_as_json);

Et ça te donne un fichier contenant :


{"robert":40,"jacky":20}

Du coup, tu as un seul fichier, que tu charges sous forme d'un tableau PHP tout bête (et à la fois très puissant), puis tu le sérialise quand tu as fini de le manipuler avec.

Et tu n'es pas limité à une valeur scalaire, tu peux mettre un tableau :


$scores['jacky']['maximum_score'] += 20;
$scores['jacky']['updated_at'] = 1298836390;

Et tu resors avec :


{"jacky":{"maximum_score":20,"updated_at":1298836390}}


Sephi-Chan