|
Boris 3430
| 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
| |
Boris 3430
| 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
| 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
| 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
| 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
| 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
| Posté : 09-02-2005 10:12
Merci! J'te redis si ca marche! |  Profil E-mail www
|
|
Boris 3430
| 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
| 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
| |
Tribal-Dolphin 4374
| Posté : 10-02-2005 09:29
Bizarre tout ça.
Je testerais et je te tient au courant |  Profil
|
|
Boris 3430
| 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
| 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
| |
Aller à la page : [ 1 | 2 ] |