Gestion de Contenu, de Communauté et de groupes de travail collaboratif - Open Source, français, sécurisé, stable et performant

  • MODULES

    Pour étendre les nombreuses fonctionnalités disponibles de base - modules.npds.org est à votre disposition.

    Des modules complémentaires, une communauté de développeurs active, des forums pour vos questions ... NPDS  est aussi une plateforme de développement !
  • STYLES

    Vous cherchez des thèmes graphiques pour votre portail ou votre communauté : styles.npds.org est à votre disposition.

    Des thèmes du plus simple au plus sophistiqué. Des thèmes facilement modifiables et toujours en Open-Source - Laissez simplement parler votre imagination !
  • BIBLES

    La documentation indispensable pour personnaliser et exploiter toute la puissante de NPDS  est à votre disposition sur bible.npds.org.

    Vous pouvez participer à l'effort de documentation - rien de plus simple : contactez un membre de la Team de développement et nous vous ouvrirons un compte sur le Wiki !
Devenir membre    |    Identifiant : Mot de Passe : -
Au delà de la gestion de contenu 'classique', NPDS met en oeuvre un ensemble de fonctions spécifiquement dédiées à la gestion de Communauté et de groupes de travail collaboratif.
Il s'agit d'un Content & Community Management System (CCMS) robuste, sécurisé, complet, performant et parlant vraiment français.

Gérez votre Communauté d'utilisateurs, vos groupes de travail collaboratif, publiez, gérez et organisez votre contenu grâce aux puissants outils disponibles de base.
  • Multi langues (Français, Anglais, Allemand, Espagnol, Chinois)
  • Respect des standards : UTF8, XHTML, CSS, ...
  • Système de blocs avancés
  • Installation et administration complète et centralisée
  • Editeur HTML intégré
  • Gestionnaire de fichier en ligne
  • Gestion des groupes de membres
  • Ecriture collaborative de documents (PAD)
  • Forums évolués
  • Mini-sites (pour les membres et les groupes de travail)
  • Chat temp réel
  • Système de News et de rubriques complet (édition, révision, publication)
  • ...
Gratuit et libre (Open-Source), développé en PHP, NPDS est personnalisable grâce à de nombreux thèmes et modules et ne requiert que quelques compétences de base.
NPDS Workplace - groupe de travail collaboratif
 NPDS WorkSpace - tous l'univers du travail collaboratif.
Modéré par : developpeur jpb Jireck 
Index du Forum » » Le coin des codeurs » » Transmettre des données dans un fichier au navigateur...
2 pages [ 1 | 2 ]
AuteurTransmettre des données dans un fichier au navigateur...
Boris
3430       
 

Boris
  Posté : 09-02-2005 09:11

Salut tout le monde!

J'aurais besoin de transmettre des données générées à partir d'un formulaire sous forme d'un fichier (compressé ou non-compressé selon choix) comme le fait SavemySQL. Le problème... On fait comment?!?

  Profil  E-mail  www  
Tribal-Dolphin
4374       
 

Tribal-Dolphin
  Posté : 09-02-2005 09:22

http://www.Nexen.net et tu fait une recherche dans la doc PHP sur :
- fopen()
- fwrite()
- fclose()

Ces trois fonctions te permetent d'écrire dans un fichier. D'ailleurs, savemysql les utilises, tout comme les préférences, .......

Et ensuite, pour envoyer ce beau fichier dans le navigateur du client (pour forcer le download en fait) tu n'as qu'à suivre ceci http://www.tribal-dolphin.net/sections.php?op=viewarticle&artid=21

Message édité par : Tribal-Dolphin


  Profil  
Boris
3430       
 

Boris
  Posté : 09-02-2005 09:28

Mais euh... Ca permet aussi de transmettre un fichier sans qu'il soit fait sur le serveur? (Pr pas qu'il y ait de conflit si plusieurs personnes utilisent le formulaire en même temps et que les fichiers de chacune de ces deux personnes se marchent dessus...) Moi, faudrait juste que l'utilisateur recoive le fichier, mais pas qu'il soit créé sur le serveur... Si c'est possible! Ou alors une idée pour éviter les conflits?

  Profil  E-mail  www  
