ludodoludujodu Posté 22 Mai 2006 Posté 22 Mai 2006 Bonsoir, Je m'explique, j'ai un script qui me permet de faire ça pour le moment: 1. Le visiteur rempli un formulaire. 2. Une page s'affiche, dans cette page il y a le contenu d'un fichier texte modifié avec les valeurs du formulaire). Et je voudrais ça: 1. Le visiteur rempli le formulaire. 2. Le fichier texte modifié lui est envoyé a l'adresse email entrée dans le formulaire. C'est là qu'est le problème, le fichier doit absolument s'appeler config.txt mais si par exemple 2 visiteurs remplissent et postent le formulaire en même temps il y a beaucoup de chance pour que l'un recoive le fichier de l'autre, comment faire ???? Merci d'avance pour vos réponses !!!
MS-DOS_1991 Posté 22 Mai 2006 Posté 22 Mai 2006 Jettes un oeil du côté de flock() qui te permet de verrouiller un fichier
ludodoludujodu Posté 22 Mai 2006 Auteur Posté 22 Mai 2006 mais si je fais flock() un des deux visiteurs qui a envoyé le formulaire en même temps que l'autre va rencontrer une erreur non?
MS-DOS_1991 Posté 22 Mai 2006 Posté 22 Mai 2006 mais si je fais flock() un des deux visiteurs qui a envoyé le formulaire en même temps que l'autre va rencontrer une erreur non? <{POST_SNAPBACK}> Oui, tu peux par exemple lui afficher un message d'erreur lui demandant de retenter un peu plus tard
ludodoludujodu Posté 22 Mai 2006 Auteur Posté 22 Mai 2006 huuuum ok mais sur un site ( http://www.eggdrop-fr.org/autoconf.php ) on ne rencontre jamais d'erreur et on ne reçoit jamais le fichier d'une autre personne, comment ils font ???
MS-DOS_1991 Posté 22 Mai 2006 Posté 22 Mai 2006 huuuum ok mais sur un site ( http://www.eggdrop-fr.org/autoconf.php ) on ne rencontre jamais d'erreur et on ne reçoit jamais le fichier d'une autre personne, comment ils font ??? <{POST_SNAPBACK}> Pourquoi ne crées-tu pas un fichier à partir de ton config.txt que tu renommes ensuite en config_md5(microtime().session_id()).txt (un nom unique quoi) ? Comme ça, plus de risques de collisions entre 2 utilisateurs
ludodoludujodu Posté 22 Mai 2006 Auteur Posté 22 Mai 2006 oué mais le visiteur ne recevra pas le fichier nommé config.txt alors ??? car il faudrait que le fichier soit nommé config.txt
MS-DOS_1991 Posté 22 Mai 2006 Posté 22 Mai 2006 A mon avis, le plus simple est pourtant de stocker ton hash md5 dans une variable $hash, puis d'envoyer à ton utilisateur le fichier config_$hash.txt que tu supprime avec unset() ensuite... Pourquoi dois-tu absolument utiliser config.txt comme nom de fichier ?
ludodoludujodu Posté 22 Mai 2006 Auteur Posté 22 Mai 2006 (modifié) parce que c'est un fichier de configuration d'eggdrop qui doit porter le nom config.txt et j'ai pas très bien compris la technique que tu me dis. Et si je créé un répertoire unique a un user, j'envoi le fichier config.txt qui se trouve dans le répertoire unique et je supprime le répertoire unique ???? Modifié 22 Mai 2006 par ludodoludujodu
MS-DOS_1991 Posté 22 Mai 2006 Posté 22 Mai 2006 (modifié) parce que c'est un fichier de configuration d'eggdrop qui doit porter le nom config.txt et j'ai pas très bien compris la technique que tu me dis. Et si je créé un répertoire unique a un user, j'envoi le fichier config.txt qui se trouve dans le répertoire unique et je supprime le répertoire unique ???? <{POST_SNAPBACK}> Oui, c'est le principe de ma méthode, seulement la tienne est plus longue et plus "compliquée" car tu dois: créer un répertoire unique Créer un fichier config.txt Envoyer ton fichier Supprimer le fichier Supprimer le répertoire ...alors qu'avec la mienne tu ne fais que: Créer un fichier config_$hash.txt Envoyer ton fichier Supprimer le fichier edit: Ca me paraît cependant être la moins mauvaise solution, vu que tu ne peux pas changer le nom de ton fichier... Enfin après, c'est ton script tu fais comme tu veux Modifié 22 Mai 2006 par MS-DOS_1991
MS-DOS_1991 Posté 22 Mai 2006 Posté 22 Mai 2006 mais $hash ça renvoit quoi? <{POST_SNAPBACK}> Dans la variable $hash, tu stockerait un "hash", c'est-à dire une chaîne de caractères qui identifierait précisément le visiteur (un hash par visiteur). Quelques posts au-dessus, je t'indique comment je ferais: <?phpsession_start();[...]$hash = md5(microtime().session_id()); Tu concatènerais ensuite ce hash au nom de ton fichier On aurait donc un fichier par utilisateur et plus de risques qu'un utilisateur obtienne le fichier d'un autre copy('config.txt', 'config_'.$hash.'.txt'); // creation du fichier avec le contenu de config.txt[...] // tes opérations sur le fichier + envoi vers ton utilisateur par email Ensuite bien évidemment, tu supprimes le fichier de ton utilisateur (rien de plus simple avec unset() ) et ... c'est tout unlink('config_'.$hash.'.txt');?> le code complet: <?phpsession_start();[...]$hash = md5(microtime().session_id());copy('config.txt', 'config_'.$hash.'.txt'); // creation du fichier avec le contenu de config.txt[...] // tes opérations sur le fichier + envoi vers ton utilisateur par emailunlink('config_'.$hash.'.txt');?>
ludodoludujodu Posté 22 Mai 2006 Auteur Posté 22 Mai 2006 (modifié) Mais en fait je voudrais pas mettre le contenu de config.txt dans le fichier config_sessid... .txt mais le contenu de $config car j'ai fais le code suivant: <?php$config = file_get_contents("config.txt" );function remplace($remplace){$remplace = str_replace("\$admin", $_POST['admin'], $remplace);$remplace = str_replace("\$owner", $_POST['owner'], $remplace);$remplace = str_replace("\$nickbot", $_POST['pseudobot'], $remplace);$remplace = str_replace("\$botnickalt", $_POST['pseudoaltern'], $remplace);$remplace = str_replace("\$serveurs", $_POST['serveurs'], $remplace);$remplace = str_replace("\$typeserv", $_POST['typeserv'], $remplace);$remplace = str_replace("\$username", $_POST['username'], $remplace);$remplace = str_replace("\$realname", $_POST['realname'], $remplace);$remplace = str_replace("\$fuseau", $_POST['fuseau'], $remplace);$remplace = str_replace("\$tmpformule", $_POST['tmpformule'], $remplace);$remplace = str_replace("\$script", $_POST['script'], $remplace);return $remplace;}$config = remplace($config);?> Modifié 22 Mai 2006 par ludodoludujodu
captain_torche Posté 22 Mai 2006 Posté 22 Mai 2006 Mais, pourquoi enregistrer le fichier sur le serveur ? Il suffit de modifier le fichier dans une variable (comme vous le faites jusqu'à présent), puis de l'envoyer directement au navigateur (via la commande header, en forçant le téléchargement, par exemple).
ludodoludujodu Posté 22 Mai 2006 Auteur Posté 22 Mai 2006 (modifié) hummm et comment faire ceci ??? Je vais coucher, bonne nuit et a demain Modifié 22 Mai 2006 par ludodoludujodu
captain_torche Posté 22 Mai 2006 Posté 22 Mai 2006 - Faire toutes les modifs dans ta variable - Déclarer, dans la page, le header suivant : <?phpheader('Content-type: text/plain');header('Content-Disposition: attachment; filename="config.txt"'); // Force le téléchargement du fichier -> identique à 'enregistrer la cible du lien sous'echo $tavariable;?> Bonne nuit !
ludodoludujodu Posté 23 Mai 2006 Auteur Posté 23 Mai 2006 Mais je suis toujours obligé d'enregistrer mon fichier sur le serveur ???? Là je vais en cours. A ce midi
captain_torche Posté 23 Mai 2006 Posté 23 Mai 2006 Tu as juste besoin d'avoir le fichier de base, enregistré sur le serveur. Le reste de la manipulation n'est pas enregistrée.
ludodoludujodu Posté 23 Mai 2006 Auteur Posté 23 Mai 2006 (modifié) J'ai fais ça: <?php$config = file_get_contents("config.txt" );// récupération du contenu de config.txtfunction remplace($remplace){// fonction pour remplacer avec les valeurs du formulaire$remplace = str_replace("\$admin", $_POST['admin'], $remplace);$remplace = str_replace("\$owner", $_POST['owner'], $remplace);$remplace = str_replace("\$nickbot", $_POST['pseudobot'], $remplace);$remplace = str_replace("\$botnickalt", $_POST['pseudoaltern'], $remplace);$remplace = str_replace("\$serveurs", $_POST['serveurs'], $remplace);$remplace = str_replace("\$typeserv", $_POST['typeserv'], $remplace);$remplace = str_replace("\$username", $_POST['username'], $remplace);$remplace = str_replace("\$realname", $_POST['realname'], $remplace);$remplace = str_replace("\$fuseau", $_POST['fuseau'], $remplace);$remplace = str_replace("\$tmpformule", $_POST['tmpformule'], $remplace);$remplace = str_replace("\$script", $_POST['script'], $remplace);return $remplace;}$config = remplace($config);// utilisation de la fonctionheader('Content-type: text/plain');header('Content-Disposition: attachment; filename="config.txt"'); echo $config;?> ça marche mais les retours à la ligne qu'il y avait dans le fichier original ne sont pas conservées, comment faire ??? Modifié 23 Mai 2006 par ludodoludujodu
captain_torche Posté 23 Mai 2006 Posté 23 Mai 2006 Rien de bien complexe : à la fin, tu rajoutes header('Content-type: text/plain');header('Content-Disposition: attachment; filename="config.txt"');echo $config;
ludodoludujodu Posté 23 Mai 2006 Auteur Posté 23 Mai 2006 (modifié) regarde mon post précédent, je l'ai modifié si tu veux tester voici l'adresse: http://www.dopo-irc.com/config/config.htm Modifié 23 Mai 2006 par ludodoludujodu
ludodoludujodu Posté 23 Mai 2006 Auteur Posté 23 Mai 2006 (modifié) en fait c'est bizar, sous le bloc note le fichier est sans retour a la ligne et dans note pad ++ il y sont, je ne comprend plus rien. EDIT: Je veisn de lire sur wikipedia que ce problème étaitdu au fait que unix n'utilise pas le même caractère de retour à la ligne que windows, il n'y a vrément pas de solution ??? Modifié 23 Mai 2006 par ludodoludujodu
captain_torche Posté 23 Mai 2006 Posté 23 Mai 2006 Il y en a sûrement une, laisse-nous le temps d'y réfléchir
MS-DOS_1991 Posté 23 Mai 2006 Posté 23 Mai 2006 Voici ce que j'ai trouvé: FAQ PHP sur Développez.com . Pour Windows, il faudra donc que tu fasse un str_replace("\n", "\r\n", $config) avant de renvoyer le fichier
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant