IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Compter le nombre d'octets téléchargés par l'utilisateur


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 7
    Par défaut Compter le nombre d'octets téléchargés par l'utilisateur
    Tout d'abord UN GRAND SALUT A LA COMMUNAUTE DEVELOPPEZ.COM
    voila je travaille en ce moment sur un script php qui offre les fonctionnalités suivantes:
    +Téléchargement de fichiers depuis votre serveur web
    +Protection des chemins réels de fichiers.
    +Le système est anti-spam avec support captcha.
    +Quota basée sur le nombre de fichiers téléchargés,nombre de téléchargement simultanés,NOMBRE DE BYTES TELECHARGES.
    +Possibilité de bannir une IP.
    +Possibilité de suspendre le téléchargement pour un temps particulier.
    +Fonction de reprise de téléchargement.
    et bien d'autres fonctionnalités
    mais il'ya une fonctionnalité que j'aimerai intégrer celle de:
    +Protection anti-spam de la fonction reprise.
    je m'explique,si vous voulez implémenter cette fonctionnalité,vous devez faire accepter votre serveur web les requêtes RANGE qui détermine le bloc de données du fichier qui est demandé ceci va laisser la voie libre au utilisateurs de demander n'importe quel RANGE même le range zéro (ie un nouveau téléchargement du même fichier) c-à-d consommer de ressources serveur en vain.Le problème persiste au niveau de la même IP.Ma solution consiste à sauvegarder le nombre de bytes que l'utilisateur a recu dans une base de données et de le comparer avec le RANGE demandé dans la prochaine reprise de téléchargement en utilisant un code du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /*********************************************************************
    *IMPLEMANTING THE ANTI-SPAM-RESUME FEATURE.                                             
    *********************************************************************/
       if($range["start"]!=($dbtikt["down_range"])){//IF4446
        //IF THE CLIENT DIDN'T REQUESTED THE CORRECT RANGE.
     
            exit();
             //WE REFUSE THIS RANGE.
     
       }//IF4446
     
    /********************************************************************/
    Quelqu'un me dirai c'est facile,il suffit d'initialiser un compteur à zero,et de le faire augmenter par la taille du packet envoyée en utilisant un code du genre:
    /********************************************************************/
    $length=0;
     //LENGTH OF SENDED DATA.
    while(!feof($dbfilehandle) && !connection_aborted()){//WHILE4403
     //LOOP THROUGHT FILE.
     
        ob_start();
         //TURN ON OUTPUT BUFFER.
     
        print(fread($dbfilehandle,$downpacket));
         //ALLOCATE DATA INTO OUTPUT BUFFER.
     
        ob_end_flush();
         //SEND DATA TO THE CLIENT AND TURN OFF OUTPUT BUFFER.
     
        if($downspeed>0){//IF4443
         //THE SPEED IS GREATER THAN ZERO.
     
           usleep($downdelay);
            //DELAY TIME BETWEEN PACKETS.
     
        }//IF4443
     
        $length+=$downpacket;
         //THE TOTAL BYTES SENT.
     
    }//WHILE4403
    /********************************************************************/
    ET BAS IL SE TROMPE CAR ON ARRIVE TOUJOURS AVEC UNE ADDITION SUR LA TABLE !!!
    $length est plus grande que le prochain range demandé.
    C'EST INCROYABLE !!! mais il doit y avoir une explication.

    CONCLUSION:je charche un code fiable qui me permet de calculer le NOMBRE DE BYTES TELECHARGES PAR L'UTILISATEUR

    Je vous remercie d'avance.

  2. #2
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Citation Envoyé par php.net
    fread() lit jusqu'à length octets dans le fichier référencé par handle . La lecture s'arrête lorsqu'une des conditions suivantes apparaît :

    * length octets ont été lus
    * la fin du fichier est atteinte
    * un paquet devient disponible (pour les flux réseaux)
    * 8192 octets ont été lus (après avoir ouvert un flux utilisateurs)
    Donc la taile que tu demandes n'est pas forcément la taille réel du buffer

    Ps : Quel est l'intérêt d'utiliser l'output buffering dans ton exemple ?

    Merci d'utiliser la balise [ code]

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 7
    Par défaut
    Merci Mr |PaRa-BoL pour ton intérêt.
    j'ai utilisé le OUTPUT BUFFER parce que j'ai envisagé qqes solutions mais en vain.Même si vous ne l'utilisez pas, le problème persiste.Justement parce qu'il des contraintes sur l'utilisation de fread,je n'arrive pas à calculer le nombre de bytes exact.Une autre raison pour l'utilisation du OUTPUT BUFFER,l'emploi de la fonction header.

  4. #4
    Membre émérite Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Par défaut
    Pourquoi ne pas utiliser un strlen() du buffer retourner par fread ?

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 7
    Par défaut
    Je l'ai essayé mon ami ,mais ça marche pas

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 7
    Par défaut
    Salut les amis,
    PHP will not detect that the user has aborted the connection until an attempt is made to send information to the client. Simply using an echo statement does not guarantee that information is sent, see flush().
    le code qui compte le nombre de bytes envoyés s'exécute immédiatement après PHP s'est aperçu que le client a coupé la connexion,et donc il va envoyer un bloc de données ou plus du fichier c'est pour cela qu'on obtient toujours un nombre supérieur de celui qu'on a prévu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2008, 10h03
  2. Compter le nombre d'octets ecrits sur une socket
    Par andromeda dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 19/07/2007, 22h29
  3. compter le nombre de cellules commencant par
    Par euskadi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/06/2006, 13h36
  4. Compter le nombre d'octets lus dans un flux
    Par Le Furet dans le forum Entrée/Sortie
    Réponses: 25
    Dernier message: 09/03/2006, 08h19
  5. Compter le nombre d'enreg retournés par un DBExtract
    Par Sylvain James dans le forum XMLRAD
    Réponses: 2
    Dernier message: 02/11/2004, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo