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

Langage PHP Discussion :

Compteur de téléchargement


Sujet :

Langage PHP

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Février 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 101
    Points : 121
    Points
    121
    Par défaut Compteur de téléchargement
    Bonjour,
    J'essaye appeler une fonction (count), ligne 17, pour incrémenter le compteur de téléchargement. Et je n'arrive pas à trouver la syntaxe !!!

    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
    <?php
     
    require("../model/DownloadModel.php");
     
    function count($file)
    {
        $download = new Download();
        $download->counter($file);
    }
     
    ?>
     
    <!DOCTYPE html>
    <html>
    	<body>
            <div>
                <a href="" download="<?php "files/pays.zip"?>" onclick=" Comment appeler la fonction count avec paramètre nom de fichier ? ">Download</a>
            </div>
    	</body>
    </html>
    Merci de votre aide

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Perso, je ne ferais pas comme ça mais un truc du genre (pour illustration, non testé) <a href="download.php?file=pays.zip">Download</a>Et là, dans ton fichier download.php, récupérer $filename="./downloads/" . $_GET['file'] pour savoir de quel fichier il s'agit puis un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    header("Content-Type: application/zip\n");header("Content-Transfer-Encoding: binary");
    header("Content-disposition: attachment; filename=$filename");
    header("Content-Length: ".filesize($filename));
     
     
    file_get_contents($filename )
    Et donc, là, dans ton fichier download.php, faire le nécessaire pour incrémenter le compteur.

    Note: c'est du code non testé; juste à valeur d'illustration.

    Note ultra-méga-importante: il te faut gérer la valeur de $_GET['file'] pour être certain que le fichier indiqué est acceptable. Il ne faut pas que je puisse p.ex. tenter "./../.htaccess", ou "./../.env" ou "./../../../.passwd" (càd d'essayer de récupérer un fichier important de ton serveur). En fait, perso, j'interdirais de spécifier un dossier. La valeur de $_GET['file'] ne peut contenir qu'un nom de fichier (p.ex. "pays.zip"; aucun dossier) et donc ton code ira, toujours et sans aucune exception, récupérer le fichier depuis le dossier, p.ex. "downloads" de ton serveur. Jamais ailleurs. Tu réduis donc les risques de hacking de cette façon.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Février 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 101
    Points : 121
    Points
    121
    Par défaut
    Bonjour Cavo789,
    Merci de ton aide...
    Pour éviter ta note ultra-méga-importante, est-ce qu'il serait possible de le faire avec $_POST ?

    Je précise que je suis débutant en PHP !!!

  4. #4
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Nope c'est strictement la même remarque ultra mega giga importante...

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 394
    Points : 15 755
    Points
    15 755
    Par défaut
    pour vérifier que le fichier est dans le répertoire indiqué, j'utilise souvent ce code :
    Code php : 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     
    	// informations du fichier
     
    	$nom_fichier = $_GET["f"];
    	$repertoire = "/var/www/.../stockage_fichiers";
     
     
    	// sécurisation du fichier qui doit se trouver dans ce répertoire
     
    	$fichier_trouve = FALSE;
     
    	$d = dir($repertoire);
     
    	while (FALSE !== ($e = $d->read())
    		&&	!$fichier_trouve
    	) {
    		if (	is_file("$repertoire/$e")
    			&&	($e === $nom_fichier)
    		) {
    			$fichier_trouve = TRUE;
    			break;
    		}
    	}
     
    	$d->close();
     
     
    	if (!$fichier_trouve) {
    		// fichier non existant ou non autorisé
    		exit();
    	}
     
    	$fichier = "$repertoire/$nom_fichier";
     
     
    	// téléchargement
     
    	$mime = mime_content_type($fichier);
     
    	$contenu_fichier = file_get_contents($fichier);
    	$taille_fichier = strlen($contenu_fichier);
     
    	$nom_fichier_entete = str_replace('"', '\\"', $nom_fichier);
     
     
    	header("Content-Type: $mime");
    	header("Content-Length: $taille_fichier");
    	header("Content-Disposition: attachment; filename=\"$nom_fichier_entete\"");
     
    	echo $contenu_fichier;
     
    	exit();

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Février 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 101
    Points : 121
    Points
    121
    Par défaut
    J'ai trouvé une solution à mon problème. Quand je clique sur le lien Download, mon compteur s’incrémente bien de 1 grâce a ma fonction $download->counter();

    Maintenant j'ai un autre problème, quand j'actualise (F5) ma page, le compteur s'incrémente aussi de 1 sans cliquer sur le lien Download, je ne sais pas pourquoi ???

    Quelqu'un aurait une idée pour corriger mon problème, merci !!!

    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
     
    <?php
     
    require("../model/DownloadModel.php");
     
    ?>
     
    <!DOCTYPE html>
    <html>
    	<body>
            <div>
                <a href="" download="<?php "files/pays.zip"?>" onclick="window.location.reload()" type="submit" name="submit">Download</a>
            </div>
    	</body>
    </html>
     
    <?php
        if($_POST["submit"])
        {
            $download = new Download();
            $download->counter();
        }
    ?>

  7. #7
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Parce que tu n'as pas tenu compte de nos suggestions ;-)

    Tu fais +1 à l'affichage de la page (quand Google passera, hop +1).

    Il faut faire +1 si et seulement si le script de download est appelé.

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Février 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 101
    Points : 121
    Points
    121
    Par défaut
    Bonjour Cavo789,

    Parce que tu n'as pas tenu compte de nos suggestions ;-)
    Quand on débute ce n'est pas facile de comprendre vos suggestions

    Il faut faire +1 si et seulement si le script de download est appelé
    Un exemple ou la modification de mon code pourrait m'aider

  9. #9
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Déjà ici https://php.developpez.com/faq/, voir 10.7

    Et puis Mathieu a déjà posté un exemple de code...

    ("php téléchargement fichier" sur Ggl et hop plein d'exemples de code)

  10. #10
    Nb
    Nb est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 150
    Points : 423
    Points
    423
    Par défaut
    Les exemples fournis devraient te permettre d'arriver à faire ce que tu veux.

    En revanche, comme tu dis que tu es débutant, je te conseille très fortement de comprendre ce qui se passe quand une page web s'affiche dans un navigateur : où et par quoi est généré le contenu d'une page? où et par quoi elle est affichée?
    Parce-qu’à moins que je n'ai pas compris ta question initiale, elle ne relève pas d'un problème PHP (tu aurais eu la même question avec n'importe quel langage web coté serveur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="" download="<?php "files/pays.zip"?>" onclick=" Comment appeler la fonction count avec paramètre nom de fichier ? ">Download</a>
    il n'y a qu'une réponse : tu ne peux pas et ne pourra jamais, car tu veux appeller en javascript (client) une fonction PHP (qui s'execute donc sur le serveur).
    Donc forcément ce que tu veux faire ne peux pas être fait comme ca et tu es donc obligé de te tourner vers d'autres solutions (comme celle évoquée plus haut dans le thread)

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Février 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 101
    Points : 121
    Points
    121
    Par défaut
    Bonjour NB,

    La solution que j'ai donné en #6 fonctionne bien. Quand je clique sur le lien Donwload le compteur s’incrémente très bien.

    Maintenant mon seul souci c'est quand je fais F5 le compteur s’incrémente aussi.

    Si dans cette discussion quelqu'un m'a donné une réponse à mon problème c'est que je n'ai pas bien compris !!!

    Merci pour tes explications générales

    PS : Les pros essayent de m'aider sur le téléchargement de fichiers, mais je n'ai pas de problème avec ça, j'ai juste un problème de compteur de téléchargement. Je me pose la question si je suis à coté de la plaque ou je n'arrive pas à expliquer mon souci

Discussions similaires

  1. compteur de téléchargements
    Par laurentSc dans le forum Général Conception Web
    Réponses: 6
    Dernier message: 18/02/2010, 22h00
  2. Compteur de téléchargements
    Par mt2sr dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2008, 21h55
  3. Compteur de téléchargement
    Par _ash_ dans le forum Débuter
    Réponses: 2
    Dernier message: 10/12/2008, 18h05
  4. Compteur de téléchargements
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/02/2008, 10h11
  5. [Système] Problème avec compteur de téléchargement
    Par Baptiste Wicht dans le forum Langage
    Réponses: 24
    Dernier message: 24/06/2006, 08h21

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