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 :

Bouton pour télécharger image sans faire clic droit / enregistrer sous


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut Bouton pour télécharger image sans faire clic droit / enregistrer sous
    Bonjour,

    Je cherche à réaliser un bouton qui permet de télécharger les images présentes sur mon site. Je veux éviter le bouton clic droit/enregistrer sous...

    Ai-je besoin de stocker mes photos sur une base de données? Je suis chez free..

    J'ai essayé plusieurs codes qui me permettent de télécharger des images, mais rien ne fonctionne. L'image télécharge (elle est stockée sur mon ftp du serveur free mais pas dans une bdd sql) mais elle fait toujours que 1,26 ko donc je pense qu'un truc ne marche pas

    Merci d'avance pour votre aide, je ne trouve vraiment plus de solutions

  2. #2
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Ben dans ce cas tu appel un script sur le click du bouton qui forcera le téléchargement et c'est avec la fonction header que l'on fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     header("Content-type: application/force-download" );
     header("Content-Disposition: attachment; filename=$filename" );
    bon $filename sera bien entendu le chemin de ton fichier exemple /images/monimage.jpg

    Attention le header doit bien se trouver tout en haut du script avant d'autre code...

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    J'ai essayé cela mais l'image ne se télécharge pas, enfin la fenetre de téléchargement fonctionne mais au final l'image téléchargé est incomplète.

    Le fichier download.php

    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
    <?php
    if (isset($_GET["filename"]))
    {
    	$filename=$_GET["filename"];
     
    	// Envoi du fichier
    	header('Content-Transfer-Encoding: none');
    	header('Content-Type: application/octetstream; name="'.$filename.'"');
    	header('Content-Disposition: attachment; filename="'.$filename.'"');
    	header('Content-length: '.filesize($filename));
    	header("Pragma: no-cache"); 
    	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
    	header("Expires: 0"); 
    	@readfile($filename) OR die();
    }		
    ?>
    Le code qui se trouve dans la page où j'ai l'image à télécharger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?
    $filename = "CIMG0727.JPG";
    $dir= "http://monsite/pictures/fondecran/CIMG0727.JPG/".$filename; 
     
     
    ?>
    <BR /><BR />
    <center><a href="download.php?filename=CIMG0727.JPG">Cliquer ici pour t&eacute;l&eacute;charger l'image</a></center>
    Je ne trouve plus, c'est peut être un truc bête que j'ai oublié mais je vois pas du tout quoi.

    Que mettre de plus? Surtout que le téléchargement s'ouvre bien mais l'image ne se télécharge pas en fait ou du moins que 1,26ko à chaque fois

  4. #4
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    header("Content-disposition: attachment; filename=$filename"); 
    header("Content-Type: application/force-download"); 
    header("Content-Transfer-Encoding: image/jpeg\n");
    header("Content-Length: ".filesize($filename)); 
    header("Pragma: no-cache"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
    header("Expires: 0"); 
    readfile($filename);
    Sinon rien ne me semble mal écrit mais on peut remplacer

    header('Content-Type: application/octetstream; name="'.$filename.'"');
    par :

    header("Content-Transfer-Encoding: image/jpeg\n");
    même si octetstream est général autant essayer de spécifier le type du fichier d'entrée...^^

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Alors, j'ai testé en mettant ton code à la place du mien dans le fichier download.php
    J'ai toujours le même problème. Je joins un screenshot pour montrer le problème après le téléchargement de l'image

    Les images sont stockées sur le ftp de chez free. Ca suffit pour qu'elle soit téléchargeables?

    J'avoue être perdu avec ce problème. J'ai essayé plusieurs choses mais toujours pareil

    Merci pour l'aide
    Images attachées Images attachées  

  6. #6
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Je dois avouer que non^^ C'est bizarre, l'enregistrement dans la base de donnée se fait bien? Es-ce qu'il sauvegarde bien l'image en entière? Car le je vois pas c'est peut être qu'au moment de l'enregistrement il y a un soucis peut être =)

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Ah ben j'ai rien dans ma base de données. J'ai rien crée en fait.
    J'ai juste mis les images dans un répertoire sur le ftp de free.

    Il faut les mettre dans une base. Tu pourrais me détailler ce qu'il faudrait que je fasse?

    Merci pour ton aide

  8. #8
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Ha non ok tu les met en ftp autant pour moi^^ ben alors sur le ftp c'est bien uploadé pas de soucis au niveau taille? je veux dire si tu les récupèrent par filezilla le fichier n'est pas corrompu?

    Donc la en fait c'est vraiment voir si l'upload est bon donc voir si les images sont bien enregistré sur le serveur...

    Après je vois plus du tout ^^

    Sinon non pas besoin de mettre en base laisse sur le serveur ca devrait marcher^^

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Ok, ben je vais réessayer de les repasser sur le serveur ftp.
    J'espère que je vais trouver parce que sur internet, j'ai vu que pour ceux qui utilisent ce code, ça fonctionne bien.

    Je te tiens au courant
    Sinon je garderai la méthode clique droit mais bon la fenêtre download s'ouvre bien donc je vais essayer de trouver le problème.

  10. #10
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Ouais voila je te conseil de revoir le script d'upload d'image pour voir si elle s'enregistre bien, et justement voir si l'image n'est pas corrompu sur le serveur^^

    Bref... Bon courage

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Alors j'ai vérifié, les images sont bien de bonne taille sur le serveur et quand j'ai télécharge une sur mon poste, elle s'affiche bien.

    Si je passe par mon site, ma fenêtre de download s'ouvre, l'image s'enregistre mais la taille de l'image téléchargé est pas bonne.

    Je ne sais donc pas d'où peut venir le problème.

  12. #12
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Alors la peut être des fichier de configuration du genre php.ini ou autre...

    Mais voila tu n'y a pas accès, tu es chez free?

  13. #13
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Oui, je suis chez Free donc je n'ai pas accès au php.ini
    Par contre en pensant à une autre solution plus simple : faire un fichier download.php qui aura le chemin de mes toutes images

    Après dans mon site, dès que je cliquerai sur une image, elle s'ouvrira dans une autre page ou dans une popup en allant rechercher dans mon fichier php.

    Enfin je sais pas si là je suis claire.

    Par contre, j'utiliserai que $filename pour faire appel à chaque photo?

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Oui, je suis chez Free donc je n'ai pas accès au php.ini
    Par contre en pensant à une autre solution plus simple : faire un fichier download.php qui aura le chemin de mes toutes images

    Après dans mon site, dès que je cliquerai sur une image, elle s'ouvrira dans une autre page ou dans une popup en allant rechercher dans mon fichier php.

    Enfin je sais pas si là je suis claire.

    Par contre, j'utiliserai que $filename pour faire appel à chaque photo?

  15. #15
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Heu oui c'est une solution

    Genre en appelant le script tu lui passe un paramètre que tu récupérera en $_GET ...

    Un truc qui identifierais de façon unique tes images, donc pourquoi ne pas numéroté les images par exemple? Ou autre... bref oui c'est une bonne idée =)à Mais il n'y aura pas de téléchargement bien évidemment pour le coup^^

  16. #16
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Alors je m'acharne encore pour que ça marche et pour la peine j'ai modifié le code.
    Je réexplique. J'ai une page fondecran.html qui contient pleins d'images en miniatures. Quand je clique sur une image miniatures appelé soleil.jpg, ca envoie vers la page soleil.html qui du coup affiche l'image en grand.
    La j'ai un lien sous cette image qui permet de la télécharger.
    Hop je clique, ça download cette fois jusqu'à 1,4Mo alors que l'image fait 1,9Mo.

    Toujours même problème mais je suis plus à 1,26Ko de télécharger. J'améliore mais c'est encore franchement pas ça.

  17. #17
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Ca c'est dans le fichier soleil.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?
    $filename = "CIMG0727.JPG";
    $dir= "http://mon_site/pictures/fondecran/CIMG0727.JPG/".$filename; 
     
    ?>
    <BR /><BR />
    <center><a href="download.php?filename=http://mon_site/pictures/fondecran/CIMG0727.JPG">Cliquer ici pour t&eacute;l&eacute;charger l'image</a></center>
    Dans le fichier download.php

    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
    <?php
    if (isset($_GET["filename"]))
    {
    	$filename=$_GET["filename"];
     
    	// Envoi du fichier
    	header('Content-Transfer-Encoding: none');
    	header('Content-Type: application/octetstream; name="'.$filename.'"');
    	header('Content-Disposition: attachment; filename="'.$filename.'"');
    	header('Content-length: '.filesize($filename));
    	header("Pragma: no-cache"); 
    	header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
    	header("Expires: 0"); 
    	readfile($filename) OR die();
    }		
    ?>

  18. #18
    Membre actif

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Points : 275
    Points
    275
    Par défaut
    solution précédente à proscrire

    !! ne jamais passer de nom de fichier en paramètre pour le réutiliser derrière, c'est une faille de sécurité de base à éviter !!

    car on ne controle plus les valeurs passées par le GET.
    plutot enregistrer les information dans une database et passer les identifiants (image_id) au moins on controle les valeurs.

  19. #19
    Membre régulier
    Inscrit en
    Septembre 2008
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 221
    Points : 104
    Points
    104
    Par défaut
    Par contre, j'ai lu que mettre les images dans une base de données pouvaient ralentir le site. Est-ce vrai?

    Si je rentre les informations dans une base, je gérerai tout par l'ID en fait? On ne rentre pas l'image dans la base mais juste le chemin où elle se trouve?

  20. #20
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    voila une table image par exemple avec un id et le chemin ainsi quand tu passe le tout en GET c'est mieux protéger ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/01/2013, 18h04
  2. boutons pour afficher images
    Par timtof2011 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/10/2011, 22h47
  3. [PHP 5.2] [PHP-JS] Changer l'image lors du clic droit 'Enregistrer sous'
    Par jep33 dans le forum Langage
    Réponses: 2
    Dernier message: 08/01/2009, 16h19
  4. Réponses: 2
    Dernier message: 26/03/2007, 17h47
  5. Executer barre de taches sans faire click droit
    Par kikica dans le forum Autres Logiciels
    Réponses: 15
    Dernier message: 11/08/2005, 13h59

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