Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2904 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  forcer telechargement d'une image

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

forcer telechargement d'une image

n°1279988
gargantua3​07
Posté le 09-01-2006 à 22:25:43  profilanswer
 

Bonsoir, je cherche a forcer le telechargement d'une image quand je clic sur un lien, mais je n'y parviens pas.
J'ai trouvé ce site: http://www.destrucsaweb.com/ressou [...] oto_45.php  
mais j'obtient un resultat bizarre...
 
j'ai donc un fichier download.php qui contient le code suivant :  

Code :
  1. <?php
  2. // on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions
  3. switch(strrchr(basename($Fichier_a_telecharger), "." )) {
  4. case ".gz": $type = "application/x-gzip"; break;
  5. case ".tgz": $type = "application/x-gzip"; break;
  6. case ".zip": $type = "application/zip"; break;
  7. case ".pdf": $type = "application/pdf"; break;
  8. case ".png": $type = "image/png"; break;
  9. case ".gif": $type = "image/gif"; break;
  10. case ".jpg": $type = "image/jpeg"; break;
  11. case ".txt": $type = "text/plain"; break;
  12. case ".htm": $type = "text/html"; break;
  13. case ".html": $type = "text/html"; break;
  14. default: $type = "application/octet-stream"; break;
  15. }
  16. header("Content-disposition: attachment; filename=$Fichier_a_telecharger" );
  17. header("Content-Type: application/force-download" );
  18. header("Content-Transfer-Encoding: $type\n" ); // Surtout ne pas enlever le \n
  19. header("Content-Length: ".filesize($chemin . $Fichier_a_telecharger));
  20. header("Pragma: no-cache" );
  21. header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public" );
  22. header("Expires: 0" );
  23. readfile($chemin . $Fichier_a_telecharger);
  24. ?>


 
Et le fichier qui fait appel a celui-ci via ce lien  :  
 

Code :
  1. <?
  2. ...
  3. echo "<a href=\"download.php?Fichier_a_telecharger=".$vimg."&chemin=images/".$vfolder."/original/\">Télécharger</a>";
  4. ...
  5. ?>


où $vimg contient le nom de fichier avec son extension, et $vfolder et le nom d'un repertoire (un album).
J'ai regarder l'url du lien, il est correct.  
 
Mais quand je clic dessus, j'obtient une page contenan des truc comme ça :  

Code :
  1. ÿØÿáþExif
  2. Šä¨ï+­FŒmžæ~«\D͌¶GÅx‡Hm;S`‘nÆ>íkEëäÈÆEiÝ##XdÓ^MçkœWQÀ'–Ú¼Òö¯’ÀŸ¥_°¸݇ŽjZ)F› *Ã#~ëp
  3. 1Ðɵ´Ù©ÜmäUù`t’sÚ¥»ü‘¤`¹oÔÖÐåim‚¡Ã!ÛZÞpÁYUƒzõÝx¯C̚´šó*If®Ä ºäŠÄñ³Ï
  4. etc.


 
Alors ou est-je faux?  
(testé sur une image .JPG)

mood
Publicité
Posté le 09-01-2006 à 22:25:43  profilanswer
 

n°1280117
Worldofdad​a
Posté le 10-01-2006 à 09:30:40  profilanswer
 

Je ne savais pas qu'il était possible de forcer le téléchargement.
 
Si tu arrives a faire fonctionner ce script, je pourrais etre interessé  :)  
 
A priori, il t'affiche l'image jpg au format texte. J'aurais donc tendance a dire que ca vient de $type mais pourtant, ca a l'air bon (en supposant que le script fonctionne).

n°1280146
remi-san
Posté le 10-01-2006 à 09:58:35  profilanswer
 

essaie avec une image .jpg (écrit en minuscule). Si ça fonctionne, complète ton switch avec un strtolower.

n°1280155
Trollable
Posté le 10-01-2006 à 10:14:25  profilanswer
 

oui, ca semble juste etre un probleme de casse (JPG en majuscules).
Parce que le code a l'air correct (Content-disposition)


---------------
The Million Dollar Screenshot  (seo v7ndotcom elursrebmem paesys wifi)
n°1280343
gargantua3​07
Posté le 10-01-2006 à 13:03:29  profilanswer
 

Trollable a écrit :

oui, ca semble juste etre un probleme de casse (JPG en majuscules).
Parce que le code a l'air correct (Content-disposition)


 
 
J'avais pensé a la casse, pour ça que j'ai rajouter d'ailleur une ligne dans download.php avec :  
case ".JPG": $type = "image/jpeg"; break;
 
 
Mais j'v essayer de passé une photo en min pour voir.
 
edit: non, meme chose....


Message édité par gargantua307 le 10-01-2006 à 13:08:15
n°1280604
gargantua3​07
Posté le 10-01-2006 à 16:35:17  profilanswer
 

:bounce:

n°1280618
ritzle
Posté le 10-01-2006 à 16:43:36  profilanswer
 

tu peux toujours essayer de comparer avec celui-ci : http://thesmilingface.free.fr/pub/ [...] membre.php

n°1280736
soju
One shot !
Posté le 10-01-2006 à 17:35:47  profilanswer
 

- ton header Content-Transfer-Encoding n'est pas valide (voir rfc)
- tu peux enlever la ligne 22 et mettre à la place header("Content-Type: $type" ); (voir http://fr2.php.net/header#AEN57793 )

n°1280739
naceroth
Posté le 10-01-2006 à 17:37:13  profilanswer
 

Hmmm, de mémoire (parce que c'est une technique que je suis loin d'utiliser tous les jours), tu mélangerais pas un peu le mime-type et le Content-Transfer-Encoding toi ?
 
Le CTE sert juste à préciser le format d'encodage : base64 ou binary par exemple, rien à voir avec le mime-type du fichier à priori (image/jpeg, ce serait plutôt du content-type...)
 
//edit : owned par soju :D


Message édité par naceroth le 10-01-2006 à 17:38:22
n°1280884
gargantua3​07
Posté le 10-01-2006 à 20:18:20  profilanswer
 

soju a écrit :

- ton header Content-Transfer-Encoding n'est pas valide (voir rfc)
- tu peux enlever la ligne 22 et mettre à la place header("Content-Type: $type" ); (voir http://fr2.php.net/header#AEN57793 )


 
donc j'ai fait la modif que tu m'as indiqué, voici ce que j'ai maintenant donc :  

Code :
  1. <?php
  2. // on essaie de reconnaitre l'extension pour que le téléchargement corresponde au type de fichier afin d'éviter les erreurs de corruptions
  3. switch(strrchr(basename($Fichier_a_telecharger), "." )) {
  4. case ".gz": $type = "application/x-gzip"; break;
  5. case ".tgz": $type = "application/x-gzip"; break;
  6. case ".zip": $type = "application/zip"; break;
  7. case ".pdf": $type = "application/pdf"; break;
  8. case ".png": $type = "image/png"; break;
  9. case ".gif": $type = "image/gif"; break;
  10. case ".JPG": $type = "image/jpeg"; break;
  11. case ".jpg": $type = "image/jpeg"; break;
  12. case ".txt": $type = "text/plain"; break;
  13. case ".htm": $type = "text/html"; break;
  14. case ".html": $type = "text/html"; break;
  15. default: $type = "application/octet-stream"; break;
  16. }
  17. header("Content-disposition: attachment; filename=$Fichier_a_telecharger" );
  18. header("Content-Type: $type" );
  19. header("Content-Transfer-Encoding: binary" );
  20. header("Content-Length: ".filesize($chemin . $Fichier_a_telecharger));
  21. header("Pragma: no-cache" );
  22. header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public" );
  23. header("Expires: 0" );
  24. readfile($chemin . $Fichier_a_telecharger);
  25. ?>


 
Malheureusement, j'ai tjr le meme resultat :(
A savoir : affichage son forme de code du contenu de l'image.
 
Je ne maitrise pas du tout les en-tetes, alors j'suis un peu largué.
J'vais essayer d'allé jeter un oeil au lien pour m'instruire.
 
Mais si vous comprennez pourquoi ça ne marche tjr pas...!
 
 
Pour voir ce que ça me donne :  
 
http://www.gargant.info/albumPhoto [...] /original/


Message édité par gargantua307 le 10-01-2006 à 20:27:32
mood
Publicité
Posté le 10-01-2006 à 20:18:20  profilanswer
 

n°1281020
soju
One shot !
Posté le 10-01-2006 à 23:28:20  profilanswer
 

Response Headers - http://www.gargant.info/albumPhoto/download.php?Fichier_a_telecharger=belette3.JPG&chemin=images/cat1136725788/original/
 
Date: Tue, 10 Jan 2006 22:23:11 GMT
Server: Apache/1.3.33 (Unix)
X-Powered-By: PHP/4.4.1
Keep-Alive: timeout=2, max=200
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
 
200 OK

tes headers ne fonctionnent pas :
- verifie qu'il n'y a rien avant <?php
- met un error_reporting(E_ALL); au début de ton script
 
PS: firefox + extension web developer => ça aide pour le debug

n°1281084
gargantua3​07
Posté le 11-01-2006 à 07:53:21  profilanswer
 

soju a écrit :

Response Headers - http://www.gargant.info/albumPhoto/download.php?Fichier_a_telecharger=belette3.JPG&chemin=images/cat1136725788/original/
 
Date: Tue, 10 Jan 2006 22:23:11 GMT
Server: Apache/1.3.33 (Unix)
X-Powered-By: PHP/4.4.1
Keep-Alive: timeout=2, max=200
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
 
200 OK

tes headers ne fonctionnent pas :
- verifie qu'il n'y a rien avant <?php
- met un error_reporting(E_ALL); au début de ton script
 
PS: firefox + extension web developer => ça aide pour le debug


 
Alors là!
J'ai supprimer un espace devant mon <? au tout début, et ça marche! O_o
En tout cas, merci pour votre aide!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  forcer telechargement d'une image

 

Sujets relatifs
Re dimensionner image jpgPetit jeu Image :)
[Résolu] Lien sur une image[Résolu] Image de fond absente
XSLT FOP : image codée en base64[résolu] Image de fond sur lien d'un menu "en ligne" ???
[Analyse d'image numérique][Pb PHP] Telechargement de gros fichier
empecher une image de fond de se répeter[php] Forcer le téléchargement d'une image
Plus de sujets relatifs à : forcer telechargement d'une image


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR