[php]erreur d'écriture/ouverture fichier .txt

Fermé
aloneInTheDark - 3 nov. 2005 à 16:58
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 - 4 nov. 2005 à 07:13
Salut à tous !!!!

J'ai un petit problème que je n'arrive pas à résoudre, je récupère via un formulaire, des données, ensuite je souhaiterais enregistrer ces données dans un fichier texte, mais cela ne fonctionne pas, pourtant lorsque je fais echo, cela affiche bien la valeur de mes variables, donc j'en déduit que c'est un problème soit d'écriture dans le fichier ou d'ouverture du fichier.
Voici le code :
<?php 

if(!empty ($_POST['nom']) and !empty($_POST['mail']) and !empty($_POST['texte']))
{ 
  if (isset($REMOTE_ADDR))
  { 
  $ip = $REMOTE_ADDR;
  }
  else
  {
  $ip = "adresse IP inconnue";
  }
  $mail = $_POST['mail'];
  $nom = $_POST['nom'];
  $message = $_POST['texte'];

  // vérification de l'e-mail 
  $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]';    // caractères autorisés avant l'arobase
  $domain = '([a-z]([-a-z0-9]*[a-z0-9]+)?)'; // caractères autorisés après l'arobase (nom de domaine)
  											
  $regex = '^' . $atom . '+' .    // Une ou plusieurs fois les caractères autorisés avant l'arobase
  '(\.' . $atom . '+)*' .         // Suivis par zéro point ou plus
                                  // séparés par des caractères autorisés avant l'arobase
  '@' .                           // Suivis d'un arobase
  '(' . $domain . '{1,63}\.)+' .  // Suivis par 1 à 63 caractères autorisés pour le nom de domaine
                                  // séparés par des points
  $domain . '{2,63}$';            // Suivi de 2 à 63 caractères autorisés pour le nom de domaine
  
  // test de l'adresse e-mail
  if (eregi($regex, $mail)) 
  { 
    // le problème doit se situer à ce niveau 
    
  	$fichierContact = fopen("fichiersTextes/contact.txt", "a");   // ouverture du fichier en écriture seule
  	if (is_writable('$fichierContact'))  // si le fichier est accessible en écriture
  	{
      fwrite($fichierContact, nl2br($nom)."\n");     // inscriptions dans le fichier
      fwrite($fichierContact, nl2br($ip)."\n");
      fwrite($fichierContact, nl2br($mail)."\n");
      fwrite($fichierContact, nl2br($message)."\n");
      fclose($fichierContact);
      echo "<p>Merci $nom votre message a bien été enregistré</p>";
    }
    else
    {
      echo "<p>une erreur s'est produite, merci d'en avertir le <a href='mailto:XXXXX'>webmaster</a>";
    }
  } 
  else 
  {
  	echo "<p>L'adresse e-mail $mail n'est pas valide</p>";
  }
}        
else
{
    echo "<p>Vous devez remplir tout les champs.</p>";
}

?>


Ou serait mon erreur ?

Merci.
A voir également:

3 réponses

GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
3 nov. 2005 à 17:18
A première vu, je dirai que le probleme ce situe à ce moment là :
if (is_writable('$fichierContact'))

Tu utilise la fonction is_writable() avec en paramètre une ressource de type "fichier", alors qu'il faut lui passez une chaine de caractère.
Comme il ne trouve aucun fichier correspondant (car PHP transforme la ressource un chaine de caratère, mais à ca manière) tu n'a jamais accès au fichier pour écrire dedans.
0
aloneInTheDark
3 nov. 2005 à 18:11
Merci GallyNet,

Voilà, j'ai changé en ceci :
if (eregi($regex, $mail)) 
  { 
    // le problème doit se situer à ce niveau 
    
  	$fichierContact = "fichiersTextes/contact.txt";
  	if (is_writable($fichierContact))  // si le fichier est accessible en écriture
  	{
  	  $ecriture = fopen($fichierContact, "a");   // ouverture du fichier en écriture seule
      fwrite($ecriture, nl2br($nom)."\r\n");     // inscriptions dans le fichier
      fwrite($ecriture, nl2br($ip)."\r\n");
      fwrite($ecriture, nl2br($mail)."\r\n");
      fwrite($ecriture, nl2br($message)."\r\n\r\n");
      fclose($ecriture);
      echo "<p>Merci $nom votre message a bien été enregistré</p>";
    }

Ca fonctionne, parfaitement :-)

J'aurais une autre question au passage, je souhaites protéger le dossier contenant ce fichier texte, j'ai pensé qu'en mettant un .htaccess, ce serait le plus simple, mais est-ce que cela ne va pas empêcher ce code de s'exécuter ?
0
GallyNet Messages postés 434 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 15 décembre 2008 386
4 nov. 2005 à 07:13
A priori non. Le fichier .htaccess ne bloque que les accés au fichier par le protocol HTTP. Comme le php est installé sur le serveur, il n'utilise pas le HTTP.
En résumé pas de problème.
0