PHP/HTML

Fermé
AMichel - 30 juil. 2002 à 09:42
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011 - 28 juil. 2008 à 17:58
salut,
Je travaille sur un intranet et je souhaite faire apparaitre une boite de dialogue style "Enregistrer sous" et je ne sais pas comment faire. J'ai réussi a ouvrir une boite du style 'ouvrir' en utilisant :"input file" et ca marche tres bien mais je ne trouve rien pour "Enregistrer sous".
Toutes vos idees seront les bienvenues.
Merci d'avance.
A voir également:

11 réponses

Le code que je t'ai donné permet de "dire" au navigateur du visiteur que la page doit être considéré comme un fichier à enregistrer sur le disque dur, il y a donc une fenêtre qui s'ouvre et qui permet d'enregistrer le fichier sur le disque dur (enregistrer sous), cette fenêtre ne peut pas être modifiée.

Ce code doit être placé tout en haut de la page avant tout le reste.

J'éspère que ça t'aidera.
35
J'ai placé ton code en debut de programme mais j'obtiens des messages 'warning : cannot add header information'
puis ma page s'affiche comme avant.

Que puis je faire?
0
Salut,

on ne peut pas changer les fenêtres qui s'ouvrent par cette technique, car ce sont les mêmes que celles qui s'ouvrent pout télécharger un fichier "normal" et elle sont définies par IE.

Pour ouvrir le fichier dans une nouvelle fenêtre à partir d'un lien il faut que tu mettes target="_blank" dans la balise <a>.

J'ai mis un fichier d'exemple sur mon serveur, voilà l'adresse : http://thomas.chaumeny.free.fr/exemple.zip

a+
2
Il faut utiliser les header HTTP, par exemple tu mets le code suivant en haut du fichier :

//------//
if (!empty($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
$HTTP_USER_AGENT = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
} elseif (!empty($_SERVER['HTTP_USER_AGENT'])) {
$HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
}

if (eregi('MSIE[[:space:]]+[0-9]+\.[0-9]+', $HTTP_USER_AGENT)) { //if browser is IE compatible
header('Content-Type: application/octetstream');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else { //if browser is not IE compatible
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Expires: 0');
header('Pragma: no-cache');
}
//------//


a+
1
Super, grace a toi, j'ai pu enfin ouvrir cette fenetre.
Il me reste qqes petits points noirs à solutionner, veux-tu continuer à m'aider?

J'ai mis ton code ds un pgm a part que j'appelle en cliquant sur un bouton de formulaire.
1) Mon appli s'arrete complètement pour ouvrir cette fenetre au lieu de la laisser active pour que je puisse ensuite clicquer sur valider en fin de selection et enchainer sur d'autres pages?
2) le fenetre qui s'ouvre c'est "téléchargement de fichier" puis "enregistrer sous" peut on éviter la premiere?

Je veux bien voir ton fichier, cela me donnera une idée.

Encore merci.
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai testé ton "exemple".php". J'ai fais comme toi mais je rencontre des difficultés car je n'arrive pas a integrer ce code dans mes programmes.
Pour éviter de passer par le forum et pour etre plus reactif, puis-je te contacter directement par téléphone? si cela ne te dérange pas ou bien directement par mails?
Sinon, je tévoquerai mes pbs aprés avoir eu ta réponse.
A+
1
masternico Messages postés 487 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 septembre 2011 320
28 juil. 2008 à 17:58
Salut tout le monde...
Votre méthode est pas mal, mais présente un gros gros problème de sécurité. Je m'explique:

grâce à ce script, il est possible de forcer le téléchargement d'un fichier depuis le serveur... c'est cool, mais que se passe t-il si je fait un appel direct à la page en mettant à la main un nom de fichier php qui m'interesse. Ex: download_file.php?file_name=index.php
Et bien je reçoit le code source php. Dès lors, je le décortique, et je télécharge les fichiers de configuration de la connexion à la BDD et là j'ouvre la porte en grand...
1
Qu'est ce que tu veux enregistrer ?
Je suppose que c'est un fichier mais dis m'en un peu plus....
0
oui il s'agit d'un fichier. Je fais une requete SQL et je cree un fichier '.csv' , je veux pouvoir choisir le repertoire dans lequel j'irai stocker le fichier et avoir la possibilité de donner un nom a ce nouveau fichier. Si tu as besoin de plus d'infos je suis a ta disposition.
0
il faut avant ce code que tu définisses la variable $filename (le nom du fichier), exemple d'utilisation de ce code:

<?php
$filename = 'test.txt';

if (!empty($HTTP_SERVER_VARS['HTTP_USER_AGENT'])) {
$HTTP_USER_AGENT = $HTTP_SERVER_VARS['HTTP_USER_AGENT'];
} elseif (!empty($_SERVER['HTTP_USER_AGENT'])) {
$HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
}

if (eregi('MSIE[[:space:]]+[0-9]+\.[0-9]+', $HTTP_USER_AGENT)) { //if browser is IE compatible
header('Content-Type: application/octetstream');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
} else { //if browser is not IE compatible
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Expires: 0');
header('Pragma: no-cache');
}
?>

contenu du fichier
0
Merci pour ton code mais j'ai un peu de mal a comprendre!
J'ai testé ton code mais je dois mal l'utiliser.

Reprenons au debut:
Lorsque ma page est affichée je donne ds ma ligne 'input type=text' value=le chemin par defaut ex: c:/repert1/sousrepert2
puis ds une autre ligne 'input type=text' value='nomfichier'
Je voudrais, en cliquant sur un bouton que la boite de dialogue "Enregistrer sous" s'ouvre, que l'on recherche ds l'arborescence le nouveau chemin du repertoire ex:d:/repert2/ssrepert4/ et modifier le nom du fichier si on le souhaite puis apres avoir clique sur enregistrer, on retrouve ds les deux lignes les nouvelles valeurs( comme cela se fait ss windows en faisant fichier enreg ss).

votre code fait il cela?
0
Si tu as ce message c'est que le code n'est pas tout à fait au début, il ne faut pas qu'il y ait le moindre espace avant le <?php au début.
0
Si tu veux je t'envoie un fichier pour te montrer sur ton mail
0