forcer telechargement fichier jpg

forcer telechargement fichier jpg - PHP - Programmation

Marsh Posté le 07-05-2011 à 10:19:04    

Hello tout le monde
 
Je n'y connais absolument rien en php et donc mes recherches sont infructueuse. JE cherche à mettre un fichier php qui par exemple se nommerai download.php qui me permette de forcer le téléchargement d'un fichier appelé en option.
 
un truc du genre : http://monsite.free.fr/wallpaper/d [...] mage01.jpg
Qui me force le téléchargement de l'image "monimage01.jpg" et donc pas l'afficher dans le navigateur
 
Et donc si je l'appelle : http://monsite.free.fr/wallpaper/d [...] mage02.jpg me permettre de télécharger l'image N°02 sans avoir à modifier le fichier download.php
 
Est ce possible ? Si oui serait il possible de me donner des liens, des adresses ou même un bout de code sur comment réaliser ce genre de fichier ?
 
Merci d'avance
 
Gortex3D


Message édité par gortex3D le 07-05-2011 à 10:19:26

---------------
Mon feedback
Reply

Marsh Posté le 07-05-2011 à 10:19:04   

Reply

Marsh Posté le 08-05-2011 à 13:41:46    

Bonjour,
 
Le mot "télécharger" a deux sens distincts que l'anglais rend bien : upload et download.
Dans la question, il n'est pas très clair s'il s'agit du premier ou du deuxième sens.
Je vais supposer qu'il s'agit d'un download, c'est-à-dire de l'envoi d'un fichier depuis le serveur jusqu'au poste de l'utilisateur.
 
Habituellement l'envoi se fait de manière transparente lorsqu'une page HTML contient une balise <img src=...>.
Dans la question, il n'est pas très clair, pourquoi ce moyen habituel n'est pas souhaité.
 
Si je ne me trompe pas, il s'agirait de transférer un fichier depuis le serveur directement vers le disque dur de l'utilisateur.
Dans ce cas, dans quel répertoire ? Il faut bien que l'utilisateur indique le nom qui lui convienne.
De toutes manières, pour des "raisons de sécurité", il est interdit pour un serveur internet d'accéder au disque dur de l'utilisateur,
sauf avec les cookies, ou avec des plug-in qui sont autorisés.

Reply

Marsh Posté le 08-05-2011 à 13:55:29    


Whaaaat  [:pussoforce]

 


On peut assez facilement forcer le téléchargement de n'importe quel fichier, en balançant au navigateur les bon entêtes.

 

Imaginons que ton script download.php soit dans le même dossier que les images, il ressemblera à ça :

Code :
  1. $image = isset($_GET['image']) ? $_GET['image'] : '';
  2.  
  3. if($image) {
  4.  
  5.  $imageFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . str_replace(array('..', '/', "\r", "\n" ), '', $image);
  6.  
  7.  if(is_file($imageFile)) {
  8.  
  9.        header('Content-Length: '. filesize($imageFile));
  10.        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  11.        header('Content-disposition: attachment; filename="' . $image . '"');
  12.        header('Content-Type: image/jpeg');
  13.  
  14.        readfile($imageFile);
  15.  }
  16. }
 

[:icon4] Attention, c'est une version minimale vite bricolée. Y'a peut-être des problèmes potentiels de sécurité, et ça marche que pour les jpg (faut détecter le type mime correct). C'est juste pour montrer comment ça marche à peu près.


Message édité par FlorentG le 08-05-2011 à 13:55:42
Reply

Marsh Posté le 08-05-2011 à 14:21:39    

Merci pour vos réponses. En réalité les fichiers ne sont pas des jpg mais des png car je gère la transparence avec mais ca change pas grand chose. En gros je veux sur un site affiché une miniature et lorsque je clique sur la miniature accéder à l'image de taille réél. Le souci est que pour le moment lorsque je clique sur le lien je me retrouve a afficher l'image dans le navigateur or je voudrais que lorsque je clique sur l'image au lieu de l'afficher je lance le gestionnaire de téléchargement du navigateur ce qui permettrai de supprimer une étape à l'utilisateur final qui fait à l'heure actuel un clique sur la minaiture et ensuite un clique droit enregistré sous.
 
Sinon pour ce qui est du fichier download.php je souhaite effectivement le mettre dans le même dossier que mes images.


---------------
Mon feedback
Reply

Marsh Posté le 10-05-2011 à 06:39:24    

Est ce que quelqu'un pourrai me dire comment écrire exactement l'adresse pour que le fichier se télécharge ?
 
J'imagine que l'exemple que j'ai mis en poste 1 est faut, non ?


---------------
Mon feedback
Reply

Marsh Posté le 10-05-2011 à 08:39:36    

Ah oui :D Il faut nommer le paramètre de préférence :

Code :
  1. download.php?image=pouet.jpg


Message édité par FlorentG le 10-05-2011 à 08:39:42
Reply

Marsh Posté le 10-05-2011 à 18:39:31    

Merci pour l'aide. JE regarderai après mangé comment faire pour que ca passe avec un png. En tout cas merci, je vous tiens au courant.


---------------
Mon feedback
Reply

Marsh Posté le 12-05-2011 à 22:48:53    

Bon ben a force de recherche je ne trouve pas de solution. J'ai fait encore pas mal de recherche et j'ai trouvé d'autres scripts mais a chaque fois j'ai un soucis le script s'affiche dans l'explorateur à la place de s’exécuter. le fichier.php est héberger par free.
 
Voila le code que j'ai tenté d'utiliser et qui ne fonctionne pas :
 

Code :
  1. $fullPath = $_GET['image']
  2. header( 'Pragma: no-cache' );
  3. header( 'Cache-Control: no-cache, must-revalidate' );
  4. header( 'Expires: 0' );
  5. header( 'Content-Transfer-Encoding: binary' );
  6. header( 'Content-Length: ' . filesize( $fullPath ) );
  7. header( 'Content-Type: application/octetstream; name="' . basename($fullPath) . '"' );
  8. header( 'Content-Disposition: attachment; filename="' .  basename($fullPath) . '"' );
  9. readfile($fullPath);
  10. exit();


Pouvez vous m'aidez à résoudre mon soucis ? Est il possible que le problème vienne de free ?


---------------
Mon feedback
Reply

Marsh Posté le 13-05-2011 à 05:14:06    

le script s'affiche dans l'explorateur ???
 
t'aurai pas oublier les  
 
<? au debut du script et
?> a la fin ?

Reply

Marsh Posté le 13-05-2011 à 06:18:20    

Je suis un boulet. Merci pour ton aide.
 
JE viens de tester ca marche mieux (ca ne s'affiche plus mais j'ai ce message d'erreur :
 
Parse error: syntax error, unexpected T_STRING in /mnt/119/sdb/6/0/gortex3d/htc-dev/serie2/01lockscreen/download.php on line 5
 
En ligne 5 j'ai le code suivant :
header( 'Pragma: no-cache' );
 
En tout  cas merci pour l'aide


---------------
Mon feedback
Reply

Marsh Posté le 13-05-2011 à 06:18:20   

Reply

Marsh Posté le 13-05-2011 à 09:31:14    

gortex3D a écrit :

Je suis un boulet. Merci pour ton aide.
 
JE viens de tester ca marche mieux (ca ne s'affiche plus mais j'ai ce message d'erreur :
 
Parse error: syntax error, unexpected T_STRING in /mnt/119/sdb/6/0/gortex3d/htc-dev/serie2/01lockscreen/download.php on line 5
 
En ligne 5 j'ai le code suivant :
header( 'Pragma: no-cache' );
 
En tout  cas merci pour l'aide


 
Rajoute une parenthèse en ligne 4 du code (ligne 1 ici) :

Code :
  1. $fullPath = $_GET['image']; //parenthèse qui manquait dans ton code
  2. header( 'Pragma: no-cache' );
  3. header( 'Cache-Control: no-cache, must-revalidate' );
  4. header( 'Expires: 0' );
  5. header( 'Content-Transfer-Encoding: binary' );
  6. header( 'Content-Length: ' . filesize( $fullPath ) );
  7. header( 'Content-Type: application/octetstream; name="' . basename($fullPath) . '"' );
  8. header( 'Content-Disposition: attachment; filename="' .  basename($fullPath) . '"' );
  9. readfile($fullPath);
  10. exit();


Message édité par FranceDenBas le 13-05-2011 à 09:33:03

---------------
"Il a inventé le bougisme : je bouge donc je suis" :sol: - Dupont-Aignan à propos de Son Altesse Sérénissime Sarkal 1er. Merci Handsome Devil et Meriadeck.
Reply

Marsh Posté le 14-05-2011 à 20:54:12    

Un grand merci, ça marche impeccable.


---------------
Mon feedback
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed