Forcer le téléchargement

Eléphanteau du PHP | 34 Messages

08 oct. 2008, 17:17

bonjour,

Petit problème donc pour "forcer le téléchargement" d'un fichier. C'est à dire forcer l'affichage de la fenêtre "ouvrir ou enregistrer".
Dans ma page je met :
 <!php
    include 'forcer.php';
    forcerTelechargement('IMG/toto.ppt');
 !>
Et donc dans le fichier 'forcer.php' :
<?php
function forcerTelechargement($filename) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($filename) );
    header('Accept-Ranges: bytes');
    header('Content-Length: '.filesize($filename) );
    readfile($filename);
    exit();
}
?> 
Mon probleme c'est que le fichier source s'ouvre bien, mais le fichier télécharger demande une feuille css pour s'ouvrir :) je comprend rien.

a noter que j'utilise le CMS spip. le fichier source se trouve dans l'arborescence spip.

merci pour vos réponses
Pouap !

ViPHP
ViPHP | 1996 Messages

08 oct. 2008, 19:19

De kel type MIME s'agit -il ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 34 Messages

09 oct. 2008, 12:29

bonjour,

je ne sais pas trop ce qu'est un type MIME,

je dirais, apres avoir regarder un peu, celui ecrit : application/octet-stream

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1996 Messages

09 oct. 2008, 13:58

Si tu indiques header('Content-Type: application/octet-stream');
le navigateur ne sachant de quel type MIME il s'agit va chercher et si il ne trouve pas va donner des trucs du genre que tu as eu...

Détermine le type MIME avant de lancer ta fonctio. Si ton visiteur veut un fichier excel (par exemple), tu sais bien qu'on peut savoir qu'il s'agit d'un fichier excel car il a l'extention .xls. Aussi tu isoles l'extention de ton fichier avec pathinfo (http://www.manuelphp.com/php/function.pathinfo.php). Ensuite tu ajuste la fonction header en fonction de l'extention et le tour est joué. Exemple :

<?php
$fichier = pathinfo('/www/htdocs/essai.xls');

$extention = $path_parts['extension'];

header("Content-type: application/$extention");
header("Content-Disposition: attachment; filename=".$path_parts['basename']);
...


?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

09 oct. 2008, 14:35

Merci Aureusms pour ta réponse.

Malheureusement, ca donne le même résultat.
Je pense maintenant que ca vient plus d'un problème lié a l'utilisation du CMS SPIP.
J'ai testé avec un fichier "hors arborescence" SPIP, et ca fonctionne.

Je vais donc posé cette question sur un forum spip

encore une fois, merci a toi

ViPHP
ViPHP | 1996 Messages

09 oct. 2008, 15:13

Aucun problème :wink:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]