+1 au compteur

Répondre
Also know as
le 20/01/2006 à 23:26
Also know as
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

@+
i M@N
le 21/01/2006 à 14:48
i M@N
Hello !

Skoi "deux choses à la fois" ? smiley

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.
i M@N
le 21/01/2006 à 15:13
i M@N
Reuh ...

Heu ... au fait ça fait +1 à mon compteur de messages ...
mouhahaha ! smiley

@+...
One Love, One Heart, One Unity.
LupusMic
le 21/01/2006 à 15:25
LupusMic
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.
Bzh
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...
bibi
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
manu56
le 22/01/2006 à 16:05
manu56
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);

@+
Bzh
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...
manu56
le 24/01/2006 à 02:46
manu56
Bah dans le doute j'en ai mis un moi ...
Au pire ca fait que deux lignes de code en plus :D
Répondre
LoadingChargement en cours