Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FORCER LE TÉLÉCHARGEMENT


Information sur la source

Catégorie :Astuces Niveau : Débutant Date de création : 17/03/2004 Vu : 6 501

Note :
7,86 / 10 - par 7 personnes
7,86 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

Description

Ces quelques lignes permettent simplement de forcer le téléchargement d'un fichier. Cela évite en autre d'afficher un fichier texte ou doc (...) dans le navigateur.

 

Source

  • <?php
  • header("Content-disposition: attachment; filename=$fichier");
  • header("Content-Type: application/force-download");
  • readfile($fichier);
  • ?>
<?php
header("Content-disposition: attachment; filename=$fichier");
header("Content-Type: application/force-download");
readfile($fichier);
?>

Conclusion

ATTENTION: $fichier contient le chemin d'accès au fichier!!!
 

Commentaires et avis

signaler à un administrateur
Commentaire de zobyone le 17/03/2004 11:33:51

il me semble qu'on peut le faire aussi avec les fichiers .HTACCESS

Enfin c'est toujours bon a savoir.

signaler à un administrateur
Commentaire de Taka_s_tiger le 17/03/2004 16:05:14

super
ca permet de même de récupéré l'intégralité d'une source php
c'est ce qu'il me manquait pour finalisé mon explorateur en php basé sur celui de DHkold
http://www.phpcs.com/code.aspx?ID=13073
mais avec presque autant d'option qu'un Client FTP

merci ;)

signaler à un administrateur
Commentaire de gege217 le 19/03/2004 09:56:19

Ca marche bien en http mais ca marche pas en https (sur IE par exemple).
Il manque des headers je crois...

.oOMimiLOo.

signaler à un administrateur
Commentaire de GREGPUNK le 12/05/2004 11:45:24

mais c bien joli met le fichier a downloader a le nom DOWNLOAD (si bien sur le fichier ou est le code est DOWNLOAD.php)

alors comme faire pour un truc.mp3 pour que l'utilisteur affiche le vrai nom du fichier a télécharger ?

signaler à un administrateur
Commentaire de ejbye7 le 13/05/2004 09:22:36

Pour GREGPUNK:
Excusez-moi mais je n'ai pas très bien compris la question. Peut-être serait-il préférable d'écrire tous les mots dans leur bonne orthographe.
Je reste à votre disposition.
Cordialement.

signaler à un administrateur
Commentaire de DivXter le 23/05/2004 09:28:29

J'ai pas très bien compris cette phrase : ATTENTION: $fichier contient le chemin d'accès au fichier!!!

signaler à un administrateur
Commentaire de fifayer le 13/06/2004 00:23:59

C'est simple, il suffit de metre le nom du fichier à la place de $fichier.
Par contre reste à dire s'il faut le chemin complet du style "www.site.com/downloads/fichier.doc" ou simplement metre "fichier.doc"
Autre question : Est'il possible de le metre dans un lien du type &lt;a href="&lt;?php
header("Content-disposition: attachment; filename=$fichier");
header("Content-Type: application/force-download");
readfile($fichier);
?&gt;"&gt; lien &lt;/a&gt; enfin c'est un peut compliqué...

Sinon cette source m'inquiette gravement ! Je ne savais pas que cela été posible, en effe, lors de surf sur des sites avec des pop-up vers des sites classé X, ils pourraient très bien me faire télécharger un fichier dont je n'ai pas envi tel un .exe logé dans le démarage...
enfin je divague mais sinon la source est bien trouvée..

Bonne prog A+

signaler à un administrateur
Commentaire de ejbye7 le 13/06/2004 13:59:16

$fichier est le chemin d'accès au fichier donc par exemple:
/pub/users/ejbye7/files/toto.fic
ou
c:/program files/easyphp/www/files/toto.fic
ou
simplement toto.fic si tous les fichiers se trouvent dans le même répertoire
ou cv/CV.PDF si cv est un sous-répertoire du répertoire courant et CV.PDF est situé dans ce sous-répertoire.

Autre solution:
imaginons que index.php appelle download.php via une balise
&lt;a href cv/download.php?fichier=CV.PDF&gt;.
download.php contenant le code situé en haut de l'article se trouve dans le répertoire cv avec CV.PDF.
Ce code bien que fonctionnant (preuve au http://www.ejb-info.net avec les CV au format DOC ou PDF) n'est pas très propre: l'idéal serait que le fichier index.php s'appelle lui-même en spécifiant le téléchargement à effectuer (cela évite d'avoir une tonne de fichiers).

J'ignore si on peut faire une balise monstrueure comme celle décrite par fifayer, mais c'est à essayer! Ce serait assez Fun... Au pire: faites ce que je viens d'écrire (boucle sur index.php).

Pour fifayer: en effet, sur des sites, il arrive qu'ils demandent l'enregistrement de fichier pour des raisons diverses: il suffit de refuser l'enregistrement.
En principe, je devrait avoir répondu à toutes les questions dont je connais la réponse.

Ouf!!! Bon maintenant je vais me reposer: je n'ai plus écrit autant depuis longtemps...

Merci à tous pour vos commentaires et à plus.
EJB

signaler à un administrateur
Commentaire de aze555666 le 25/07/2004 15:57:45

chez moi, ca marche pas. j'ai voulu le rajouter à mon webftp ( http://www.phpcs.com/code.aspx?ID=24147),
et non seulement le telecargement ne demare pas, mais en plus, la page entiere est effacée (tout est blanc).

signaler à un administrateur
Commentaire de grandvizir le 12/02/2005 19:02:59

Merci de donner un fichier du type suivant. Il doit s'appeler "forcedown.php":

<?php
  if (isset($_GET['downfile'])) {
    header('Content-disposition: attachment; filename='.$_GET['downfile']);
    header('Content-Type: application/force-download');
    readfile($_GET['downfile']);
  } else {
    echo '<b>Pas de fichier passé en commande.</b>';
    echo '<br>Utilisez une ligne de commande du type:';
    echo '<br><font face="Courier New" size=2>http://myweb.com/forcedown.php?downfile=fichier.txt</font>';
  }
?>

L'avantage est très grand, car en plus de forcer un téléchargement, vous pouvez en même temps gérer un compteur de téléchargement, ce qui est plutôt fort sympathique.

Mais c'est vrai que certains headers semblent manquants. Va savoir lesquels...

signaler à un administrateur
Commentaire de grandvizir le 09/04/2005 12:07:17

Voir le lien ci-dessous pour quelques idées supplémentaires :
http://www.phpcs.com/forum.v2.aspx?ID=311070

signaler à un administrateur
Commentaire de grandvizir le 04/06/2005 14:48:14

Je ne comprend pas pourquoi, mais passer par un tel force download pour télécharger un fichier me fait parfois ramer le browser.

Si je veux télécharger un ZIP, il suffit que le header se lie au MIME déclaratif du format ZIP. En l'occurence, on a ceci qui marche bien mieux :

  $Fichier = 'fichier.zip';
  header('Content-Type: application/x-zip-compressed');
  readfile($Fichier);

Pour trouvez les MIME facilement, ouvrez REGEDIT puis la clé "HKEY_CLASSES_ROOT\.???" où les points d'interrogation remplacent l'extension. Le résultat est donné par la valeur "Content Type".

Voilà qui va simplifier les choses. Reste plus qu'à bloquer par .HTACCESS le dossier où sont classés les ZIP, de manière à ce qu'ils ne soient accessibles que par un forced download provoqué par un script PHP. Les sessions se cachent derrière pour gérer les droits de téléchargement. Voir:
http://www.phpcs.com/forum.v2.aspx?ID=277521

signaler à un administrateur
Commentaire de PaTaTe le 15/12/2005 15:32:52

Bonjour

J'ai ecris ce petit script. Seulement il pose problème !

En effet, quand la fenetre il me dit type inconnu (mame si dans le champ Type il m'indique bien le bon type) et le nom du fichier n'est pas recupéré (c'est le nom du script à la place)

Voici le code :

<?PHP
if (isset($_GET['fichier'])) {
$fichier=$_GET['fichier'];
$ext=substr(strrchr($fichier,"."),1);
header('Content-disposition: attachment; filename='.$fichier);
switch($ext){
case 'exe': header("Content-Type: application/force-download");
case 'zip': header("Content-Type: application/x-zip-compressed");
// j'ai fais court pour les type dans l'exemple lol
}
readfile($fichier);
}else{
echo 'Erreur dans le traitement du fichier';
}
?>

Merci de m'aider à y voir clair :)

signaler à un administrateur
Commentaire de GREGPUNK le 17/02/2006 14:28:29

ca ne marche pas pour les gros fichier >8Mo
Donc je recherche une méthode par htaccess

signaler à un administrateur
Commentaire de GREGPUNK le 17/02/2006 14:43:36

C'est bon y'a qu'a mettre cette lign au début du fichier:
ini_set("memory_limit","50M"); // equivalent a 50Mo ;-)

signaler à un administrateur
Commentaire de liukang le 01/09/2006 18:41:38

Bonour à tous,

Au risque de passer pour un plaisantin, je vais appel à vous car j'en ai marre d'arpenter la toile et de ne tomber que sur des éléments incomplets de réponse...

Il est donc question de forcer le téléchargement d'un fichier (en l'occurence ici un mp3)...

Depuis flash :
"  var fichierdld:String =     _root.player.list.__dataProvider[_root.player.list.selectedIndex].data;

_root.dwldzik_btn.onRelease = function() {
getURL("DLD.php","_blank","POST");
         };"

Dans mon DLD.php :
"<?php

header("Content-Disposition: attachment; filename=$fichierdld");
header("Content-type: application/force-download");

readfile($fichierdld);
?>

Et ça ne marche pas...
en fait IE me propose de sauver, ouvrir DLD.php ou d'annuler (c'est la fenètre qu'il me faut mais pour le fichier.mp3"

A l'aide

J'en ai marre de retourner toutes les pages internets de code (le problème est que le plus souvent Actionscript sur flash et php ne rassemblent pas les même admirateurs...lol) et d'éplucher l'aide de flash... Alors s'il vous plaît aider moi...

D'avance merci

signaler à un administrateur
Commentaire de Carlatocer le 12/02/2007 17:40:21

Cette source est trés utile.
Mais es qu'il est possible de telecharger un fichier php d'un site web.
Par exemple un site ou j'ai remarquer un trés bon script php. Es que je pourrais, si j'ai le lien précis du fichier, pouvoir le télécharger ?
Sa sa m'interreserait beaucoup.
Merci d'avance de votre réponse

signaler à un administrateur
Commentaire de lucas74 le 05/12/2007 14:14:51

Heureusement, Non ! Tu ne peux pas !

signaler à un administrateur
Commentaire de PaTaTe le 05/12/2007 21:15:29

Lucas74 =|> en forçant le téléchargement sur un fichier PHP ça marche (j'ai testé)

signaler à un administrateur
Commentaire de lucas74 le 06/12/2007 18:28:41

un script PHP de ton site, je pense, non ?
Sinon, tu n'a pas le code PHP ?

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.