Aller au contenu

Sujets conseillés

Posté

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 !!!

Posté
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 ;)

Posté
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 ^_^

Posté

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 ?

Posté (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é par ludodoludujodu
Posté (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é par MS-DOS_1991
Posté
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:

<?php
session_start();
[...]
$hash = md5(microtime().session_id());

Tu concatènerais ensuite ce hash au nom de ton fichier :wacko: On aurait donc un fichier par utilisateur et plus de risques qu'un utilisateur obtienne le fichier d'un autre :P

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 :lol:

unlink('config_'.$hash.'.txt');
?>

le code complet:

<?php
session_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 email
unlink('config_'.$hash.'.txt');
?>

Posté (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é par ludodoludujodu
Posté

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).

Posté

- Faire toutes les modifs dans ta variable

- Déclarer, dans la page, le header suivant :

<?php
header('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 !

Posté (modifié)

J'ai fais ça:

<?php

$config = file_get_contents("config.txt" );
// récupération du contenu de config.txt

function 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 fonction

header('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é par ludodoludujodu
Posté (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é par ludodoludujodu

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...