Enregistrer sur disque utilisateur répertoire et fichier

Petit nouveau ! | 6 Messages

23 févr. 2011, 22:33

La balise html a fonctionne avec tout type de fichier. La différence d'interprétation vient ensuite du navigateur.
Si ton navigateur ne télécharge pas le fichier c'est à voir avec sa configuration. :)
.. J'ai IE8 sous XP quels parametres a changer afin de pouvoir traiter tous les fichiers ...

ViPHP
AB
ViPHP | 5818 Messages

24 févr. 2011, 00:50

Et qu'est-ce qui ne marche pas ? ça ouvre le fichier au lieu de le proposer en téléchargement ? Si c'est ça le plus simple est de mettre ton fichier dans une archive de type .zip ou .rar


Sinon il faudra passer par des header pour forcer le téléchargement. Par exemple :

code de la page php nommée "telechargement_fichier.php" qui force le téléchargement du fichier visugpx.gpx (en supposant que ce fichier soit dans le même répertoire que ce script)
<?php
$nom_fichier = 'visugpx.gpx';

$filesize = filesize($nom_fichier);

// Entêtes pour forcer le téléchargement, type de fichier, poids, nom
header('Content-Type: application/octet-stream');      
header("Content-Transfer-Encoding: text/xml");
header("Content-Length: ".$filesize);
header("Content-Disposition: attachment; filename=\"".$nom_fichier."\"");

// Différents code pour ne pas mettre le fichier dans le cache du navigateur
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
header("Pragma: no-cache");
header("Expires: 0");

readfile($nom_fichier);
exit;

?>
Et dans ta page html
<a href="telechargement_fichier.php">télécharger</a>

Tu peux aussi passer en paramètre le nom du fichier par exemple
<a href="telechargement_fichier.php?fichier=visugpx.gpx">télécharger</a>
pour récupérer $_GET['fichier'] dans ta page php. Mais dans ce cas tu dois absolument trouver un moyen pour contrôler la valeur de $_GET['fichier'] qui servira pour le téléchargement sinon c'est une faille MAJEURE de sécurité (et ton site risque de ne pas survivre longtemps).

ViPHP
xTG
ViPHP | 7331 Messages

24 févr. 2011, 01:58

Les header() ne peuvent pas réellement forcer quoi que ce soit, ils permettent juste de renseigner le navigateur sur le type de contenu. J'ai un ami qui suit des cours sur le web et on lui avait montré qu'en configurant le navigateur on pouvait ouvrir le fichier comme si c'était une page HTML (mais affiché comme un fichier txt - sans interprétation -) et ce quelque soit le type de fichier.
Son exemple portait sur un fichier zip dont le contenu était affiché par le navigateur (pas la liste des fichiers hein...).

ViPHP
AB
ViPHP | 5818 Messages

24 févr. 2011, 03:15

...en configurant le navigateur on pouvait ouvrir le fichier comme si c'était une page HTML (mais affiché comme un fichier txt - sans interprétation -) et ce quelque soit le type de fichier.
Son exemple portait sur un fichier zip dont le contenu était affiché par le navigateur (pas la liste des fichiers hein...).
Qu'on puisse configurer un navigateur pour avoir un comportement non standard est une chose, par contre avec un réglage par défaut, les headers permettent de proposer le fichier en téléchargement et il me semble que c'était la question :wink: ... sinon un fichier xml (le gpx est au format xml) sera automatiquement ouvert s'il est simplement dans un lien href, alors qu'un fichier zip - toujours avec les réglages par défaut - sera proposé en téléchargement.

Alors après, que l'on ne puisse pas gérer le comportement des utilisateurs, c'est tant mieux, et tant qu'ils n'ont pas que la télé comme seule source d'information, c'est une option qui leur est encore disponible :)

ViPHP
xTG
ViPHP | 7331 Messages

24 févr. 2011, 10:55

Ah mais je dis pas le contraire AB. :D
C'était juste pour appuyer le fait que fonction header() ou balise <a> certains fichiers (comme les txt) ne seront jamais proposé au téléchargement de base.

HappyTreeFred
Invité n'ayant pas de compte PHPfrance

24 févr. 2011, 13:18

Salut j'ai presque le même problème que toi (voir ici : php-avance/recuperer-chemin-une-boite-d ... 57522.html)
Voici ce que j'ai trouvé lors de mes recherches :

Pour créer une boite de dialogue pour parcourir ton disque il faut utiliser ce code :

Code : Tout sélectionner

<?php header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=$pdf"); //$pdf contient le chemin du fichier pdf à enregistrer readfile($pdf); ?>
Tu peux l'appeler ce cette manière par exemple :

Code : Tout sélectionner

<a href="x.php?pdf=y.pdf">Télécharger le pdf</a>

ViPHP
AB
ViPHP | 5818 Messages

24 févr. 2011, 17:27

C'était juste pour appuyer le fait que fonction header() ou balise <a> certains fichiers (comme les txt) ne seront jamais proposé au téléchargement de base.
Avec un fichier .txt et les headers que j'ai indiqué plus haut, j'ai juste mis text/plain comme paramètre dans le Content-Transfer-Encoding et après test ça me propose bien mon fichier .txt en téléchargement sur IE, FF, et Chrome (tous avec un paramétrage par défaut). Donc je comprend toujours pas ce que tu veux dire #-o

Petit nouveau ! | 6 Messages

26 févr. 2011, 23:01

avec IE8 quel parametres a changer pour telecharger tout type de fichier .XLS .KML .GPX

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 févr. 2011, 23:49

Je suppose que c'est dans les options microsoft a peut etre une faq pour cela ? ;)

A tu essayer le code de AB en remplacant par le bon mime ?

En demandant gentillement a google tu devrais facilement avoir les types associés à tes documents (mais bon c'est du text donc plain/text devrait suffir sauf si bien sur ton navigateur l'affiche dans ce cas un autre pourrait etre mieux... )

@+
Modifié en dernier par moogli le 27 févr. 2011, 08:07, modifié 1 fois.
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

27 févr. 2011, 00:08

C'était juste pour appuyer le fait que fonction header() ou balise <a> certains fichiers (comme les txt) ne seront jamais proposé au téléchargement de base.
Avec un fichier .txt et les headers que j'ai indiqué plus haut, j'ai juste mis text/plain comme paramètre dans le Content-Transfer-Encoding et après test ça me propose bien mon fichier .txt en téléchargement sur IE, FF, et Chrome (tous avec un paramétrage par défaut). Donc je comprend toujours pas ce que tu veux dire #-o
Beuh je suis pas l'expert pour te répondre malheureusement...
Mais si j'y pense je tâcherai de croiser mon copain et lui demander des détails. :)