2009-05-29 7 views
4

J'ai une page php avec des informations, et des liens vers des fichiers, tels que des fichiers pdf. Les types de fichiers peuvent être n'importe quoi, car ils peuvent être téléchargés par un utilisateur.forcer un fichier à télécharger

Je voudrais savoir comment forcer un téléchargement pour n'importe quel type de fichier, sans forcer le téléchargement de liens vers d'autres pages liées au site. Je sais qu'il est possible de le faire avec des en-têtes, mais je ne veux pas casser le reste de mon site.

Tous les liens vers d'autres pages se font via Javascript, et le lien actuel est #, donc peut-être que ce serait OK?

Si je viens de mettre

header('Content-Disposition: attachment;) 

pour toute la page?

+1

Je suis sûr que cela doit être dupe ... – Seb

+0

non, ce n'est pas .... –

Répondre

11

Vous devez envoyer ces deux champs d'en-tête pour les ressources particulières:

Content-Type: application/octet-stream 
Content-Disposition: attachment 

Le Content-Disposition peut avoir en outre un paramètre filename.

Vous pouvez le faire en utilisant un script PHP qui envoie les fichiers:

header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment'); 
readfile($fileToSend); 
exit; 

Et les noms de fichiers sont transmis à ce script via l'URL. Ou vous utilisez certaines fonctionnalités du serveur Web tels que mod_rewrite pour forcer le type:

RewriteEngine on 
RewriteRule ^download/ - [L,T=application/octet-stream] 
6

style un peu différent et prêt à aller :)

$file = 'folder/' . $name; 

if (! file) { 
    die('file not found'); //Or do something 
} else { 
    // Set headers 
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 
    header("Content-Disposition: attachment; filename=$file"); 
    header("Content-Type: application/zip"); 
    header("Content-Transfer-Encoding: binary"); 
    // Read the file from disk 
    readfile($file); 
} 
+0

Et si je veux que le fichier soit enregistré automatiquement, sans que l'utilisateur ne soit invité à enregistrer le fichier. – systemovich

Questions connexes