Conseil webmaster

Tout ce qui concerne l'informatique en général : hardware, pilotes, logiciels...
Bien sûr ici on ne parle pas de gravure !

Conseil webmaster

Messagepar CapJack » 24 Mar 2007 21:17

Bonsoir à tous.

Voilà mon problème : je pensais avoir résolu les problèmes de comptage de téléchargement sur mon site, et je viens de me rendre compte que ce n'était pas le cas.

Le problème vient essentiellement des gestionnaires de téléchargement qui pratiquent des connexions multiples, et qui d'une part, ont tendance à faire planter les compteurs, d'autre part faussent complètement le décompte.

J'ai perdu mon après-midi à verrouiller encore un peu plus mon script et à interdire certains « download managers » (FDM par exemple, qui est une vraie m*rde), mais je ne suis pas satisfait, et j'en ai assez de passer mon temps là-dessus.

Je pense que j'atteins les limites de mes compétences, et je voulais savoir si quelqu'un connaissais un bon script de téléchargement en PHP qui résolve les problèmes sus-cités ; celui du site de GN, par exemple, c'est un gratuit qu'on peut facilement trouver, on c'est de la fabrication maison?
[Recompressez vos mp3 avec WinMP3Shrink] - Le port@il de CapJack
"travailler : vi. (latin populaire *trepaliare, torturer, du bas latin trepalium, instrument de torture)"
La preuve que les hommes sont tous égaux ? La bêtise humaine est uniformément répartie à la surface de la Terre...
Avatar de l’utilisateur
CapJack
Charlot promu Pierrot
Inconditionnel
 
Messages: 3877
Enregistré le: 21 Mar 2004

Messagepar Scaramanga » 24 Mar 2007 21:30

Le mien ! Je ne sais plus si c'est Gowap ou Numéro 6 qui l'avait codé.
Avatar de l’utilisateur
Scaramanga
Administrateur®
Administrateur®
 
Messages: 14171
Enregistré le: 05 Sep 2002

Re: Conseil webmaster

Messagepar gowap » 25 Mar 2007 1:47

CapJack a écrit:je voulais savoir si quelqu'un connaissais un bon script de téléchargement en PHP qui résolve les problèmes sus-cités ; celui du site de GN, par exemple, c'est un gratuit qu'on peut facilement trouver, on c'est de la fabrication maison?

Je vois pas trop de quoi tu parles en fait. Sur GN, c'est du fait maison, mais...y a rien de particulier qui est fait pour pallier les problemes dont tu parles.
Déroulement simplifié du processus :
- a partir de la fiche on clique sur le lien pour télécharger
- ca ouvre la fenetre popup de choix de serveur
- on choisit son serveur
- le compteur s'incrémente
- le popup se ferme
- la fiche est rechargée et redirigée vers le fichier via une simple instruction php :
Code: Tout sélectionner
header("Location: ". $url);
Aucune aide par mail ou Message Privé (n'insistez pas)
Prenez connaissance du règlement (à question illégale, sujet verrouillé),
commencez par faire des Recherches et décrivez clairement vos problèmes.

Lisez les articles et tutoriels
Avatar de l’utilisateur
gowap
Administrateur
Administrateur
 
Messages: 16112
Enregistré le: 01 Aoû 2002

Messagepar CapJack » 25 Mar 2007 17:13

Hmm... le problème avec cette méthode, c'est que tous les clics sont comptabilisés, même si le connecté interrompt le téléchargement.

Mais tu es sûr qu'elle résiste même aux gestionnaires de téléchargement réglés pour établir 6000 connexions simultanées (je n'exagère pas, j'ai des fichiers log qui le montrent - je me demande s'il ne s'agit pas de tentatives de hacking, mais je n'ai aucune preuve) ?
[Recompressez vos mp3 avec WinMP3Shrink] - Le port@il de CapJack
"travailler : vi. (latin populaire *trepaliare, torturer, du bas latin trepalium, instrument de torture)"
La preuve que les hommes sont tous égaux ? La bêtise humaine est uniformément répartie à la surface de la Terre...
Avatar de l’utilisateur
CapJack
Charlot promu Pierrot
Inconditionnel
 
Messages: 3877
Enregistré le: 21 Mar 2004

Messagepar gowap » 25 Mar 2007 17:41

CapJack a écrit:Hmm... le problème avec cette méthode, c'est que tous les clics sont comptabilisés, même si le connecté interrompt le téléchargement.

Tout a fait, mais que faire d'autre ? C'est le souci liés a tous les compteurs. Je veux dire, a partir du moment ou tu rediriges vers le fichier et que le téléchargement commence, tu ne maitrises plus rien. Tu n'as pas la main en sortie, tu ne sais pas si le transfert s'est effectué completement. Ca, tu peux juste le voir a posteriori dans les logs d'apache, ou tu as le nombre d'octets transférés pour le fichier en question.

Mais tu es sûr qu'elle résiste même aux gestionnaires de téléchargement réglés pour établir 6000 connexions simultanées (je n'exagère pas, j'ai des fichiers log qui le montrent - je me demande s'il ne s'agit pas de tentatives de hacking, mais je n'ai aucune preuve) ?

Je ne fais rien contre les gestionnaires de DL. Ce qui se passe une fois que la page redirige vers le fichier "ne me regarde plus". C'est plus du domaine du script php, c'est du domaine de transfert de fichier, du http pur. Et la en effet, les gens qui ont un gestionnaire de DL vont lancer des connexions simultanées sans que tu ne puisses rien faire (sauf a configurer apache; encore faut il pouvoir le faire, ex : mutualisé, hebergement gratuit). Tout ce que tu peux eventuellement faire contre les DL managers, c'est de bloquer les user agent qui contiennent le nom d'un outil connu. Mais ca se contourne, le gestionnaire peut tres bien etre configuré pour ne pas donner sa véritable identité.
Aucune aide par mail ou Message Privé (n'insistez pas)
Prenez connaissance du règlement (à question illégale, sujet verrouillé),
commencez par faire des Recherches et décrivez clairement vos problèmes.

Lisez les articles et tutoriels
Avatar de l’utilisateur
gowap
Administrateur
Administrateur
 
Messages: 16112
Enregistré le: 01 Aoû 2002

Messagepar CapJack » 25 Mar 2007 21:49

Justement, j'avais bien compris ça.

Pour info, on peut théoriquement ne comptabiliser que les téléchargements arrivés à terme avec un code genre celui-ci (que j'ai raccourci)

Code: Tout sélectionner
      if ( file_exists($file_path) )
         {
                                (préparer le téléchargement)

                                (préparer le header)

            if ($stream = fopen($file_path, 'rb'))
               {
                  while(!feof($stream) && connection_status() == 0)
                     {
                        print(fread($stream, 16384));
                        flush();
                     }
                  fclose($stream);
               }

            if (connection_status() == 0 && !connection_aborted())
               {
                                               (incrémenter le compteur)
               }
          }


Mais les connexions multiples font planter ce script.

Et en lockant l'IP, au lieu que le script s'interrompe même si j'ai mis les fonctions pour, la deuxième connexion par exemple attend que la première ait fini pour se lancer quand même ! Incompréhensible...

Je dois dire qu'il y a des choses qui m'échappent. Je veux dire, en quoi le fait d'utiliser un header('Redirect :') met-il à m'abri d'avoir toutes les connexions simultanées comptabilisées chacune pour un téléchargement, si le logiciel employé par le connecté se sert de l'adresse du script pour établir ses connexions ? Je ne suis pas du tout convaincu...
[Recompressez vos mp3 avec WinMP3Shrink] - Le port@il de CapJack
"travailler : vi. (latin populaire *trepaliare, torturer, du bas latin trepalium, instrument de torture)"
La preuve que les hommes sont tous égaux ? La bêtise humaine est uniformément répartie à la surface de la Terre...
Avatar de l’utilisateur
CapJack
Charlot promu Pierrot
Inconditionnel
 
Messages: 3877
Enregistré le: 21 Mar 2004

Messagepar gowap » 25 Mar 2007 23:32

CapJack a écrit:Pour info, on peut théoriquement ne comptabiliser que les téléchargements arrivés à terme avec un code genre celui-ci

Certes. J'ai ecarté ce type de méthode, parce que ce n'est pas ce qui est utilisé ici. Pour plusieurs raisons :
- je préfère dans un souci de simplification ne rien coder pour gérer le téléchargement, alors qu'avec une simple redirection http sur le fichier, tout sera pris en charge par le navigateur du client.
- tous les fichiers proposés sur GN ne sont pas forcément hébergés sur notre serveur. Donc pour les 400 Mo de Nero 7 multilingue je me vois mal aller lire par petit bout de x Ko, c'est a dire chercher l'info ailleurs, pour ensuite la rebalancer au client (allers-retours inutiles, connectiosn http pour "rien", etc.)
- fread met le fichier en mémoire. OK la, tu le fais par chunk de 16Ko, mais ca utilise quand meme des ressources de faire le DL par "programmation". Par redirection http c'est transparent pour le serveur, enfin il n'y a plus qu'apache qui travaille et non plus apache+php.

Mais qu'on ne se méprenne pas, je n'ai rien contre fread, c'est juste que pour GN ce n'est pas adapté.

Je dois dire qu'il y a des choses qui m'échappent. Je veux dire, en quoi le fait d'utiliser un header('Redirect :') met-il à m'abri d'avoir toutes les connexions simultanées comptabilisées chacune pour un téléchargement, si le logiciel employé par le connecté se sert de l'adresse du script pour établir ses connexions ?

Ah mais j'ai pas dit ca. Effectivement si l'url de DL est une url de script qui va incrémenter le compteur et ensuite rediriger vers le fichier (tout ca en une seule étape dans le meme script), le gestionnaire de DL, se servant de cette url, va repasser x fois dessus, et donc provoquer autant d'incrémentations.

Sur GN, le processus est en plusieurs étapes et nécessite des clics de l'utilisateur. Le compteur a été incrémenté dans le popup (une autre url) et la page initiale est ensuite réappelée (avec des params) ce qui redirige le navigateur de l'utilisateur vers le fichier. Et c'est seulement la que le gestionnaire de DL se précipite et saute dessus avec éventuellement 10 connections simultannées. Il n'y a plus sur cette page/ce script d'incrémentation du compteur.

Je sais pas si je suis bien clair...(en meme temps c'est pas moi qui ait programmé ca sur GN :D )
Aucune aide par mail ou Message Privé (n'insistez pas)
Prenez connaissance du règlement (à question illégale, sujet verrouillé),
commencez par faire des Recherches et décrivez clairement vos problèmes.

Lisez les articles et tutoriels
Avatar de l’utilisateur
gowap
Administrateur
Administrateur
 
Messages: 16112
Enregistré le: 01 Aoû 2002

Messagepar CapJack » 25 Mar 2007 23:51

Ok, je crois que je comprends. En même temps, je ne vois pas bien l'intérêt du popup dans ce cas-là... la page pourrait s'appeler elle-même avec le paramètre "magique", non ?
[Recompressez vos mp3 avec WinMP3Shrink] - Le port@il de CapJack
"travailler : vi. (latin populaire *trepaliare, torturer, du bas latin trepalium, instrument de torture)"
La preuve que les hommes sont tous égaux ? La bêtise humaine est uniformément répartie à la surface de la Terre...
Avatar de l’utilisateur
CapJack
Charlot promu Pierrot
Inconditionnel
 
Messages: 3877
Enregistré le: 21 Mar 2004

Messagepar gowap » 26 Mar 2007 1:53

Le popup est la pour le choix du serveur... :D
(Ok il n'y a souvent qu'un choix)
Aucune aide par mail ou Message Privé (n'insistez pas)
Prenez connaissance du règlement (à question illégale, sujet verrouillé),
commencez par faire des Recherches et décrivez clairement vos problèmes.

Lisez les articles et tutoriels
Avatar de l’utilisateur
gowap
Administrateur
Administrateur
 
Messages: 16112
Enregistré le: 01 Aoû 2002



  • Publicité

Retourner vers Le coin informatique

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invités