"Enregistrer sous" un texte via "div"

"Enregistrer sous" un texte via "div" - PHP - Programmation

Marsh Posté le 14-08-2009 à 20:15:39    

Bonjour à toutes et à tous !  :hello:  
Je ne pense pas qu'on peut faire ça qu'en PHP (heureusement) mais ça me suffirait déjà :)
J'ai un textarea ou un visiteur écris un message. J'aimerais lui permettre d'enregistrer ce message sous un fichier sur son ordinateur à l'aide d'un bouton sur lequel il pourra cliquer.
 
J'ai donc penser à écrire son fichier dans un fichier temporaire (mais là faudrait créer un fichier temporaire par visiteur...)
Savez-vous s'il y a un moyen simple de réaliser cette opération ?
 
D'avance, merci pour votre aide.

Reply

Marsh Posté le 14-08-2009 à 20:15:39   

Reply

Marsh Posté le 15-08-2009 à 11:15:23    

UP
Personne ne voit de solution ?

Reply

Marsh Posté le 15-08-2009 à 14:05:43    

Tu peux générer un fichier texte, word, pdf ou n'importe quel format en php, mais tu ne peux pas obliger l'utilisateur à enregistrer ce fichier sur sa machine.
Sous quel format veux-tu exporter le contenu de ton textarea ?


Message édité par Pascal le nain le 15-08-2009 à 14:06:08
Reply

Marsh Posté le 15-08-2009 à 14:18:43    

Merci d'avoir répondu,  
j'avais envi de l'exporter au format texte (je ne sais pas encore l'encodage, tant qu'il est lisible).
Je viens de voir qu'on pouvait forcer un téléchargement (ouvrir la boite de dialogue :http://php.developpez.com/faq/?page=fichiers_upload#fichiers_forcedownload)
Par contre si j'enregistre mon fichier (que j'aurais créé avec mes fputs), j'ai peur que ce même fichier soit partagé par tous les visiteurs, et a moins d'en créé bcp je ne vois pas d'autre solution,  
Tu saurais s'il y a une solution permettant d'éviter ce probleme ?
 
En tout cas merci

Reply

Marsh Posté le 15-08-2009 à 14:32:56    

Non, ce n'est pas ainsi que ca fonctionne.
Le fichier texte généré n'est à aucun moment enregistré sur le serveur.
Quand tu clique sur ton bouton, tu appelles un fichier php.
Ce fichier php te génère à la volée un fichier du type de ton choix et te l'envoi directement.
Ce ficher créé à la volée est le fruit de l'exécution du fichier php pour et uniquement pour ton visiteur.
 
Un autre visiteur qui cliquera sur ce bouton verra son texte généré en fichier texte, et à aucun moment celui d'un autre.
IL faut bien comprendre que pour le serveur, les deux sessions sont complètement distincts et ne peuvent se partager de fichier.
 
Mais on ne peux même pas à proprement parler de fichier du coté serveur, puisque ce fichier en est un vraiment qu'une fois sur la machine du client. A aucun moment le fichier n'est enregistré sur le disque du serveur.
Pour le serveur, c'est simplement un buffer généré qu'il envoit par protocole http, et tout se passe dans sa mémoire Ram.
 
Sinon, tu ne peux pas forcer un téléchargement. Tu peux laisser interpréter le navigateurs, si c'est un format lisible par celui-ci. Dans un tel cas, ton ordi télécharge le fichier dans un dossier temporaire qui sera rapidement vidé. L'autre solution que tu as trouvé affiche la classique fenetre qui te propose d'ouvrir ou enregistrer vraiment le fichier dans un dossier non volatile, mais l'utilisateur peut très bien refuser le téléchargement.


Message édité par Pascal le nain le 15-08-2009 à 14:43:46
Reply

Marsh Posté le 15-08-2009 à 16:23:22    

Merci bcp pour cet éclaircissement.
Je crois avoir tout compris sauf un détail.
 
Voilà comment je vois les étapes :
-Sur mon fichier php où il y a le textarea et le bouton ouvrant la boite de dialogue, le visiteur écris son texte puis clique sur ce bouton
 
- Normalement une fenêtre est censé s'ouvrir lui demandant où est ce que "le fichier généré à la volé" doit être sauvegardé. Puis après indication il l'enregistre ainsi sur son disque dur.
 
En ce qui concerne la boite de dialogue, je suppose qu'il faut utiliser les header (comme sur le lien que j'ai indiqué, à moins qu'il n'y ait un autre moyen).
Mais ce qu'il me manque c'est comment créer ce fichier à la volée.
Quel fonction ou script dois-je utiliser, car j'ai toujours pensé que fopen et fput permettaient de créer un fichier "sur le serveur" ?
 
En tout cas merci.

Reply

Marsh Posté le 15-08-2009 à 17:10:19    

J'ai jamais fait ce genre de truc, mais je pense qu'il faut modifier les headers quand ton fichier est généré.
 
--- INUTILE EN FAIT ----
Changer le type mime tout d'abord :

header('Content-type: text/plain');

--- /INUTILE EN FAIT ----
 
Et obliger l'affichage de la fenetre de téléchargement :
 

header('Content-disposition: attachment');


 
Encore une fois, je dis ça au hasard, je ne l'ai jamais testé.
C'est très probable que ca ne fonctionne pas  :lol:


Message édité par Pascal le nain le 17-08-2009 à 12:02:13
Reply

Marsh Posté le 17-08-2009 à 11:58:53    

J'ai testé pour toi, ca fonctionne bien.
Par contre le fichier téléchargé a toujours une extension en .php.
Tu peux bidouiller ca avec de l'url rewriting pour avec un nom de fichier en .txt
 
edit : il est inutile en fait de changer le type mime, car on demande un téléchargement en "attachment".


Message édité par Pascal le nain le 17-08-2009 à 12:00:46
Reply

Marsh Posté le 17-08-2009 à 13:00:39    

pour l'extention, il suffis de faire ainsi
 

header('Content-disposition: attachment; filename="monfichier.txt"');


Message édité par stealth35 le 17-08-2009 à 13:00:47
Reply

Marsh Posté le 17-08-2009 à 14:06:19    

Merci  ;)

Reply

Marsh Posté le 17-08-2009 à 14:06:19   

Reply

Marsh Posté le 17-08-2009 à 20:27:48    

Merci bcp,
Je vais tester et vous tiens au courant

Reply

Marsh Posté le 17-08-2009 à 21:19:59    

Ca marche parfaitement ! Merci...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed