compter les téléchargements de fichiers audio en streaming

compter les téléchargements de fichiers audio en streaming - PHP - Programmation

Marsh Posté le 24-06-2007 à 16:04:58    

Bonjour,
J'ai voulu reprendre un code que j'avais tappé pour compter le nombre de téléchargements de fichiers sur mon site/ftp (qui fonctionne parfaitement) mais cette fois ci pour compter le nombre de personnes écoutant de la musique en streaming dewplayer.

 

Le problème est que à chaque fois qu'on écoute un moceau de musique malgrès qu'il se lit en streaming il se télécharge également sur le pc de l'utilisateur et le compteur de téléchargement est incrémenté de 2 au lieu de 1.
Pouvez-vous modifier mon code pour corriger cela ? (permettre une incrémentation de 1 et empecher le téléchargement du fichier audio sur le pc de l'utilisateur). :)

 

Sur la page content dewplayer :

 

($donnees['id'] et $donnees['nom']) reprensentent l'id et le nom du fichier à télécharger tirés de ma base sql.

 
Code :
  1. echo '<a href=dl.php?id='.$donnees['id'].'&amp;nom='.htmlentities($i);?>
  2. class='text1'>
  3. <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="200" height="20" id="dewplayer" align="middle"><param name="wmode" value="transparent"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="dewplayer.swf?mp3=<? echo htmlentities($donnees['nom']);?>&amp;showtime=1&amp;bgcolor=FFFFFF" /><param name="quality" value="high" /><param name="bgcolor" value="FFFFFF" /><embed src="dewplayer.swf?mp3=<? echo htmlentities($donnees['nom']);?>&amp;showtime=1&amp;bgcolor=FFFFFF" quality="high" bgcolor="FFFFFF" width="200" height="20" name="dewplayer" wmode="transparent" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></object>
  4. </a>
 


Sur la page contenant le compteur de téléchargements :

 
Code :
  1. <?php
  2. $id = isset($_GET['id']) ? $_GET['id'] : '';
  3. if (isset($id) && is_numeric($id)) {
  4.  mysql_connect("...." ) or die("Impossible de se connecter-SQL" );
  5.  mysql_select_db("...." );
  6.  mysql_query("UPDATE Fichiers SET dl = dl + 1 WHERE id = $id" );
  7.  header("Location: ".$_GET['nom']);  // là c'est sur qu'il y a quelque chose à changer :D
  8.  mysql_close();
  9. }
  10. ?>


Message édité par Pulsar- le 24-06-2007 à 20:39:17
Reply

Marsh Posté le 24-06-2007 à 16:04:58   

Reply

Marsh Posté le 24-06-2007 à 16:16:52    

Ca pu la faille ton code : Injection de SQL


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-06-2007 à 16:20:44    

Ma préocupation pour l'instant n'est pas la sécurité mais le problème que j'ai expliqué plus haut ;)

Reply

Marsh Posté le 24-06-2007 à 16:24:31    

Non en fait j'avais pas vu une ligne et devrait pas y avoir de pb de sécu.
Sinon pour ne pas compter deux téléchargements, je dirais sessions pour faire simple.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-06-2007 à 16:28:11    

Mouai.. c'est pas a solution à laquelle je m'attendais :P

 

Je suis sur qu'en modifiant quelques lignes de mon code on peut également y arriver; non ?

 

Moi c'est juste parce que je suis débutant en php/sql que je coince sur ce petit problème. :)


Message édité par Pulsar- le 24-06-2007 à 16:28:47
Reply

Marsh Posté le 24-06-2007 à 16:30:12    

Ba utiliser les sessions ça prend que quelques lignes, un p'tit exemple :

Code :
  1. <?php
  2. $id = isset($_GET['id']) ? $_GET['id'] : '';
  3. if (isset($id) && is_numeric($id)) {
  4.   session_start();
  5.   if(!isset($_SESSION['dl'])) $_SESSION['dl'] = array();
  6.   if(!in_array($id,$_SESSION['dl']))
  7.   {
  8.     mysql_connect("...." ) or die("Impossible de se connecter-SQL" );
  9.     mysql_select_db("...." );
  10.     mysql_query("UPDATE Fichiers SET dl = dl + 1 WHERE id = $id" );
  11.     mysql_close();
  12.     $_SESSION['dl'][] = $id;
  13.   }
  14.   header("Location: ".$_GET['nom']);
  15. }
  16. ?>


Message édité par dwogsi le 24-06-2007 à 16:30:29

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-06-2007 à 16:33:13    

Et pour empecher le téléchargement du fichier ligne 17 ?

Reply

Marsh Posté le 24-06-2007 à 16:36:01    

Mais pourquoi voudrais-tu empécher le télchargement du fichier?
Pour faire simple tu peux faire ça :

Code :
  1. <?php
  2. $id = isset($_GET['id']) ? $_GET['id'] : '';
  3. if (isset($id) && is_numeric($id)) {
  4.   // Démarrage sessions
  5.   session_start();
  6.   // On créé la variable si elle n'existe pas déjà
  7.   if(!isset($_SESSION['dl'])) $_SESSION['dl'] = array();
  8.   // On test si ya déjà eu téléchargement
  9.   if(!in_array($id,$_SESSION['dl']))
  10.   {
  11.     // Non pas encore
  12.     mysql_connect("...." ) or die("Impossible de se connecter-SQL" );
  13.     mysql_select_db("...." );
  14.     mysql_query("UPDATE Fichiers SET dl = dl + 1 WHERE id = $id" );
  15.     mysql_close();
  16.     $_SESSION['dl'][] = $id;
  17.     header("Location: ".$_GET['nom']);
  18.   }
  19.   // Oui, on envoit sur une page d'erreur
  20.   else header("Location: erreur.html" );
  21. }
  22. ?>
 

A noter que ce n'est pas une solution complètement sécurisé puisqu'il est toujours possible pour le visiteur d'accèder au fichier directement. Pour faire mieux il faudrait placer le fichier en question dans un repertoire protégé par htaccess par exemple et que ce soit un script php qui le lise et renvoit au client le contenu du fichier en question seulement lorsqu'il y est autorisé.


Message édité par dwogsi le 24-06-2007 à 16:38:49

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-06-2007 à 16:38:46    

Empecher le téléchargement du fichier ?
Et bien car la personne qui écoute la musique sur dewplayer ne veut pas la télécharger en meme temps sur son disque dur, elle veut seulement l'écouter en direct.

Reply

Marsh Posté le 24-06-2007 à 16:39:30    

Fait voir l'adresse de la page en question, parce que je ne suis pas sur qu'on ce soit bien compris là.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-06-2007 à 16:39:30   

Reply

Marsh Posté le 24-06-2007 à 16:41:03    

Effectivement...
 
Je te donne l'adresse de la page en mp :)

Reply

Marsh Posté le 24-06-2007 à 16:46:06    

Ok et bien dans ton cas en fait il faut que ton player flash lise le contenu du mp3 renvoyé par un script php. Donc, ton player tu lui dit de lire mp3.php?id=109&file=leFichier.mp3 par exemple pour lire le fichier numéro 109. Ensuite dans le script mp3.php faut que tu fasse quelque chose genre :

Code :
  1. <?
  2. // Incrémentation de ton compteur
  3. // et :
  4. echo file_get_contents($_GET['file']);
  5. ?>


avec peut être aussi quelques headers qui vont biens.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 24-06-2007 à 16:56:08    

Hum, ta solution me parait tout de même étrange.  
Faut savoir que dans l'histoire je ne veut pas changer de page à aucun moment. Je reste toujours sur la même page quoi qu'il arrive !
 
Si je fais un echo dans la page mp3.php je crains que cela ne respecte pas cette idée.
 
Je vais attendre les idées des autres forumeurs :)
Merci de ton attention dwogsi ;)

Reply

Marsh Posté le 25-06-2007 à 12:56:15    

Personne n'a donc d'idée sur le sujet ?

Reply

Marsh Posté le 25-06-2007 à 18:57:50    

...

Reply

Marsh Posté le 26-06-2007 à 19:17:30    

Donc il n'y a pas de solution ?

Reply

Marsh Posté le 03-07-2007 à 01:56:52    

Je n'ai toujours pas résolu le problème....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed