Ecrire dans un fichier sur un client

Ecrire dans un fichier sur un client - PHP - Programmation

Marsh Posté le 08-08-2005 à 10:16:51    

Bonjour a tous,
 
J'aimerais pouvoir écrire dans un fichier csv directement sur l'ordinateur du client, et non sur le serveur.  
 
Pour l'instant, j'ai crée mon fichier csv sur le serveur sans problèmes, mais étant donné que ce fichier sera généré par plusieurs clients et contiendra des données différentes, j'aimerais écrire directement les données sur un fichier csv sur le client.  
 
Je pensais demander au client où il veut placer son fichier sur le disque dur (disons c:\temp), puis créer ce fichier en y intégrant les données. Seulement, je n'arrive pas du tout à créer un quelconque fichier sur le client.
 
Si vous savez comment faire, je suis preneur, ou si une autre méthode, meilleure, je le suis aussi. :)

Reply

Marsh Posté le 08-08-2005 à 10:16:51   

Reply

Marsh Posté le 08-08-2005 à 10:19:52    

tu peux pas écrire de fichier sur le poste client
et encore heureux sinon ca serait une magnifique falle de securité

Reply

Marsh Posté le 08-08-2005 à 10:31:26    

Tu as deux possibilités:
- Java
- ActiveX
 
Pour le 1er je ne peux pas t'aider, pour le second, c'est un simple JavaScript qui appelle un objet ActiveX, mais uniquement disponible avec Internet Explorer, avec toutes les contraintes de sécurité que ça ammène (si le client a désactivé l'execution d'ActiveX, et j'espère qu'il l'a fait! alors tu pourras rien faire)
 

Code :
  1. <script type="text/javascript">
  2.   <!--
  3.     function WriteFile() {
  4.       var obj = new ActiveXObject("Scripting.FileSystemObject" );
  5.       var file = obj.OpenTextFile("C:\\fichier.txt" , 8);
  6.       file.writeline("On écrit une ligne à la fin du fichier" );
  7.       file.Close();
  8.     }
  9.   -->
  10. </script>


 
C'est effectivement une magnifique faille de sécurité Gatsusat! Merci Microsoft!


Message édité par dotfx le 08-08-2005 à 10:32:45

---------------
www.renderfarm.online
Reply

Marsh Posté le 08-08-2005 à 10:33:07    

Je sais, mais je me disais que peut etre avec l'accord du client on pouvait le faire. :??:
 
Sinon, l'autre solution serait, lorsque la personne choisit l'emplacement et cliques sur ok, de générer le fichier et de le supprimer par la site, mais comment voir si le telechargement est terminé ou non ?

Reply

Marsh Posté le 08-08-2005 à 10:37:43    

dotfx a écrit :

Tu as deux possibilités:
- Java
- ActiveX
 
Pour le 1er je ne peux pas t'aider, pour le second, c'est un simple JavaScript qui appelle un objet ActiveX, mais uniquement disponible avec Internet Explorer, avec toutes les contraintes de sécurité que ça ammène (si le client a désactivé l'execution d'ActiveX, et j'espère qu'il l'a fait! alors tu pourras rien faire)
 

Code :
  1. <script type="text/javascript">
  2.   <!--
  3.     function WriteFile() {
  4.       var obj = new ActiveXObject("Scripting.FileSystemObject" );
  5.       var file = obj.OpenTextFile("C:\\fichier.txt" , 8);
  6.       file.writeline("On écrit une ligne à la fin du fichier" );
  7.       file.Close();
  8.     }
  9.   -->
  10. </script>


 
C'est effectivement une magnifique faille de sécurité Gatsusat! Merci Microsoft!


 
Merci pour cela, mais effectivement, je suis dans une entreprise, et l'execution d'active x a été désactivée par defaut. :/

Reply

Marsh Posté le 08-08-2005 à 10:51:11    

Si c'est un réseau local, il serait plus sûr et interessant de créer un répertoire partagé avec certains droits, et qu'un script accède à ce répertoire (par ex \\machine\répertoire\fichier.csv) toutes les X minutes (cron? Perl?), sans que l'utilisateur n'ait à utiliser un navigateur. À moins que l'utilisation de celui-ci soit justifié.


Message édité par dotfx le 08-08-2005 à 10:59:50

---------------
www.renderfarm.online
Reply

Marsh Posté le 08-08-2005 à 11:04:00    

dotfx a écrit :

Si c'est un réseau local, il serait plus sûr et interessant de créer un répertoire partagé avec certains droits, et qu'un script accède à ce répertoire (par ex \\machine\répertoire\fichier.csv) toutes les X minutes (cron? Perl?), sans que l'utilisateur n'ait à utiliser un navigateur. À moins que l'utilisation de celui-ci soit justifié.


 
En fait, le fichier peut etre crée par tous les utilisateurs de l'entreprise (environ 1000), et chaque fichier pourra être différent suivant ce que la personne souhaite. Donc créer un répertoire unique, je ne pense pas que ce soit la bonne solution. :/

Reply

Marsh Posté le 08-08-2005 à 11:11:12    

Est-ce vraiment nécessaire d'écrire sur le poste client? Tu peux pas tout centraliser sur une machine, où les fichiers sont l'IP et/ou nom d'utilisateur, ou mieux encore une bdd MySQL par exemple?
 
Si oui, je suis sûr que sur le forum Java qqun pourra te renseigner pour faire un petit applet qui pourra écrire ces fichiers sur le poste client. Là encore, il faut que Java soit activé et installé sur les machines.


---------------
www.renderfarm.online
Reply

Marsh Posté le 08-08-2005 à 12:13:31    

La solution est de générer ton fichier csv et de le faire télécharger par le client tout betement en utilisant un lien cliquable ou un bouton.

Reply

Marsh Posté le 08-08-2005 à 12:25:09    

ou en faisant une redirection et en modifiant directement le header, comme ça pas besoin de lien :)


Message édité par onizuka_sensei le 08-08-2005 à 12:25:24
Reply

Marsh Posté le 08-08-2005 à 12:25:09   

Reply

Marsh Posté le 08-08-2005 à 12:25:32    

afbilou a écrit :

La solution est de générer ton fichier csv et de le faire télécharger par le client tout betement en utilisant un lien cliquable ou un bouton.


 
Oui c'est ce que je disais plus haut ;) Seulement, j'aimerais pouvoir le supprimer après qu'il l'ait telechargé (c'est la solution que j'ai pris, mais je n'ai pas reussi a faire en sorte de supprimer le fichier).
 
En fait, ce n'est pas vraiment necessaire, c'etait pour ne psa générer plusieurs fichiers sur le serveur (car il n'a pas un espace disque alloué énorme, donc je ne voulais pas faire ca, pour ne pas satuer le disque du serveur).
 
Et l'emploi d'une bdd Mysql, c'est non, vu que je n'en utilises pas, et ce serait dommage d'en créer une juste pour cette fonctionnalité.

Reply

Marsh Posté le 08-08-2005 à 12:58:40    

Tu peux faire un script qui va purger régulièrement le répertoire où tu as généré tes fichiers à télécharger ;)

Reply

Marsh Posté le 08-08-2005 à 13:33:02    

Je crois que tu t'y prends mal !

Code :
  1. <?php
  2. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename=truc.txt');
  5. echo 'Je génére les données CVS avec des echos :D',"\n";
  6. echo 'Je génére les données CVS avec des echos :D',"\n";
  7. echo 'Je génére les données CVS avec des echos :D',"\n";
  8. echo 'Je génére les données CVS avec des echos :D',"\n";
  9. echo 'Je génére les données CVS avec des echos :D',"\n";
  10. echo 'Je génére les données CVS avec des echos :D',"\n";
  11. echo 'Je génére les données CVS avec des echos :D',"\n";
  12. echo 'Je génére les données CVS avec des echos :D',"\n";
  13. echo 'Je génére les données CVS avec des echos :D',"\n";
  14. echo 'Je génére les données CVS avec des echos :D',"\n";
  15. echo 'Je génére les données CVS avec des echos :D',"\n";
  16. echo 'Je génére les données CVS avec des echos :D',"\n";
  17. ?>


Le header('Content-Disposition: attachment; filename=truc.txt'); specifie que le fichier que va telecharger le client s'appellera truc.txt par defaut ! Il pourra le changer dans la boite de dialogue de telechargement evidemment !
Coté serveur tu ne crées pas de fichier justement avec cette methode ! Pour que le client recoive le fichier il suffit de faire un lien tout bete vers le script en question.

Reply

Marsh Posté le 08-08-2005 à 15:33:32    

afbilou a écrit :

Je crois que tu t'y prends mal !

Code :
  1. <?php
  2. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  3. header('Content-Type: application/octet-stream');
  4. header('Content-Disposition: attachment; filename=truc.txt');
  5. echo 'Je génére les données CVS avec des echos :D',"\n";
  6. echo 'Je génére les données CVS avec des echos :D',"\n";
  7. echo 'Je génére les données CVS avec des echos :D',"\n";
  8. echo 'Je génére les données CVS avec des echos :D',"\n";
  9. echo 'Je génére les données CVS avec des echos :D',"\n";
  10. echo 'Je génére les données CVS avec des echos :D',"\n";
  11. echo 'Je génére les données CVS avec des echos :D',"\n";
  12. echo 'Je génére les données CVS avec des echos :D',"\n";
  13. echo 'Je génére les données CVS avec des echos :D',"\n";
  14. echo 'Je génére les données CVS avec des echos :D',"\n";
  15. echo 'Je génére les données CVS avec des echos :D',"\n";
  16. echo 'Je génére les données CVS avec des echos :D',"\n";
  17. ?>


Le header('Content-Disposition: attachment; filename=truc.txt'); specifie que le fichier que va telecharger le client s'appellera truc.txt par defaut ! Il pourra le changer dans la boite de dialogue de telechargement evidemment !
Coté serveur tu ne crées pas de fichier justement avec cette methode ! Pour que le client recoive le fichier il suffit de faire un lien tout bete vers le script en question.


 
 
Ah nikel, ca marche. Par contre, comment faire pour que le navigateur (ie entre autres) n'interpretes pas le fichier csv et l'affiche directement. J'aimerais plutot une invite de commandes pour enregistrer le fichier csv ?

Reply

Marsh Posté le 08-08-2005 à 16:10:22    

Pardon ? Tu ne souhaites plus qu'il soit proposé au client de telecharger le fichier cvs généré ?

Reply

Marsh Posté le 08-08-2005 à 16:12:29    

afbilou a écrit :

Pardon ? Tu ne souhaites plus qu'il soit proposé au client de telecharger le fichier cvs généré ?


 
Si justement, je voudrais que le client puisses telecharger le fichier cvs, hors, la pour l'instant, le fichier s'ouvre directement sur une nouvelle page sur internet explorer.

Reply

Marsh Posté le 08-08-2005 à 16:13:59    

Desole, c'est bon, j'avais fait une erreur dans mon lien en mettant "target="_blank", je l'ai supprimé et ta solution marche tres bien.  
 
Merci.  :jap:

Reply

Sujets relatifs:

Leave a Replay

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