Boris
3430       
 

Boris
  Posté : 09-02-2005 09:38

Bon, je pense avoir trouvé une partie de la solution... Grace au lien de TD! (Merci bôcou!!!)



<?php
// Fichier à télécharger :
$fichier = 'docs/bon_de_commande.doc';
$mom_fichier = 'bon_de_commande.doc';

// Pour forcer le téléchargement, il faut utiliser des HEADER
// Attachement du fichier
header('!!content-disposition:!! attachment; filename='.$mom_fichier);
// Type de document, toujours mettre application/force-download
header('!!content-type:!! application/force-download');
header('!!content-transfer-encoding:!! fichier');
// La taille du fichier est obtenu par la fonction filesize
header('Content-Length: '.filesize($fichier));
// Pas de mise en cache
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
// Envoie du fichier
readfile($fichier);

==> Ici, si j'affiche simplement la variable qui contient ce qui est censé se trouver dans le fichier avec des echo, ca marche?

?>



Et pour un cas comme celui-là, comment faire pour déterminer la taille? On peut laisser le header('Content-Length: vide?

Message édité par : Boris


  Profil  E-mail  www  
Tribal-Dolphin
4374       
 

Tribal-Dolphin
  Posté : 09-02-2005 09:40

Tu est obliger de le créer sur le serveur, mais juste après l'envoie, tu peut le supprimer bien sûr !!

Par contre, je ne comprends pas ton histoire de conflit, il ne peut en avoir car tu fait tout sur la même page (1 page de formulaire et 1 page qui crée / envoie / supprime le fichier)

  Profil  
Boris
3430       
 

Boris
  Posté : 09-02-2005 09:48

CT si deux personnes génèrent leur fichier en même temps... Tu pense le risque est suffisemment minime pour que ca ne gêne pas? (J'suis assez accro sur la sécu! )

  Profil  E-mail  www  
Tribal-Dolphin
4374       
 

Tribal-Dolphin
  Posté : 09-02-2005 09:49

Pour faire simple, voici un exemple avec un formulaire qui envoie les variables $nom, $prenom, $age



<?
$nom_fichier 
uniqid ();
$nom_fichier $nom_fichier.".txt";
$fichier = 
"docs/".$nom_fichier;

$fp = fopen($fichier, 
"w");
fwrite($fp, 
"NOM : ".$nom."\n");
fwrite($fp, 
"PRENOM : ".$prenom."\n");
fwrite($fp, 
"AGE : ".$age." ans\n");
fclose($fp);

// Le fichier est crée, on va donc at taqué le download
// Pour forcer le téléchargement, il faut  utiliser des HEADER
// Attachement du fichier
header('!!!content-disposition:!!! attachment; filename='.$mom_fich ier);
// Type de document, toujours mettre applicatio n/force-download
header('!!!content-type:!!! application/force-download');
header('!!!content-transfer-encoding:!!! fichier');
// La taille du fichier est obtenu par&nbs p;la fonction filesize
header('Content-Length: '.filesize($fichier));
// Pas de mise en cache
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate,&nb sp;post-check=0, pre-check=0');
header('Expires: 0');
// Envoie du fichier
readfile($fichier);

// On efface le fichier car on en à&n bsp;plus besoin
unlink($fichier);
?>




Et voilà, tu à tout ce dont tu à besoin

  Profil  
Boris
3430       
 

Boris
  Posté : 09-02-2005 10:12

Merci! J'te redis si ca marche!

  Profil  E-mail  www  
Boris
3430       
 

Boris
  Posté : 09-02-2005 10:31

Euh... Ou est l'erreur? Le fichier est créé sur le serveur et il contient bien le mot Bonjour, mais pas le fichier récupéré par le vanigateur... (j'ai essayé en appelant le fichier install.conf.txt, mais ca change rien)
Voilà le code:


<?
    $installconf 
"modules/".$ModPath."/generator/install.conf.php";
    $fp = fopen($installconf,
"w");
    if(@fwrite($fp, 
"Bonjour"))
    
{
        fclose($fp);
        // Pour forcer  ;le téléchargement, il faut utiliser des HEADER < br />        // Attachement du&n bsp;fichier
        header('!content-disposition: ! attachment; filename=install.conf.php');
        // Type de doc ument, toujours mettre application/force-download
        header('!content-type:!  application/force-download');
        header('!content-transfer-enc oding:! fichier');
        // La taille d u fichier est obtenu par la fonction filesiz e
        header('Content-Length:  '.filesize($installconf));
        // Pas de mise  en cache
        header('Pragma: no-cache ');
        header('Cache-Control: n o-store, no-cache, must-revalidate, post-check=0, pre-check =0');
        header('Expires: 0');
        // Envoie du f ichier
        readfile($installconf);
        unlink($installconf);
    
}
    else
    
{
        if(file_exists($installconf))
        
{
            unlin k($installconf);
        
}
        echo 
"<br/><br/><h1 style=\"color:red\">Impossible de créer le fichier ins tall.conf.php. Vérifiez que le dossier modules/ ".$ModStart."/generator/ a bien un chod 777.</h1 >";
    
}
?>




HELP!

  Profil  E-mail  www  
Tribal-Dolphin
4374       
 

Tribal-Dolphin
  Posté : 09-02-2005 11:54

Vérifie que tu passe bien la variable $ModPath

Et essaye ceci (mais suis pas convaincu)

<?
readfile
(stripslashes(basename($installconf)));
?>


  Profil  
Boris
3430       
 

Boris
  Posté : 09-02-2005 12:01

$ModPath ok, puisque le fichier est correctement écrit sur le serveur, mais ca marche pas non plus avec ta modif

Message édité par : Boris


  Profil  E-mail  www  
Tribal-Dolphin
4374       
 

Tribal-Dolphin
  Posté : 10-02-2005 09:29

Bizarre tout ça.
Je testerais et je te tient au courant

  Profil  
Boris
3430       
 

Boris
  Posté : 10-02-2005 12:23

J'ai trouvé!!!!!!

Le problème ne viens pas du script!
Il vient du fait que admin.php inclu automatiquement le header.php et donc envoie des données au navigateur AVANT l'envoi des headers et du fichier, ce qui fait planter le bazar! J'ai essayé en faisant l'appel à partir de modules.php qui n'inclus pas le header.php, et ca marche!

Le problème, maintenant:

Est-ce qu'il existe un paramètre qui permette à admin.php de ne pas inclure le header.php ?

Car ce script est exécuté depuis le NPDS-Plugin, et est réservé aux admin...

  Profil  E-mail  www  
Tribal-Dolphin
4374       
 

Tribal-Dolphin
  Posté : 10-02-2005 15:26

Ouverture du fichier en popup, je ne vois que ça !!

Ou mieux, tu fait ton traitement et ensuite tu ouvre un popup avec le paramètre du nom de fichier dans l'URL.

Après, c'est à toi de faire ta sauce.

  Profil  
Boris
3430       
 

Boris
  Posté : 10-02-2005 15:35

Je crois que j'ai trouvé une autre soluce... Je conserve l'appel par modules.php, et pr le mettre dans npdsplugin, je fais comme c'est fait pour sdv dans sable. (Sais pas si ca y est dans narval...)
Par contre, faut inclure des tests sur la variable $admin pour contrôler si la personne est admin ou pas... Avis?

EDIT : C bon, ca marche! Merci à tous pour votre aide! (Enfin... Merci TD!)

NMIG bientôt en test sur modules!!!

Conception de logiciels, sites web & communication, hébergement web professionnel, solutions de sécurité, dépannage/maintenance et fourniture de matériel, etc.
E-Concept Applications

Message édité par : Boris


  Profil  E-mail  www  
Aller à la page : [ 1 | 2 ]
Sauter à :

Temps : 0.0208 seconde(s)