+1 au compteur
Bonjour,
Voilà je souhaite créer un compteur qui ajouterais +1 lorque l'on clique pour télécharger un fichier par exemple.
Je ne veux pas de base MySQL, juste un fichier texte poru que tout le mond epuisse l'utiliser sans le moindre problème.
Je pense me servir de cela :
http://www.ac-creteil.fr/util/programmation/scripts/compteurs.php
Mais voilà je ne sais pas comment faire pour qu'il prenne en compte deux choses à la fois.
Alors je pose la question est-ce possible ?
Et si oui, comment faire ?
Merci d'avance
@+
le 21/01/2006 à 14:48
i M@N
Hello !
Skoi "deux choses à la fois" ?
Si c'est incrémenter le compteur et lancer le download oui c'est possible :
<?php
//On ouvre le fichier en lecture/écriture
$fp = fopen("./compteur.txt","r+");
//On récupère le nombre dans le fichier
$nbvisites = fgets($fp,11);
//On incrémente le nombre de visites(+1)
$nbvisites++;
//On se place en début de fichier
fseek($fp,0);
//On écrit dans le fichier le nouveau nb
fputs($fp,$nbvisites);
//On ferme le fichier
fclose($fp);
//download
//On initialise notre variable (en supposant que le lien pour downloader est du type download.php?file=fichier.ext
if (isset($_GET['file'])) $file = ereg_replace('<[":]>','',$_GET["file"]); else $file = "";
//On définit le répertoire courant comme répertoire
$path = "./";
//On remplace les espaces par des - (sinon ça fonctionne pas avec mozilla)
$file = str_replace (' ','-', $file);
//On vérifie l'extension du fichier
$tableau = explode (".", $file);
$nb_element_1 = count ($tableau) -1;
$extension = $tableau[$nb_element_1];
//Si l'extension correspond à celles que l'on veut autoriser alors on lance le download
if (($extension == "mp3") || ($extension == "jpg")) {
header('Content-disposition: attachment; filename='.$file.'');
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: binary\r\n'); // Surtout ne pas enlever le \n
header('Content-Length: '.filesize($path.$file).'');
header('Pragma: public, no-cache');
header('Cache-Control: no-store, public, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($path.$file);
//On termine notre script
exit();
}
?>
@+...
One Love, One Heart, One Unity.
le 21/01/2006 à 15:13
i M@N
Reuh ...
Heu ... au fait ça fait +1 à mon compteur de messages ...
mouhahaha !
@+...
One Love, One Heart, One Unity.
Marchera pas.
Ton code est faux car il ne prend pas en compte les accès concurrents.
Regardez du côté des locks de fichiers (ou de tables), et les mutex/sémaphores.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
le 21/01/2006 à 19:12
Bzh
Il me semble que php gère tout seul, comme un grand les accès "concurrents" !!!!
Il n'est pas necessaire de se prendre la tête avec les sémaphores...
Impressionnant !
Merci beaucoup !!!!
le 22/01/2006 à 15:31
bibi
C'est exactement ce qu'on étudie actuellement en BD à la fac , et il faudrait mettre un verou exclusif le temps de l'écriture et mettre les autres éventuelles écriture en attente
Par contre comment faire ca en php oO
commit suicide
Salut,
Voici mon code pour les verrous exclusifs en espérant que ca t'aidera
$fichier = fopen("fichier.txt", "w+");
if (flock($fichier, LOCK_EX)) { //verrou exclusif
//2criture dans le fichier
flock($fichier, LOCK_UN); // libère le verrou
} else {
//Impossible de verrouiller le fichier
//Exécuter un code en conséquence
}
fclose($fichier);
@+
le 23/01/2006 à 22:39
Bzh
Il me semble vraiment, qu'en php il n'est pas necessaire....
Il le gère seul... Enfin, en général, pour de simple compteur, j'ai toujours préféré le fichier texte beaucoup plus rapide qu'une requette à la base.... Et je n'ai jamais eu de souci...
Je n'utilise pas de verrou...
Bye...
Bah dans le doute j'en ai mis un moi ...
Au pire ca fait que deux lignes de code en plus :D